为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
函数式编程 2021-10-22 10:41:17
我已经安装了 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.phpcatcher.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.phpphp /root/fw/catcher.phpphp7.3 /root/fw/catcher.php我觉得sendmail的权限有问题。
查看完整描述

2 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

错误“无法打开输入文件”表示由于某种原因无法读取文件。


请按照以下步骤检查:


将行尾转换为 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.php

php7.3 /root/fw/catcher.php

要从文件开头删除BOM,请尝试以下操作:


dos2unix catcher.php

尝试运行/root/fw/catcher.php,作为不使用 php 或 php7.3 可执行文件的 shell 脚本。从终端运行:


./root/fw/catcher.php


查看完整回答
反对 回复 2021-10-22
?
MM们

TA贡献1886条经验 获得超2个赞

您是否检查过 SELinux 是否已启用并强制执行?你可以用getenforce命令看到这一点。

如果返回Enforcing,您可以通过几种方式解决此问题。您可以使用 禁用 SELinux 强制setenforce Permissive,或创建允许 Apache 运行 sendmail 的策略。

要创建这样的策略,最简单的方法是使用该audit2allow工具,它是policycoreutils-python- 如果audit2allow不可用,请安装该工具。然后,检查/var/log/audit.log是否有关于sendmail 无法运行的错误。这些错误行可以通过管道传输到audit2allow创建一个可以使用semodule -i <module.pp>.


查看完整回答
反对 回复 2021-10-22
  • 2 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信