Использование exec () в PHP: передача аргументов - PullRequest
1 голос
/ 01 августа 2011

В целях тестирования, скажем, input.PHP выглядит следующим образом

<?php
{
$TO = "joe@net.net";
$FROM = "bob@net.net";
$SUB = "Yadda";
$BODY = "This is a test";
exec("/usr/bin/php /xxx.yyy.net/TESTS/sendit.PHP $TO $SUB $BODY $FROM > /dev/null &");
echo "DONE";
}
?>

И sendit.PHP, вызываемый exec (), выглядит следующим образом

<?php
$to      = $argv[1];
$subject = $argv[2];
$message = $argv[3];
$headers = 'From: '.$argv[4]. "\r\n" .
'Reply-To: '.$argv[4]. "\r\n" .
'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);
?>

Когда яоткройте input.PHP в моем браузере, я получаю эхо-сообщение DONE, но тестовое письмо не отправляется.Что не так с моим кодом?Спасибо.

Ответы [ 2 ]

3 голосов
/ 02 августа 2011

Без информации об ошибках, я не уверен, что это вся проблема, но я бы начал с этого:

Аргументы, прочитанные $argv, разделены пробелом. Следующий код:

 /usr/bin/php /xxx.yyy.net/TESTS/sendit.PHP $TO $SUB $BODY $FROM > /dev/null &

выполняется в вашем примере следующим образом:

 /usr/bin/php /xxx.yyy.net/TESTS/sendit.PHP joe@net.net Yadda This is a test bob@net.net > /dev/null &

То есть $argv[3] == 'This' и $argv[4] == 'is'.

1 голос
/ 02 августа 2011

Без всякой отладки я не думаю, что кто-нибудь сможет дать вам ответ.

Вы должны помнить, что * nix чувствителен к регистру .Таким образом, вы должны убедиться, что / xxx.yyy.net / TESTS и т. Д. Действительно в правильном регистре, написано правильно .

Также я бы предложил не отправлять все/dev/null и, возможно, в файл.Просто потому, что /usr/bin/php мог использовать другой конфиг (случалось со мной раньше), и он не работал должным образом, когда я запускал скрипты в crontab.

Вам нужно узнать больше информации!Проверьте журналы php, посмотрите, что этот скрипт даст вам при запуске из терминала.

...