不允许使用fwrite(),但phpinfo()表示它应该是

时间:2012-08-28 04:15:55

标签: php fwrite phpinfo

我从我试图运行的脚本中获取以下内容:

Notice: fwrite() [function.fwrite]: send of 7 bytes failed with errno=1 Operation not permitted in /home/thrawn/public_html/sorcero.us/MinecraftQuery.class.php on line 165

但是,当我检查phpinfo()时,allow_url_fopen已打开且套接字支持已启用。我一直无法找到任何可能导致这种情况的原因。

为了澄清,我没有写这个脚本。我对PHP的了解大部分只是基础知识,但我知道足以说明这应该有效,因为phpinfo()说正确的事情是允许的。有问题的脚本在这里:https://github.com/xPaw/PHP-Minecraft-Query/blob/master/MinecraftQuery.class.php

3 个答案:

答案 0 :(得分:4)

fwrite()写入$this->socket并在private function WriteData()public function Connect()中有一行

$this->Socket = @FSockOpen( 'udp://' . $Ip, (int)$Port, $ErrNo, $ErrStr, $Timeout );

这是此文件中唯一写入$this->socket的行。

此外,manpage for fsockopen()

中还有一条警告消息
  

UDP套接字有时似乎已打开而没有错误,   即使远程主机无法访问。错误只会变成   当您向套接字读取数据或从套接字写入数据时显而易见。原因   这是因为UDP是一种“无连接”协议,这意味着   操作系统不会尝试建立链接   套接字直到它实际需要发送或接收数据。

情况可能就是这样。尽管无法访问ip adddress或端口,但仍会创建套接字。这会在尝试写入数据时导致错误消息。

因此,为了解决这个问题,您至少需要做以下事情:

  • 确保IP地址和端口正确无误。
  • 验证服务器是否已启动并正在运行。
  • 确保IP地址和端口可以访问(未在任何防火墙中阻止)

我不知道正确的设置应该是什么。如果您已在外部服务器上安装该软件,请尝试使用本地计算机,以便验证IP地址和端口设置。

答案 1 :(得分:2)

如果您检查了PHP配置并且问题仍然存在,请检查防火墙日志。

正如Ignacio Vazquez-Abrams所说:这是一个操作系统错误。

就我而言,CSF阻止了传出连接。

答案 2 :(得分:-3)

似乎是权限错误,

尝试,

 chmod -R folder_to_be_file_written

然后执行php脚本