Передать переменную скрипту php, запущенному из командной строки

У меня есть файл PHP, который необходимо запустить из командной строки (через crontab). Мне нужно передать type=daily в файл, но я не знаю, как это сделать. Я пытался:

 php myfile.php?type=daily 

но эта ошибка была возвращена:

Не удалось открыть входной файл: myfile.php? Type = daily

Что я могу сделать?

Аргумент ?type=daily (заканчивается в массиве $_GET ) действителен только для страниц с веб-доступом.

Вам нужно будет вызывать его как php myfile.php daily и извлекать этот аргумент из массива $argv (который будет $argv[1] , так как $argv[0] будет myfile.php ).

Если страница используется как веб-страница, есть два варианта, которые вы могли бы рассмотреть. Либо доступ к нему с помощью сценария оболочки и wget, и вызов из cron:

 #!/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]; 

параметры отправляются по индексу, как и другие приложения

 php myfile.php type=daily 

и тогда вы можете их убить так

 <?php if (count($argv) == 0) exit; foreach ($argv as $arg) echo $arg; ?> 

Эти строки преобразуют аргументы вызова CLI, такие как php myfile.php "type=daily&foo=bar" в известный $_GET -array:

 if (!empty($argv[1])) { parse_str($argv[1], $_GET); } 

Хотя довольно сложно перезаписать глобальный $_GET -array, он быстро преобразует все ваши скрипты, чтобы принимать аргументы CLI.

Подробнее см. http://php.net/manual/en/function.parse-str.php .

Сохраните этот код в файле myfile.php и запустите его как php myfile.php type=daily

 <?php $a = $argv; $b = array(); if (count($a) == 0) exit; foreach ($a as $arg){ 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 аргумента passe

Я настоятельно рекомендую использовать getopt.

Документация по адресу http://php.net/manual/en/function.getopt.php

Если вы хотите распечатать справку для своих опций, посмотрите на https://github.com/c9s/GetOptionKit#general-command-interface

 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, '$1', $argv[$x]); $val = preg_replace($pattern, '$2', $argv[$x]); $_REQUEST[$key] = $val; $$key = $val; } } } 

Я поставил параметры в $ _REQUEST

$ _REQUEST [$ key] = $ val;

и также можно использовать непосредственно

$$ ключ = $ Вэл

используйте это так:

myFile.php / key = val