qh663
版主
  
中级会员
UID 30020
精华
0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13 来自 河源
状态 离线
|
非常实用的socket套接字编程
<?php /** * 功能: 套接字 * 作者: qh663 * 参数: string $url 网址,如:[url]http://qh8.net/php/index.php?abc=123[/url] * 参数: bool $get_header 是否返回header标头 * 参数: bool $real_url 用于测试网址是否正确 * 返回: bool/string */ function socket($url, $get_header = false,$real_url = false){ $arr = explode('/',$url); $host = $arr[2]; unset($arr[0], $arr[1], $arr[2]); $path = '/'.implode('/', $arr); unset($arr); $service_port = getservbyname('www', 'tcp'); $address = gethostbyname($host); $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket >= 0) { $result = socket_connect($socket, $address, $service_port); if ($result >= 0) { $in = "HEAD $path HTTP/1.1rn"; $in .= "Host: $hostrn"; $in .= "Connection: Closernrn"; socket_write($socket, $in, strlen($in)); if($real_url){ if(socket_read($socket, 15) == 'HTTP/1.1 200 OK') return true; }elseif($get_header){ while ( $out = socket_read($socket, 512)){ $re .= $out; } return $re; } socket_close($socket); } } return false; } ?> //test1 发送一个socket,多线程
//(此例在当前目录新建5个文件 1_tmp.txt、2_tmp.txt、3_tmp.txt、4_tmp.txt、5_tmp.txt)
if(empty($_GET['str'])){
$url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'];
while ($a++ < 5){
socket("$url?str={$a}_tmp.txt");
}
} else {
fopen($_GET['str'], "w");;
die();
}
$u = 'http://down1.sz1001.net/up/小型软件2_0810/TomatoGhostXP.rar';
echo "<pre>";
//test2 返回一个地址的header,实验证明运行速度比get_headers更快
echo socket($u,true);
//test3 测试页面是否存在,实验证明运行速度比get_headers更快
echo socket($u,true,true) ? "\n网址正确": "\n网址错误";
|  五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844 |
|