PHP网络编程
任何一个网站的url地址其实都是一该网页文件的路径,所以我们可以用打开文件的方式来打开网页的文件。
之后我们可以将其内容写入我们自己的文件中。以此方法我们可以将多个网站中我们感兴趣的内容搜索并保存到我们自己的文档中。
比如可以实行以下方法:
$url_list = file("http://www.baidu.com/");$demo_web = fopen("demo_web.php",'a');foreach($url_list as $one_list){ fwrite($demo_web,$one_list);}fclose($url_list);
(2)PHP对URL的解析:
URL的基本组成成分:协议名(scheme)、主机名(host)、端口号(port)、文件路径(path)、查询参数(query)
php可以使用parse_url()函数来解析url,将需要解析的url作为参数传给这个函数,这个函数会将url变成数组。
该数组中各个键值名和所对应的意思就是我上面列的“基本成分”。
如:$demo = parse_url("http://www.example.com/index.php");
$demo['host']就是“www.example.com” $demo['path']就是index.php
(3)PHPsocket编程:
socket运行的基本机制:
在服务器和客户端上各建一个socket就可以进行通信了。
服务器端:服务器先初始化socket,之后绑定端口,再对端口进行监听,最后调用accept先将服务器端的socket阻塞住,等待客户端的socket连接。
客户端:先初始化一个socket,之后连接到阻塞中服务器端socket,如果连接成功,则客户端与服务器的连接就建立了。
客户端发送数据请求,服务器端接收并处理请求,然后把回应数据发送到客户端,客户端读取数据,最后关闭连接,这样一次交互就结束了。
而在php中如果要打开一个socket,需要使用到fsockopen()函数。
fsockopen()函数的参数依次为:URL、端口号、一个存放错误编号的变量、一个存放错误信息字符串的变量、超时等待时间。(只有第一个参数为必须的)。
这个fsockopen()函数和fopen()函数类似,得到的都是一个文件指针,所以也可以使用fwrite()等操作文件的函数
在使用fsockopen()建立了连接后,则使用fwrite()函数向服务器写入一些数据,如:
$fp = fsockopen("www.example.com",80,$errno,$errstr,30);if(!$fp){ echo "连接失败";}else{ $send = "HEAD /HTTP/1.1\r\n"; $send .= "HOST: www.example.com\r\n"; $send .= "CONNECTION: Close\r\n\r\n"; fwrite($fp,$send); $data = fgets($fp,128); //检索HTTP头的128个字符串 fclose($fp); //关闭socket //用explode函数将$data从空格处打散为两个字符串,再由list函数将前一个字符串赋值给$response变量,将后面的字符串赋值给$code字符串。 list($response,$code)= explode(' ',$data);}
关于上面的代码:
1、写入$fp的$send字符串实际上是利用“一系列HTTP协议头来启动通信过程”,如“HEAD/HTTP/1.1\r\n”其中的HEAD就是请求类型,当然也可以用GET或POST来请求,而后面的\r\n只是为了满足格式而已。(同理下面增加进$send的两个字符串也都是HTTP协议头)
2、通过fwrite发送HTTP报头后,该$fp会返回自己的HTTP报头,通过fgets()函数读取其中的128个字符串,并赋值给$data,这个$data中的空格后面的字符串被赋给了$code。
而这个$code就是HTTP状态码,只有当这个状态码为200时,表示该URL为可用的,任何其他数值的状态码都表示存在问题。
(4)使用cURL:
cURL的作用是“模拟浏览器请求”,我们可以用cURL细化我们的http请求功能,而不仅仅是人工浏览一个页面。
php可以通过shell_exec()及其他函数来调用cURL,甚至还有一套cURL类库:libcurl,操作步骤如下:
1、以要访问的URL作为参数,调用curl_init()来开始一个cURL事务
$cur = curl_init('www.example.com');
该函数会返回该cURL事务的指针,我们接下来就是操作这个事务的指针。
2、接下来我们要多次调用curl_setopt()函数来设置该事务的选项(可设置的选项太多,在这不一一列举了),语法如下:
curl_setopt($curl,"可设置的选项",value);
3、设置完所有选项后,使用curl_exec()函数来执行该事务,将返回的数据赋给一个变量:
$result = curl_exec($curl);
4、最后,关闭该链接:
curl_close($curl);
下面列举几个常用的设置选项:
1、告诉cURL,如果发生错误,直接停止运行:
curl_setopt($curl,CURLOPT_FAILONERROR,1);
2、设置超时时间:
curl_setopt($curl,CURLOAPT_TIMEOUT,5);
3、设置cURL使用POST方法提交数据:
curl_setopt($curl,CURLOAPT_POST,1);
4、设置POST提交的数据:
curl_setopt($curl,CURLOAPT_POSTFIELDS,'name=小明&age=12');
(Tip:cURL工具还能够传送、接收cookie,处理文件上传,通过SSL连接工作,处理FTP文件)