Вызов exec для php-файла и передача параметров? - PullRequest
17 голосов
/ 08 июня 2011

Я хочу вызвать php-файл, используя exec .

Когда я его вызываю, я хочу иметь возможность передавать переменную через (id).

Я могу позвонить echo exec("php /var/www/unity/src/emailer.php"); нормально, но в тот момент, когда я добавляю что-то вроде echo exec("php /var/www/unity/src/emailer.php?id=123");, вызов exec не срабатывает.

Как я могу это сделать?

Ответы [ 4 ]

28 голосов
/ 08 июня 2011

Ваш вызов сбой, потому что вы используете синтаксис веб-стиля (?parameter=value) с вызовом командной строки. Я понимаю, о чем ты думаешь, но это просто не работает.

Вместо этого вы захотите использовать $argv. См. руководство по PHP .

Чтобы увидеть это в действии, запишите эту однострочную строку в файл:

<?php print_r($argv); ?>

Затем вызовите его из командной строки с аргументами:

php -f /path/to/the/file.php firstparam secondparam

Вы увидите, что $argv содержит имя самого скрипта в качестве нулевого элемента, за которым следуют любые другие параметры, которые вы передали.

2 голосов
/ 21 февраля 2013

этот адаптированный скрипт показывает 2 способа передачи параметров в скрипт php из команды php exec: НАЗВАНИЕ СЦЕНАРИИ

<?php 
$fileName = '/var/www/ztest/helloworld.php 12';
$options = 'target=13';
exec ("/usr/bin/php -f {$fileName} {$options} > /var/www/ztest/log01.txt 2>&1 &");

echo "ended the calling script"; 
?>

НАЗВАННЫЙ СКРИПТ

<?php
echo "argv params: ";
print_r($argv); 
if ($argv[1]) {echo "got the size right, wilbur!  argv element 1: ".$argv[1];}
?> 

Не забудьте проверить разрешения на выполнение и создать файл log01.txt с разрешениями на запись (ваш пользователь apache обычно будет www-data).

РЕЗУЛЬТАТ

argv params: Array

(

[0] => /var/www/ztest/helloworld.php

[1] => 12

[2] => target=13

)

получил правильный размер, элемент 1 wilburargv: 12

выберите любое решение, которое вы предпочитаете для передачи своих параметров, все, что вам нужно сделать, - это получить доступ к массиву argv и получить их в порядке их передачи (имя файла - элемент 0).

tks @ hakre

2 голосов
/ 08 июня 2011

попробуйте echo exec("php /var/www/unity/src/emailer.php 123"); в вашем скрипте, затем прочитайте в параметры командной строки .

1 голос
/ 08 июня 2011

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

exec("QUERY_STRING=id=123 php-cgi /var/www/emailer.php");

Но для этого могут потребоваться более поддельные переменные среды CGI. Поэтому часто рекомендуется переписать вызываемый скрипт и позволить ему принимать обычные аргументы командной строки и читать их через $_SERVER["argv"].

(Вы также можете просто подделать поведение php-cgi с помощью обычного интерпретатора php и приведенного выше примера, добавив parse_str($_SERVER["QUERY_STRING"], $_GET); поверх вашего скрипта.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...