У меня есть простой скрипт, написанный для обработки полученного письма.Вот проверенные сценарии:
A.Функция сценария заключается в отправке электронного письма, указывающего, что электронное письмо было получено по указанному адресу.
- проверено браузером - Успех
- проверено CLI - Успех
- проверено трубопроводом- Успех
Б.Функция сценария состоит в том, чтобы анализировать и записывать файлы в папку, И отправлять электронную почту, указывая, что электронная почта была получена по адресу
- проверено браузером - Файлы записаны и отправлено электронное письмо.
- проверено CLI - Файлынаписано и отправлено по электронной почте.
- проверено с помощью трубопровода - файлы НЕ записаны, НО электронное письмо отправлено.
Я упростил скрипт до базовой функции чтения и записи переданного сообщения.Я подозреваю, что проблема связана с разрешением, но я не могу найти никаких подтверждающих доказательств.
Я не владею CLI, но могу выполнить некоторую задачу.Я не уверен, где искать файлы журналов для конвейерного сценария.
Трубопровод прекрасно работает во всех протестированных сценариях.Вот упрощенный код, который не выполняется при вызове по трубопроводу:
#!/usr/bin/php -q
<?php
/* Read the message from STDIN */
$fd = fopen("php://stdin", "r");
$email = ""; // This will be the variable holding the data.
while (!feof($fd)) {
$email .= fread($fd, 1024);
}
fclose($fd);
/* Saves the data into a file */
$fdw = fopen("/my/folder/mail.txt", "w");
fwrite($fdw, $email);
fclose($fdw);
/* Script End */
Спасибо за любую помощь.
Изменен код:
#!/usr/bin/php -q
<?php
/* Read the message from STDIN */
$email = file_get_contents('php://stdin');
/* Saves the data into a file */
$fdw = fopen("/Volumes/Cobra/Sites/email/mail.txt", "w+");
if (! $fdw) {
error_log("Unable to open mail.txt for output.", 1, "myemail@mydomain.com", "From: admin@mydomain.com");
} else {
fwrite($fdw, $email);
}
fclose($fdw);
/* Script End */
Сообщение об ошибке было отправлено по электронной почте.Что теперь?От какого пользователя запускается вызванный каналом сценарий?