我在服务器上设置了一个电子邮件管道,它将电子邮件的正文传递给脚本进行处理。脚本所做的部分工作是从我的phpbb3安装中与电子邮件中的信息交叉引用数据。为此,我包含了common.php,它填充了一些数据库变量。
这个脚本已经工作了很长时间。它最近不工作了。我怀疑这是由于我的主机升级PHP,因为我在同一时间遇到了其他问题。但是,我不确定这一点,因为直到最近我才知道脚本没有运行。
我已经将问题简化为以下脚本:
$myFile = "a.txt";
$fh = fopen($myFile, 'a') or die("can't open file");
fwrite($fh, getcwd());
fclose($fh);
include('./common.php');
$myFile = "a.txt";
$fh = fopen($myFile, 'a') or die("can't open file");
fwrite($fh, ' success!');
fclose($fh);
如果我在浏览器中导航到脚本,我在'a.t txt'中得到以下内容:
/home/mywebsite/public_html success!
如果我通过电子邮件管道运行脚本,我将在a.t txt中得到以下内容:
/home/mywebsite/public_html
我还得到一个返回的反弹消息:
pipe to |php -q -n /home/mywebsite/public_html/theScript.php
generated by myemail@mywebsite.com
local delivery failed
我已经用这种方法工作太久了。希望有人能对如何解决这个问题有一些见解
我终于自己弄明白了。
当前脚本是如何被调用的(它突然停止工作):
在面板中,设置一个电子邮件过滤器来匹配一个主题。然后,使用以下语法将内容管道到脚本:php -q -n /path/to/script.php
脚本不包含#!/usr/bin/php -q
作为第一行。
我怀疑PHP发生了升级,导致这个方法停止工作。
我将管道语法更改为:/path/to/script.php
然后我将脚本的第一行更改为:#!/usr/bin/php -q
在此更改之后,一封与我的过滤器匹配的电子邮件弹出了一个与原始问题中所述不同的错误。新的错误是permission denied
。我将PHP脚本的权限更改为755,一切又正常了!