网站地图    收藏   

主页 > php专栏 > php应用 >

php中socket实现GET与POST异步提交数据 - php高级应用

来源:自学PHP网    时间:2014-11-27 22:16 作者: 阅读:

[导读] 在使用php socket时我们需要先开启socket扩展了,我们可以使用phpinfo();查看是否开启了socket扩展,否则在php ini中开启了,如果没有开启我们可以参考下面方法来设置 windows 系统中socket扩展wind...

php中socket实现GET与POST异步提交数据

在使用php socket时我们需要先开启socket扩展了,我们可以使用phpinfo();查看是否开启了socket扩展,否则在php.ini中开启了,如果没有开启我们可以参考下面方法来设置.

windows 系统中socket扩展

windows 下可以直接修改php.ini 文件 去掉extension=php_sockets.dll 前面的分号重启就OK了

在linux下给PHP安装socket扩展,代码如下:

  1. #cd /home/php5.2.1/ext/sockets 
  2. #/server/php/bin/phpize  
  3. #./configure --prefix=/usr/local/php/lib --with-php-config=/server/php/bin/php-config --enable-sockets 
  4. #make 
  5. #make install 
  6. 再修改/usr/local/php/etc/php.ini文件 
  7. #extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/" (php5.4版本以上不用加扩展路径) 
  8. extension=sockets.so 

重启apache,好了都好了下面就开始吧,代码如下:

  1. //POST提交 
  2. function socketPost($url,$data){ 
  3. $postStr = ''
  4. $postLen = ''
  5. $out = ''
  6. //解析域 
  7. $urlInfo = parse_url($url); 
  8. $host = $urlInfo['host']; 
  9. if(!isset($urlInfo['query'])) $urlInfo['query'] =''
  10. $path = $urlInfo['path'].'?'.$urlInfo['query']; 
  11. //组织数据 
  12. foreach($data as $key=>$value){ 
  13. $postStr .=$key.'='.rawurlencode($value).'&';#这里需要对post的值进行编码,否则会出现中断 
  14. $postStr = trim($postStr,"&"); 
  15.  
  16. $postLen = strlen($postStr); 
  17. $fp = fsockopen($host, 80, $errno$errstr, 3); 
  18. if ($fp) { 
  19.     
  20. $out .="POST ".$path." HTTP/1.0\r\n"
  21. $out .="Host: ".$host."\r\n"
  22. $out .= "Content-type: application/x-www-form-urlencoded\r\n"
  23. $out .= "Content-Length: ".$postLen."\r\n";   #这里最好加上Connection: close 
  24. $out .= "\r\n"
  25. $out .= $postStr
  26. fwrite($fp$out); 
  27. fclose($fp); 

使用方法,代码如下:

  1. socketPost("提交的地址",array("username"=>"这里是post的username","password"=>321312312)); 
  2. function socketGet($url){ 
  3. $urlInfo = parse_url($url); 
  4. $host = $urlInfo['host']; 
  5. if(!isset($urlInfo['query'])) $urlInfo['query'] =''
  6. $path = $urlInfo['path'].'?'.$urlInfo['query']; 
  7. $fp = fsockopen($host, 80, $errno$errstr, 3); 
  8. if ($fp) { 
  9. //调用模块进行抓取信息 
  10. $out = "GET {$path} / HTTP/1.1\r\n"
  11. $out .= "Host: {$host}\r\n"
  12. $out .= "Connection: Close\r\n\r\n"
  13. fwrite($fp$out); 
  14. fclose($fp); 

使用方法:socketGet("url");工作需要封装好方法方便同事调用.

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论