3

我从我试图运行的脚本中得到以下信息:

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 已打开并且 Sockets Support 已启用。我一直无法找到任何指向我可能导致这种情况的东西。

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

4

3 回答 3

4

fwrite()写入$this->socket并在private function WriteData(). 在public function Connect()是一条线

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

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

此外,手册页中有一条警告消息fsockopen()

即使远程主机无法访问,UDP 套接字有时也似乎已打开且没有错误。只有当您从套接字读取或写入数据时,该错误才会变得明显。这样做的原因是因为 UDP 是一个“无连接”协议,这意味着操作系统不会尝试为套接字建立链接,直到它真正需要发送或接收数据。

大概就是这样。尽管无法访问 ip 地址或端口,但仍会创建套接字。这会导致在尝试写入数据时出现错误消息。

所以为了解决这个问题,你至少需要做这些事情:

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

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

于 2012-08-28T05:38:10.140 回答
2

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

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

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

于 2013-02-01T21:47:56.247 回答
-3

好像是权限错误,

尝试,

 chmod -R folder_to_be_file_written

然后执行php脚本

于 2012-08-28T06:53:51.493 回答