Подтвердить что ты не робот

Shell run/execute PHP скрипт с параметрами

Мне нужно выполнить php файл с параметрами через оболочку.

вот как я запустил php файл:

php -q htdocs/file.php

Мне нужно передать параметр 'show' и

php -q htdocs/file.php? show = show_name

не работает

Если кто-то может указать мне, какую команду выполнить, чтобы получить файл php для выполнения с заданными параметрами, это было бы очень признательно. Если нет, постарайтесь привести меня в правильном направлении.

4b9b3361

Ответ 1

test.php:

<?php
print_r($argv);
?>

Shell:

$ php -q test.php foo bar
Array
(
    [0] => test.php
    [1] => foo
    [2] => bar
)

Ответ 2

Если у вас есть веб-сервер (установлен не только PHP-интерпретатор, но и LAMP/LNMP/etc) - попробуйте это

wget -O - -q -t 1 "http://mysite.com/file.php?show=show_name" >/dev/null 2>&1

где:

  • "-O -" - (буква "O", а не ноль!) перенаправить "скачанный html" в stdout
  • " > /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, как обычно.

Если вам нужны задания, запущенные в фоновом режиме - см. ex. Unix/Windows, установить фоновый процесс? из php-кода

Я использую подход с wget в своих заданиях cron; надеюсь, что это поможет.

Ответ 3

Вам нужно прочитать параметры командной строки из $argc и $argv.

Использование вопросительного знака - это то, что вы делаете в URL-адресе и не имеющее ничего общего с выполнением PHP из командной строки.

Смотрите также: http://www.sitepoint.com/php-command-line-1/

Ответ 4

В дополнение к другим ответам (что вполне правильно) вы также можете передавать аргументы в качестве параметров среды, например:

FOO=42 BAR=quux php test.php

Затем они будут доступны в суперглобальном $_ENV.

Ответ 5

Если вы используете его из файла 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 в кавычки (и избежать кавычек внутри нее), чтобы она могла безопасно использоваться в качестве аргумента оболочки.