Ответ 1
test.php:
<?php
print_r($argv);
?>
Shell:
$ php -q test.php foo bar
Array
(
[0] => test.php
[1] => foo
[2] => bar
)
Мне нужно выполнить php файл с параметрами через оболочку.
вот как я запустил php файл:
php -q htdocs/file.php
Мне нужно передать параметр 'show' и
php -q htdocs/file.php? show = show_name
не работает
Если кто-то может указать мне, какую команду выполнить, чтобы получить файл php для выполнения с заданными параметрами, это было бы очень признательно. Если нет, постарайтесь привести меня в правильном направлении.
test.php:
<?php
print_r($argv);
?>
Shell:
$ 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
где:
В 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, как обычно.
Если вам нужны задания, запущенные в фоновом режиме - см. ex. 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
в кавычки (и избежать кавычек внутри нее), чтобы она могла безопасно использоваться в качестве аргумента оболочки.