Sendmail 管道到 PHP:无法打开输入文件

我已经安装了 sendmail 并希望将传入的电子邮件通过管道发送到 php。


每次我向服务器发送电子邮件时,都会收到一封带有错误消息的电子邮件:


无法打开输入文件:/root/fw/catcher.php 554 5.3.0 未知邮件错误 1


我认为具有 权限的东西catcher.php是错误的,但我自己无法弄清楚。


Sendmail 已安装,我添加了一个别名:


root: "|/usr/bin/php /root/fw/catcher.php"

权限(之后chmod 777;我试过了chmod 777,chmod 755但都不起作用):


drwxrwxrwx 2 root root 4096 Jul 20 14:27 fw

-rwxrwxrwx 1 root root   45 Jul 20 14:27 catcher.php

catcher.php(将行尾转换为 Unix 风格):


#!/usr/bin/php

<?php echo 'Test'; exit(0); ?>

通过 cli 执行我的 php 文件工作正常。所有这些命令都有效:


/usr/bin/php /root/fw/catcher.php

/usr/bin/php7.3 /root/fw/catcher.php

php /root/fw/catcher.php

php7.3 /root/fw/catcher.php

我觉得sendmail的权限有问题。


函数式编程
浏览 121回答 2
2回答

忽然笑

错误“无法打开输入文件”表示由于某种原因无法读取文件。请按照以下步骤检查:将行尾转换为 Unix 样式我不知道你如何检查这个,但你可以尝试使用dos2unix重做这个,如这个链接中所述dos2unix catcher.php > newcatcher.php然后比较文件大小。这可能是因为BOM打破了脚本,描述在这里,shebang行“#!的/ usr / bin中/ PHP的”告诉其中调用此类脚本时运行需要翻译系统。如果脚本以 UTF-8 编码,人们可能会想在开头包含一个 BOM。但实际上是“#!” 字符不仅仅是字符。它们实际上是一个神奇的数字,恰好由两个 ASCII 字符组成。如果你在这些字符之前放一些东西(比如 BOM),那么文件看起来就像有一个不同的幻数,这可能会导致问题。该脚本将在 cli 上运行,因为您明确告诉它使用哪个解释器:php或php7.3:php /root/fw/catcher.phpphp7.3 /root/fw/catcher.php要从文件开头删除BOM,请尝试以下操作:dos2unix catcher.php尝试运行/root/fw/catcher.php,作为不使用 php 或 php7.3 可执行文件的 shell 脚本。从终端运行:./root/fw/catcher.php

MM们

您是否检查过 SELinux 是否已启用并强制执行?你可以用getenforce命令看到这一点。如果返回Enforcing,您可以通过几种方式解决此问题。您可以使用 禁用 SELinux 强制setenforce Permissive,或创建允许 Apache 运行 sendmail 的策略。要创建这样的策略,最简单的方法是使用该audit2allow工具,它是policycoreutils-python- 如果audit2allow不可用,请安装该工具。然后,检查/var/log/audit.log是否有关于sendmail 无法运行的错误。这些错误行可以通过管道传输到audit2allow创建一个可以使用semodule -i <module.pp>.
打开App,查看更多内容
随时随地看视频慕课网APP