Передать переменную в php-скрипт работает из командной строки
у меня есть PHP-файл, который необходимо запустить из командной строки (через crontab). Мне нужно пройти type=daily файл, но я не знаю как. Я попробовал:
php myfile.php?type=daily
но эта ошибка была возвращена:
не удалось открыть входной файл: файл myfile.php?тип=ежедневно
что я могу сделать?
12 ответов:
The
?type=dailyаргумент (в конечном итоге в$_GETмассив) только для веб-страниц.вам нужно будет назвать это как
php myfile.php dailyи получить этот аргумент от$argvмассив (который будет$argv[1]С$argv[0]будетmyfile.php).если страница также используется в качестве веб-страницы, вы можете рассмотреть два варианта. Либо доступ к нему с shell-скрипт из cron и wget и называем это:
#!/bin/sh wget http://location.to/myfile.php?type=dailyили проверить в php-файл вызывается ли он из командной строки или нет:
if (defined('STDIN')) { $type = $argv[1]; } else { $type = $_GET['type']; }(Примечание: вам, вероятно, нужно / хотите проверить, если
$argvна самом деле содержит мало переменных и т. п.)
просто передайте его как обычные параметры и получите доступ к нему в PHP с помощью
$argvмассив.php myfile.php dailyи в файл myfile.php
$type = $argv[1];
эти строки преобразуют аргументы вызова CLI как
php myfile.php "type=daily&foo=bar"в известной$_GET-массив:if (!empty($argv[1])) { parse_str($argv[1], $_GET); }хотя это довольно грязно, чтобы перезаписать глобальный
$_GET-массив, он быстро преобразует все ваши скрипты, чтобы принимать аргументы CLI.см.http://php.net/manual/en/function.parse-str.php для деталей.
параметры отправки по индексу, как и другие приложения
php myfile.php type=dailyи тогда вы можете Гат их так
<?php if (count($argv) == 0) exit; foreach ($argv as $arg) echo $arg; ?>
Сохраните этот код в файл
myfile.phpи работать какphp myfile.php type=daily<?php $a = $argv; $b = array(); if (count($a) == 1) exit; foreach ($a as $key => $arg){ if ($key > 0){ list($x,$y) = explode('=', $arg); $b["$x"] = $y; } } ?>если добавить
var_dump($b);до?>тег, вы увидите, что массив$bсодержитtype => daily.
<?php if (count($argv) == 0) exit; foreach ($argv as $arg) echo $arg; ?>этот код не должен использоваться. Прежде всего CLI называется так: /usr/bin/php phpscript.php будет иметь одно значение argv, которое является именем скрипта
array(2) { [0]=> string(13) "phpscript.php" }этот всегда будет выполняться, так как будет иметь 1 или 2 args passe
Я настоятельно рекомендую использовать getopt.
документация по адресу http://php.net/manual/en/function.getopt.php
Если вы хотите помощь распечатать для ваших вариантов, чем взглянуть на https://github.com/c9s/GetOptionKit#general-command-interface
чтобы использовать $_GET, так что вам не нужно поддерживать оба, если он может быть использован из командной строки и из веб-браузера.
if(isset($argv)) foreach ($argv as $arg) { $e=explode("=",$arg); if(count($e)==2) $_GET[$e[0]]=$e[1]; else $_GET[$e[0]]=0; }
с помощью функции getopt () мы также можем прочитать параметр из командной строки просто передать значение с помощью PHP running command
в PHP Азбука.php --name=xyz
abc.php
$val = getopt(null, ["name:"]);
print_r ($val);
о/п: -
массив ( 'name' = > 'xyz', )
вы можете используйте то, что sep16 on php.net рекомендует:
<?php parse_str(implode('&', array_slice($argv, 1)), $_GET); ?>он ведет себя точно так же, как вы ожидали бы с cgi-php.
$ php -f myfile.php type=daily a=1 b[]=2 b[]=3устанавливается
$_GET['type']до'daily',$_GET['a']до'1'и$_GET['b']доarray('2', '3').
просто передайте его в качестве параметра следующим образом:
php test.php one two threeи внутри теста.php:
<?php if(isset($argv)) { foreach ($argv as $arg) { echo $arg; echo "\r\n"; } } ?>
if (isset($argv) && is_array($argv)) { $param = array(); for ($x=1; $x<sizeof($argv);$x++) { $pattern = '#\/(.+)=(.+)#i'; if (preg_match($pattern, $argv[$x])) { $key = preg_replace($pattern, '', $argv[$x]); $val = preg_replace($pattern, '', $argv[$x]); $_REQUEST[$key] = $val; $$key = $val; } } }Я поставил параметры в $_REQUEST
$_REQUEST[$key] = $val;
а также использовать непосредственно
$$key=$val
использовать это так:
мой_файл.php / key=val
Comments