PHP套接字错误Linux上的权限被拒绝

Hka*_*hia 3 php sockets linux

我在Linux 2.6.34上安装了php 5.4.13.

我使用套接字创建简单的客户端/服务器页面,但它不起作用.

它给予权限拒绝错误

下面是我的PHP代码

if (false == ($socket = socket_create(AF_INET, SOCK_STREAM, 0)))  // create socket 
{
   $stringData= date("D M d, Y g:i A"). " socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "<br>";
   echo $stringData;
}
else
{
    $timeout = array('sec'=>5,'usec'=>500000);
    socket_set_option($socket,SOL_SOCKET,SO_RCVTIMEO,$timeout);

    if(false==($result = socket_connect($socket, $host, $port)))
    {
        $stringData= date("D M d, Y g:i A"). " socket_connect() failed: reason: " . socket_strerror(socket_last_error()) . "<br>";
        echo $stringData;
        socket_close($socket);
    }
    else
    {
        $stringData= date("D M d, Y g:i A"). " Socket connected succefully <br>";
        echo $stringData;

        if(false==(socket_write($socket, $command, strlen($command))))
        {
            $stringData= date("D M d, Y g:i A"). " socket_write() failed: reason: " . socket_strerror(socket_last_error()) . "<br>";
            echo $stringData;
            socket_close($socket);
        }
        else
        {
            if(false===($cmd = socket_read ($socket, 65536)))
            {
                //10060 for windows and 11 for linux

              if(10060!=socket_last_error() && 11!=socket_last_error())
              {
                $stringData= date("D M d, Y g:i A"). " socket_read() failed: reason: " . socket_strerror(socket_last_error()) . "<br>";
                echo $stringData;
                socket_close($socket);

              }
              switch(socket_select($r = array($socket), $w = array($socket), $f = array($socket), 5))
              {
                       case 2:
                               $refused=1;  
                               break;
              }
              if($refused==1)
              {
                $stringData= date("D M d, Y g:i A"). " socket_read() failed: reason: Connection Refused <br>";
                $ourFileHandle = fopen(SOCKET_LOG, 'a');
                echo $stringData;
                socket_close($socket);

              }
            }
            else
            {
                echo "<pre>".html_entity_decode(print_r($cmd,true))."</pre>";
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在命令提示符下正常工作,但是当从任何浏览器打开页面时,它会给出错误Permission denied.

从终端运行php的命令: /usr/local/rootfs/php5/bin/php /www/socket_client.php

dAm*_*m2K 12

检查php.ini设置中的参数" safe_mode ".它应该是" 关闭 ".

另一个问题可能是由于"selinux"阻止你的mod_php(apache进程)通过socket连接.在这种情况下:

# check if it's enabled:
/usr/sbin/sestatus -v
to add the connecting rule:
setsebool httpd_can_network_connect=1
Run Code Online (Sandbox Code Playgroud)

如果要完全禁用它:

setenforce 0
Run Code Online (Sandbox Code Playgroud)

此外,出于调试原因,请禁用apache/PHP上的任何安全模块.例如,如果它正在运行,请尝试禁用Suhosin.