PHP shell脚本出现问题:"无法打开输入文件"

Mik*_* L. 15 php bash shell

好的,我正在尝试创建一个使用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 */
?>
Run Code Online (Sandbox Code Playgroud)

真的很简单吧?从STDIN读取并写入文件......我认为出了问题,因某些原因无法读取STDIN.托管服务提供商允许它,allow_url_open和allow_url_include都打开.

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

所以我再次认为那是剧本告诉我的,那是从STDIN无法读取的

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

#!/usr/local/bin/php –q
<?php
echo 'Hello World';
?>
Run Code Online (Sandbox Code Playgroud)

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

所以看来PHP程序告诉我它无法打开脚本?该脚本位于$ HOME/mail/forward(CHMOD 755),脚本本身是CHMOD 755,文件mail.txt是CHMOD 755我真的很难过.

Jus*_*inP 12

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


小智 8

在搜索 \xe2\x80\x9c 的解决方案时,我登陆此页面无法打开输入文件\xe2\x80\x9d。这是我对这个错误的 2 美分。

\n\n

我遇到了同样的错误,因为我在 php 文件路径中使用参数,如下所示:

\n\n
/usr/bin/php -q /home/**/public_html/cron/job.php?id=1234\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我发现这不是正确的方法。正确的发送参数的方式是这样的:

\n\n
/usr/bin/php -q /home/**/public_html/cron/job.php id=1234\n
Run Code Online (Sandbox Code Playgroud)\n\n

只需将其替换"?"为空格即可" "即可。

\n


Dan*_*ien 6

你有没有尝试过:

#!/usr/local/bin/php
Run Code Online (Sandbox Code Playgroud)

即没有-q部分?这就是错误消息"无法打开输入文件:-q"的意思.php如果它看起来不像一个选项的第一个参数是要执行的PHP文件的名称,并且-q只是CGI.

编辑:一些(非相关)提示:

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