Оболочка запускает/выполняет php-скрипт с параметрами


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

Вот как я бы запустил php-файл:

Php -q htdocs/file.php

Мне нужно, чтобы параметр "показать" был передан и

Php -q htdocs/файл.php?показать=имя_шоу

Не работает

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

Author: Tshepang, 2011-07-20

5 answers

Test.php :

<?php
print_r($argv);
?>

Оболочка:

$ php -q test.php foo bar
Array
(
    [0] => test.php
    [1] => foo
    [2] => bar
)
 39
Author: schneck, 2017-03-31 00:10:50

Если у вас есть веб-сервер (установлен не только интерпретатор 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; надеюсь, это поможет.

 4
Author: FlameStorm, 2017-05-23 12:10:05

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

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

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

 3
Author: Brad, 2011-07-20 15:04:57

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

FOO=42 BAR=quux php test.php

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

 2
Author: troelskn, 2011-07-20 15:15:13

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

 0
Author: kritya, 2013-07-22 20:52:27