Вызов exec в файле php и передача параметров?

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

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

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

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

Ответ 1

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

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

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

<?php print_r($argv); ?>

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

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

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

Ответ 3

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

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

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

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

Ответ 4

этот адаптированный script показывает 2 способа передачи параметров в PHP скрипт из команды php exec: CALLING SCRIPT

<?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"; 
?>

CALLED 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-данными).

РЕЗУЛЬТАТ

argv params: Array

(

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

[1] => 12

[2] => target=13

)

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

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

tks @hakre