我编写了一个简单的脚本来处理收到的电子邮件。以下是经过测试的场景:
A. 脚本功能是发送一封电子邮件,表明在管道地址收到了一封电子邮件。
- 浏览器测试 - 成功
- 由 CLI 测试 - 成功
-通过管道测试 - 成功
B. 脚本功能是解析文件并将其写入文件夹,并发送电子邮件以指示在管道地址收到电子邮件
- 由浏览器测试 - 文件写入和电子邮件发送。
- 由 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 */
错误消息已通过电子邮件发送。怎么办?管道调用的脚本以什么用户身份运行?