php - Sendmail Pipe to PHP:无法打开输入文件
问题描述
我已经安装了 sendmail 并希望将传入的电子邮件通过管道传输到 php。
每次我向服务器发送电子邮件时,我都会收到一封带有错误消息的电子邮件:
无法打开输入文件:/root/fw/catcher.php 554 5.3.0 unknown mailer error 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的权限有问题。
解决方案
错误“无法打开输入文件”表示由于某种原因无法读取该文件。
请按照以下步骤进行检查:
将行尾转换为 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
尝试在不使用 php 或 php7.3 可执行文件的情况下将/root/fw/catcher.php作为 shell 脚本运行。从终端运行:
./root/fw/catcher.php
推荐阅读
- jquery - 如何使用ajax在laravel的同一页面中提交两个表单
- excel - Excel 应用程序不关闭逻辑错误
- sql - 在数学方程式中为创建的列使用别名 - SQL
- jmeter - Jmeter InfluxDBBackendListenerClient 发送的最大值看起来不一致
- python - 变压器模型(仅限编码器)不会学习
- python - QGraphcisView.fitInView 缩小场景
- python - ImportError:没有名为 twitter 的模块
- node.js - Mongo DB mongoose schema.Save 函数正在从数据库中删除字段
- javascript - 我无法存储中间数组
- linux - 连接 Postgres Db 时出错:服务器证书与主机名不匹配