Оболочка запускает/выполняет php-скрипт с параметрами
Мне нужно выполнить php-файл с параметрами через оболочку.
Вот как я бы запустил php-файл:
Php -q htdocs/file.php
Мне нужно, чтобы параметр "показать" был передан и
Php -q htdocs/файл.php?показать=имя_шоу
Не работает
Если бы кто-нибудь мог объяснить мне, какую команду выполнить, чтобы заставить php-файл выполняться с заданными параметрами, я был бы очень признателен. Если нет, попробуйте возглавить я в правильном направлении.
5 answers
Test.php :
<?php
print_r($argv);
?>
Оболочка:
$ php -q test.php foo bar
Array
(
[0] => test.php
[1] => foo
[2] => bar
)
Если у вас есть веб-сервер (установлен не только интерпретатор php, но и LAMP/LNMP/etc) - просто попробуйте это
wget -O - -q -t 1 "http://mysite.com/file.php?show=show_name" >/dev/null 2>&1
Где:
- "-O -" - (буква "O", а не ноль!) перенаправляет "загруженный html" в стандартный вывод
- ">/dev/null 2>&1" - перенаправление вывода stdout и stderr в никуда
- "-q" - тихо wget запуск
- "-t 1" - просто 1 попробуйте подключиться (не так, как по умолчанию 20)
В PHP "exec" это будет примерно так это:
function exec_local_url($url) {
exec('/usr/bin/wget -O - -q -t 1 "http://'. $_SERVER['HTTP_HOST'] .'/'
. addslashes($url) . '" >/dev/null 2>&1'
);
}
// ...
exec_local_url("file.php?show=show_name");
exec_local_url("myframework/seo-readable/show/show_name");
Таким образом, вам не нужно менять свои сценарии для обработки argc/argv, и вы можете использовать $_GET, как обычно.
Если вы хотите, чтобы задания выполнялись в фоновом режиме - см., Например, Unix/Windows, Настройка фонового процесса? из кода php
Я использую подход с wget в своих заданиях cron; надеюсь, это поможет.
Вам необходимо прочитать параметры командной строки из $argc и $argv.
Использование вопросительного знака - это то, что вы делаете в URL-адресе и не имеет ничего общего с выполнением PHP из командной строки.
См. также: http://www.sitepoint.com/php-command-line-1/
В дополнение к другим ответам (которые являются вполне правильными), вы также можете передавать аргументы в качестве параметров среды, например:
FOO=42 BAR=quux php test.php
Затем они будут доступны в суперглобальном $_ENV
.
Если вы используете его из файла PHP, то вы можете использовать popen() и сделать что-то вроде этого:
$part = $show_name; //or whatever you want with spaces
$handle = popen("php -q nah.php -p=". escapeshellarg($part) . " 2>&1", "r");
Здесь используется функция escapeshellarg(), чтобы заключить переменную $part
в кавычки (и экранировать любые кавычки внутри нее), чтобы ее можно было безопасно использовать в качестве аргумента оболочки.