首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Php不能正常工作(CentOS 7)

Php不能正常工作(CentOS 7)
EN

Stack Overflow用户
提问于 2018-02-05 09:16:32
回答 1查看 328关注 0票数 1
代码语言:javascript
复制
<?php
function go(){
    $starttime = round(microtime(true),2);
    echo "GO() ... <br />\r\n";

    echo "socket_create ...";
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

    if($socket < 0){
        echo "Error: ".socket_strerror(socket_last_error())."<br />\r\n";
        exit();
    } else {
        echo "OK <br />\r\n";
    }


    echo "socket_bind ...";
    $bind = socket_bind($socket, '127.0.0.1', 889);//привязываем его к указанным ip и порту
    if($bind < 0){
        echo "Error: ".socket_strerror(socket_last_error())."<br />\r\n";
        exit();
    }else{
        echo "OK <br />\r\n";
    }

    socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);//разрешаем использовать один порт для нескольких соединений

    echo "Listening socket... ";
    $listen = socket_listen($socket, 5);//слушаем сокет

    if($listen < 0){
        echo "Error: ".socket_strerror(socket_last_error())."<br />\r\n";
        exit();
    }else{
        echo "OK <br />\r\n";
    }

    while(true){ //Бесконечный цикл ожидания подключений
        echo "Waiting... ";
        $accept = @socket_accept($socket); //Зависаем пока не получим ответа
        if($accept === false){
            echo "Error: ".socket_strerror(socket_last_error())."<br />\r\n";
            usleep(100);
        } else {
            echo "OK <br />\r\n";
            echo "Client \"".$accept."\" has connected<br />\r\n";
            file_put_contents("res.txt", "OK ");
        }

        $msg = "Hello, Client!";
        echo "Send to client \"".$msg."\"... ";
        socket_write($accept, $msg);
        echo "OK <br />\r\n";

        if( ( round(microtime(true),2) - $starttime) > 100) {
            echo "time = ".(round(microtime(true),2) - $starttime);
            echo "return <br />\r\n";
            return $socket;
        }


    }


}

error_reporting(E_ALL); //Выводим все ошибки и предупреждения
set_time_limit(0);      //Время выполнения скрипта не ограничено
ob_implicit_flush();    //Включаем вывод без буферизации

$socket = go();         //Функция с бесконечным циклом, возвращает $socket по запросу выполненному по прошествии 100 секнуд.

echo "go() ended<br />\r\n";

if (isset($socket)){
    echo "Closing connection... ";
    @socket_shutdown($socket);
    socket_close($socket);
    echo "OK <br />\r\n";
}
?>

当打开带有此代码的页面时,它将开始无限加载。

端口889/tcp打开

机器拥有来自remi存储库的php 7.2,这些插件包括: php-mysql php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl-devel php-mcrypt php -pear。

出现这种问题的原因是什么?连接的时候什么都不会发生。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-06 03:35:55

问题是浏览器不能运行套接字(实际上可以这样做,但看不到程序返回的内容),所以必须通过控制台(例如: php filename.php)运行php套接字。在socket_bind功能中应使用全局ip(Global )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48619137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档