基于PHP Socket配置以及实例的详细介绍
本文文章是对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
CentOS 配置PHP支持socket扩展
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
Linux配置防火墙 开启80端口、3306端口的方法
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
#最后重启防火墙使配置生效