PHP shell 脚本的问题:“无法打开输入文件”

2022-08-30 21:43:29

好的,我正在尝试创建一个使用PHP shell脚本的电子邮件记录器。我已经设置了CPanel来管道电子邮件到我的脚本。我相信这一切都配置正确。但是,我在脚本方面遇到了问题,从shell运行它时,任何脚本都与此有关。

这是一个例子。

#!/usr/local/bin/php –q
<?php

/* Read the message from STDIN */
$fd = fopen("php://stdin", "r");
$email = ""; // This will be the variable holding the data.
while (!feof($fd)) {
$email .= fread($fd, 1024);
}
fclose($fd);
/* Saves the data into a file */
$fdw = fopen("mail.txt", "w+");
fwrite($fdw, $email);
fclose($fdw);
/* Script End */
?>

真的很简单,对吧?从 STDIN 读取并写入文件...我认为有些地方不对劲,由于某种原因无法阅读STDIN。托管服务提供商允许它,allow_url_open和allow_url_include都处于打开状态。

通过SSH执行脚本时,我收到以下错误:无法打开输入文件:âq

所以我再一次以为这是剧本告诉我的,那就是无法从STDIN中读出。

所以我只尝试了一个简单的脚本。

#!/usr/local/bin/php –q
<?php
echo 'Hello World';
?>

同样: 无法打开输入文件: âq

所以看起来PHP程序告诉我它无法打开脚本?该脚本位于$HOME/mail/forward(CHMOD 755)中,脚本本身是CHMOD 755,以及文件mail.txt是CHMOD 755,我对此感到非常困惑。


答案 1

我刚刚遇到这个问题,这是因为我试图从错误的目录运行脚本。哎呀!它发生在我们最好的人身上。


答案 2

您是否尝试过:

#!/usr/local/bin/php

即没有零件?这就是错误消息“无法打开输入文件:-q”的含义。如果它看起来不像一个选项,则第一个参数是要执行的PHP文件的名称,并且仅是CGI。-qphp-q

编辑:几个(不相关的)提示:

  1. 您不需要使用 终止 PHP 的最后一个块。事实上,通常最好不要这样做。?>
  2. 在命令行上执行时,PHP 将全局常量定义为 。您可以使用它而不是再次打开:STDINfopen("php://stdin", "r")"php://stdin"$fd = STDIN;

推荐