基于PHP Socket配置以及实例的详细介绍

2017-4-8 admin CentOS

本文文章是对PHP中Socket的配置以及实例进行了详细的分析介绍,需要的朋友参考下

2个php测试文件
server.php

<?php
     //phpinfo();
//确保在连接客户端时不会超时
set_time_limit(0);
$ip = '127.0.0.1';
$port = 1935;
/*
 +-------------------------------
 *    @socket通信整个过程
 +-------------------------------
 *    @socket_create
 *    @socket_bind
 *    @socket_listen
 *    @socket_accept
 *    @socket_read
 *    @socket_write
 *    @socket_close
 +--------------------------------
 */
/*----------------    以下操作都是手册上的    -------------------*/
if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) {
    echo "socket_create() 失败的原因是:".socket_strerror($sock)."\n";
}
if(($ret = socket_bind($sock,$ip,$port)) < 0) {
    echo "socket_bind() 失败的原因是:".socket_strerror($ret)."\n";
}
if(($ret = socket_listen($sock,4)) < 0) {
    echo "socket_listen() 失败的原因是:".socket_strerror($ret)."\n";
}
$count = 0;
do {
    if (($msgsock = socket_accept($sock)) < 0) {
        echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
        break;
    } else {

        //发到客户端
        $msg ="测试成功!\n";
        socket_write($msgsock, $msg, strlen($msg));

        echo "测试成功了啊\n";
        $buf = socket_read($msgsock,8192);

        
        $talkback = "收到的信息:$buf\n";
        echo $talkback;

        if(++$count >= 5){
            break;
        };

    
    }
    //echo $buf;
    socket_close($msgsock);
} while (true);
socket_close($sock);
?>



client.php



<?php
     //phpinfo();
//确保在连接客户端时不会超时
set_time_limit(0);
$ip = '127.0.0.1';
$port = 1935;
/*
 +-------------------------------
 *    @socket通信整个过程
 +-------------------------------
 *    @socket_create
 *    @socket_bind
 *    @socket_listen
 *    @socket_accept
 *    @socket_read
 *    @socket_write
 *    @socket_close
 +--------------------------------
 */
/*----------------    以下操作都是手册上的    -------------------*/
if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) {
    echo "socket_create() 失败的原因是:".socket_strerror($sock)."\n";
}
if(($ret = socket_bind($sock,$ip,$port)) < 0) {
    echo "socket_bind() 失败的原因是:".socket_strerror($ret)."\n";
}
if(($ret = socket_listen($sock,4)) < 0) {
    echo "socket_listen() 失败的原因是:".socket_strerror($ret)."\n";
}
$count = 0;
do {
    if (($msgsock = socket_accept($sock)) < 0) {
        echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
        break;
    } else {

        //发到客户端
        $msg ="测试成功!\n";
        socket_write($msgsock, $msg, strlen($msg));

        echo "测试成功了啊\n";
        $buf = socket_read($msgsock,8192);

        
        $talkback = "收到的信息:$buf\n";
        echo $talkback;

        if(++$count >= 5){
            break;
        };

    
    }
    //echo $buf;
    socket_close($msgsock);
} while (true);
socket_close($sock);
?>





侦听
#/ usr / local / php / bin / php /usr/local/apache2/htdocs/server.php

请求
#/ usr / local / php / bin / php /usr/local/apache2/htdocs/client.php

默认PHP是没有开启Socket的
 

#cd ./ext/sockets/

#/ usr / local / php / bin / phpize

#./configure --enable-sockets --with-php-config = / usr / local / php / bin / php-config

#make

#make install

php.ini修改配置

增加

extension = sockets.so
 

重启apache
#/ usr / local / apache2 / bin / apachectl restart

===================


Windows下的配置
修改php.ini

extension = php_sockets.dll

重启apache

cmd下起2个

php的安装目录

C:/php/php.exe F:web / server.php

C:/php/php.exe F:web / client.php

浏览(1660)

CentOS 配置PHP支持socket扩展

2017-4-8 admin CentOS



php有很多扩展功能,我们在初次安装的时候并没有安装某些扩展,可能在使用的过程中,又需要用到这些扩展。php提供了一个phpize工具供我们安装需要的扩展。

下面以安装socket扩展来介绍phpize的使用

1.找到自己的php安装目录,例如我的目录是/usr/local/php,在该目录下,找到bin/phpize。如果没有这个工具,则说明没有安装该工具,那么需要安装php.dev,一般都会有这个工具。


2.要安装socket扩展的话,就需要有一个和当前已安装的php的版本一样的php的源包,当前php版本可以用过phpinfo()查看。就是初次安装后查看安装是否成功的那个phpinfo.php。如果没有,就去这里下载相对应的的源代码包:http://www.php.net/releases/

我的下载方式:
wget http://cn2.php.net/distributions/php-5.4.43.tar.gz 

3.解压开打开源包目录,进入到ext目录,例如我就进入到:/root/php-5.4.43/ext下,ext下有各个php带有的扩展模块,进入到ext/sockets中。

解压缩命令:

tar -xzvf  php-5.4.43.tar.gz 

进入到ext/sockets中。

cd /root/php-5.4.43/ext/sockets

 

4.执行phpize工具,执行后,可以看到目录下生成了对应的configure文件

 /usr/local/php/bin/phpize

5.现在就可以通过configure来配置,执行下面的命令:

./configure --prefix=/usr/local/php --with-php-config=/usr/local/php/bin/php-config --enable-sockets

make && make install

执行之后,可以看到下面的输出:

Installing shared extensions:      /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/


Installing header files:          /usr/local/php/include/php/

第一个就是扩展模块的生成目录,可以在该目录下看到对应的sockets.so文件

6.更改php.ini,增加下面的语句:


extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/sockets.so"
5.4以上这样修改
extension=sockets.so 

7.重启Apache,查看phpinfo.php页面是否正常加载sockets扩展

service httpd restart




浏览(465)

Linux配置防火墙 开启80端口、3306端口的方法

2017-4-7 admin CentOS

vi /etc/sysconfig/iptables 

-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT(允许80端口通过防火墙) 

-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT(允许3306端口通过防火墙) 

特别提示:很多网友把这两条规则添加到防火墙配置的最后一行,导致防火墙启动失败,正确的应该是添加到默认的22端口这条规则的下面 


# Firewall configuration written by system-config-firewall 
# Manual customization of this file is not recommended. 
*filter 
:INPUT ACCEPT [0:0] 
:FORWARD ACCEPT [0:0] 
:OUTPUT ACCEPT [0:0] 
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT 
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT 
-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT 
-A INPUT -j REJECT –reject-with icmp-host-prohibited 
-A FORWARD -j REJECT –reject-with icmp-host-prohibited 
COMMIT  


/etc/init.d/iptables restart 

#最后重启防火墙使配置生效

浏览(444)


Powered by emlog 豫ICP备17010739号