不能包含来自php电子邮件管道的文件

时间:2014-05-27 20:34:53

标签: php pipe phpbb3

我在我的服务器上设置了一个电子邮件管道,它将电子邮件正文传递给要处理的脚本。脚本所做的部分工作是从我的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.txt'中获得以下内容:

/home/mywebsite/public_html success!

如果我通过电子邮件管道运行脚本,我会在a.txt中获得以下内容:

/home/mywebsite/public_html

我还收到了退回的退回邮件:

  pipe to |php -q -n /home/mywebsite/public_html/theScript.php
    generated by myemail@mywebsite.com
    local delivery failed

我一直在这方面工作太久了。希望有人对如何解决这个问题有一些了解。

1 个答案:

答案 0 :(得分:1)

我终于自己想出来了。

这里是如何调用当前脚本(突然停止工作):
在cPanel中,设置一个电子邮件过滤器以匹配主题。然后,使用以下语法将内容传递给脚本:
php -q -n /path/to/script.php

该脚本不包含
#!/usr/bin/php -q
作为第一行。

我怀疑发生了PHP升级,这使得该方法停止运行。

我将管道语法改为简单:
/path/to/script.php
然后我将脚本的第一行更改为:
#!/usr/bin/php -q

此更改后,与我的过滤条件匹配的电子邮件会因原始问题中所述的错误而退回。新错误为permission denied。我将PHP脚本的权限更改为755,一切都恢复正常!