- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想做的是运行一个简单的 PHP 脚本来检查游戏服务器是否在线并从中获取一些信息。我在带有 WAMP 服务器的本地机器上运行完全相同的脚本,我只是取消注释 php_openssl.dll 和 php_sockets.dll 并且 - 瞧 - 它按预期工作。
但是接下来是我们的生产环境!我通常使用 Debian,但我们的主机决定在我们的专用服务器上安装 CentOS,因为 NIC 在 Debian 中出现故障,从那以后就一直很麻烦。
我克服了一些问题,但仍面临这个问题:如何修复 PHP 套接字?我读到我需要 php-common,所以我安装了它:
# yum install php-common
然后我检查了 phpinfo()
,我得到了这个
'./configure' '--with-openssl' '--enable-sockets' ...
因此,如果您问我,这看起来不错,openssl 和套接字都已安装并且应该可以正常工作,但事实并非如此。我在 Stack Overflow 上找到了这个脚本:
<?php
//just in case
if (!extension_loaded('sockets')) {
die('The sockets extension is not loaded.');
}
echo '<p><strong>Establishing connection...</strong></p>';
$socket = socket_create(AF_INET,SOCK_STREAM,0);
if (!socket_connect($socket, "stackoverflow.com", 80))
{
die('Socket error : '.socket_strerror(socket_last_error()));
}
echo '<p><strong>Connection successful!</strong></p>';
$request = join("\n",array(
"GET / HTTP/1.1",
"Connection: close",
"Host: stackoverflow.com",
"User-Agent: Mozilla/5.0 (Windows NT 6.1)",
"Accept: text/html,*/*;q=0.8",
""));
socket_write($socket,$request,strlen($request));
$response = socket_read($socket,2048);
echo "<p><strong>This is the received data : </strong></p>";
echo '<pre>'.htmlentities($response).'</pre>';
socket_close($socket);
这个输出完全让我吃惊:
Establishing connection...
Connection successful!
This is the received data :
HTTP/1.0 408 Request Time-out
Cache-Control: no-cache
Connection: close
Content-Type: text/html
<html><body><h1>408 Request Time-out</h1>
Your browser didn't send a complete request in time.
</body></html>
但是,我的脚本仍然无法运行? :(我已经禁用了 iptables
# service iptables stop
只是为了确定这不是防火墙问题。当我打开页面而不是游戏服务器名称时,会发生以下情况:
Warning: socket_connect(): unable to connect [13]: Permission denied in /var/www/test.php on line 9 <<<
这是我正在使用的代码,它是 xPaw 的开源代码,所以我不相信它:
<?php
function queryserver( $IP, $Port = 25565, $Timeout = 2 )
{
$Socket = Socket_Create( AF_INET, SOCK_STREAM, SOL_TCP );
Socket_Set_Option( $Socket, SOL_SOCKET, SO_SNDTIMEO, array( 'sec' => (int)$Timeout, 'usec' => 0 ) );
Socket_Set_Option( $Socket, SOL_SOCKET, SO_RCVTIMEO, array( 'sec' => (int)$Timeout, 'usec' => 0 ) );
if( $Socket === FALSE || Socket_Connect( $Socket, $IP, (int)$Port ) === FALSE )
{
return FALSE;
}
Socket_Send( $Socket, "\xFE\x01", 2, 0 );
$Len = @Socket_Recv( $Socket, $Data, 256, 0 );
Socket_Close( $Socket );
if( $Len < 4 || $Data[ 0 ] !== "\xFF" )
{
return FALSE;
}
$Data = SubStr( $Data, 3 );
$Data = iconv( 'UTF-16BE', 'UTF-8', $Data );
if( $Data[ 1 ] === "\xA7" && $Data[ 2 ] === "\x31" )
{
$Data = Explode( "\x00", $Data );
return Array(
'HostName' => $Data[ 3 ],
'Players' => IntVal( $Data[ 4 ] ),
'MaxPlayers' => IntVal( $Data[ 5 ] ),
'Protocol' => IntVal( $Data[ 1 ] ),
'Version' => $Data[ 2 ]
);
}
$Data = Explode( "\xA7", $Data );
return Array(
'HostName' => SubStr( $Data[ 0 ], 0, -1 ),
'Players' => isset( $Data[ 1 ] ) ? IntVal( $Data[ 1 ] ) : 0,
'MaxPlayers' => isset( $Data[ 2 ] ) ? IntVal( $Data[ 2 ] ) : 0,
'Protocol' => 0,
'Version' => '1.3'
);
}
$test = queryserver('SERVERADDRESSHERE'); // (i tried multiple, which are all working @wamp)
$echo = $test['HostName'] . "<<< <br />";
echo $echo;
最佳答案
在你的 linuxbox 中尝试这个命令(作为 root)。
setsebool -P httpd_can_network_connect 1
关于Php 套接字、Apache 和 CentOS 6.3 给出权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14798907/
我正在使用 CentOS 6 机器。我尝试遵循以下指南: How to open port in centOS http://ask.xmodulo.com/open-port-firewall-ce
我正在为 CentOS 7 创建一个脚本,但我正在努力根据变量连接值,这与我工作的其他发行版不同。例如,在下面的代码中: DIR_BKP=/tmp/_bkp_local PATH_LOG=$DIR_B
我从以下位置下载了文件: https://github.com/christiangalsterer/httpbeat/releaseshttpbeat-4.0.0-x86_64.rpm 并尝试通过以
我想在我的 Centos 8 中使用命令 mkimage。 我尝试使用命令 dnf install uboot-tools 以 root 身份安装 uboot-tools 但这不可用。 谁能指导我如何
我有一个 Centos 服务器。 结果 $ cat /etc/centos-release CentOS Linux release 7.9.2009 (Core) 和 $ yum list i
我在CentOs7 上安装Gitlab 后遇到了麻烦。我第一次被重定向到管理员密码创建页面,在输入管理员用户密码后,服务器发送错误。 422 The change you requested was
因此,我正在尝试从我的一个运行 centos 的邮箱中发送电子邮件,并且我已经安装并打开了 sendmail,但是发送一封电子邮件实际上需要几分钟时间。电子邮件不是应该几乎是即时的吗? 这是我的/et
我正在尝试在虚拟 Centos 7 发行版上构建一些 C++ 库。由于我还没有发现这个操作系统看不到/usr/local/lib 或/usr/local/lib64 的原因,这些库安装在其他 linu
我正在尝试通过以下网址在我的服务器(centos 7.1 minimal)上安装 imagemagick: imagemagick installation steps 在第 1 步得到这个错误: L
当我尝试安装 rpmforge(我需要安装 phpmyadmin)时出现此错误,将不胜感激任何帮助! [root@plasticarmy ~]# yum http://pkgs.repoforge.o
我需要安装一个centos 5 repo 来在centos 7 机器上下载用于el5 的dhclient,以便在centos 5 机器上传输dhclient rpms。有可能的 ? 谢谢! 最佳答案
我正在开发一个可以在 CentOS 8 和 CentOS 7 系统上运行的程序。在其中,我使用 gethostbyname 将 DNS 名称解析为 IP 地址。 为了尝试使代码可移植,我正在使用以下命
我想在 CentOS7(或 CentOS6)上安装 cgal 模块。它需要 pgrouting 才能使用 PostGIS。 我一直用 CGAL Manual Installation 安装 cgal
我在 CentOS 平台上使用 R/RStudio。我需要查看二进制日志文件(/var/log/messages)是否包含有关图形设备绘图问题的更多信息,但我无法从 RStudio 中读取它。 我在社
我正在尝试在我的 CentOS 上本地安装 Kubernetes。我正在关注这个博客 http://containertutorials.com/get_started_kubernetes/inde
来自 http://kubernetes.io/docs/getting-started-guides/kubeadm/ CentOS Linux 版本 7.2.1511(核心) (1/4) 在主机上
使用tcpdump监控网络流量时,发现很多dns反向查询记录。 像这样: A_IP.55276 > DNS_IP.domain: 9247+ PTR?查询 IP.in-addr.arpa。 (45)
我正在尝试在 CentOS 6.7 和 ./configure --prefix=$HOME/local 上安装 mutt运行良好,但在 make install步骤,我在下面遇到了这个错误,我不知道
如何在 CENTOS 中删除所有以 *0x0.jpg 结尾的文件?我需要删除嵌套在文件夹和子文件夹中的多个文件 最佳答案 我假设你有一个外壳 - 试试 find /mydirectory -type
我需要检索安装在我的 Linux (Centos) 主机上的所有软件包的软件包版本。 rpm -qa 给了我所有已安装软件包的列表。 我知道 rpm -qi "package name"给了我包信息。
我是一名优秀的程序员,十分优秀!