Shell запустить / выполнить PHP-скрипт с параметрами - PullRequest
35 голосов
/ 20 июля 2011

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

Вот как я должен запустить php-файл:

php -q htdocs / file.php

Мне нужно, чтобы параметр 'show' был пропущен и

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

не работает

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

Ответы [ 5 ]

46 голосов
/ 20 июля 2011

test.php:

<?php
print_r($argv);
?>

Оболочка:

$ php -q test.php foo bar
Array
(
    [0] => test.php
    [1] => foo
    [2] => bar
)
5 голосов
/ 18 апреля 2013

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

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

где:

  • «-O -» - (буква «О», а не ноль!) Перенаправить «скачанный html» на стандартный вывод
  • «> / dev / null 2> & 1» - перенаправить вывод stdout & stderr в никуда
  • «-q» - тихий wget пробег
  • «-t 1» - просто 1 попытаться подключиться (не так, как по умолчанию 20)

В "exec" PHP это будет что-то вроде этого:

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; надеюсь, это поможет.

3 голосов
/ 20 июля 2011

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

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

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

2 голосов
/ 20 июля 2011

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

FOO=42 BAR=quux php test.php

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

0 голосов
/ 20 июля 2011

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

...