php基本功练习题一(续)

Post by 水瓶座, 2010-6-13, Views:
原创文章如转载,请注明:转载自冠威博客 [ http://www.guanwei.org/ ]
本文链接地址:http://www.guanwei.org/post/PHPnotes/06/haogood_php_exercise.html

 

php基本功练习题一(续)

相关搜索: 练习题基本功php



php基本功练习题一,即给小洛的第一个练习题:
写一个检查、读取好东东大本营上标题或内容含有“给小络”或“小络”的帖子的php代码

第一步,用相关函数打开http://haogood.5d6d.com好东东大本营上最新帖子列表的页面

第二步,将列表网页的内容读入字符变量

第三步,用正则表达式进行模式匹配,找出符合搜索要求的帖子地址

最后返回一个查找结果的页面,
显示最新的标题或内容含有“小洛”的帖子标题,及链接。

出此题的用意有三处:

第一点是网页内容的读取,目前已有论坛上的朋友用到了一种使用PHP的cURL库功能的方法,
这种方法的好处是?大家可以对比一下不同的方法,再做结论。

第二个重点是模式匹配的应用,怎样找出“标题或内容含有“给小络”或“小络”的帖子”
并返回一个查找结果的页面,

三是学会处理有关php和apache扩展配置方法。

再就是根本就不去读取网页内容,通过简短的代码借用论坛原有功能实现,不过出这个题主要是为了学到更多的php功能,所以第一步一定要是读取网页的内容
这个练习题在php100网站上发出后,立刻得到了很多php爱好者的关注,其中szupidea是完成得最快最好的!
第一次他给出了用cUrl方式的参考程序,第二次他在一个程序中同时给出了3种不同的连接读取网页数据的方法,并用$_GET取得URL中传递的变量执行不同的 switch
分支



为了进一步完善已有的程序,和加入一些相关的练习,现继续提出新的练习要求:


一、请给这段程序加上一个方便一些的界面。
如:有网址输入、不同的连接,读取方式的选择、要检索的关键字输入,搜索按钮等基本元素。

二、返回结果要求:只显示标题或内容含有“你输入的要检索的关键字"的帖子列表,以及指向这个帖子的链接,点击就可直接打开相应
的论坛里帖子。

这个过程要完整的由程序自动完成。

三、加一个运行时间统计的代码,比较不同方式在速度上的差别。


四、隐藏程序中用GET方式传递的变量值
附szupidea的参考代码
  1. <?php
  2. $m = $_GET['m'];
  3. var_dump($m);
  4.  
  5. $url = 'http://haogood.5d6d.com/archiver/fid-18.html';
  6. $data = "";
  7.  
  8. switch($m)
  9. {
  10.     case 0:
  11.         // 初始化一个 cURL 对象
  12.         $curl = curl_init();
  13.  
  14.         // 设置你需要抓取的URL
  15.         curl_setopt($curl, CURLOPT_URL, $url);
  16.  
  17.         // 设置header
  18.         curl_setopt($curl, CURLOPT_HEADER, 1);
  19.  
  20.         // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
  21.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  22.  
  23.         // 运行cURL,请求网页
  24.         $data = curl_exec($curl);
  25.  
  26.         // 关闭URL请求
  27.         curl_close($curl);
  28.  
  29.         break;
  30.     case 1:
  31.         $data = file_get_contents($url);
  32.         break;
  33.     case 2:
  34.         $aurl = parse_url($url);
  35.  
  36.         /* Get the port for the WWW service. */
  37.         $service_port = getservbyname('www', 'tcp');
  38.  
  39.         /* Get the IP address for the target host. */
  40.         $address = gethostbyname($aurl['host']);
  41.  
  42.         /* Create a TCP/IP socket. */
  43.         $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  44.         if ($socket < 0) {
  45.             echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
  46.             break;
  47.         }
  48.  
  49.         // echo "Attempting to connect to '$address' on port '$service_port'...";
  50.         $result = socket_connect($socket, $address, $service_port);
  51.         if ($result < 0) {
  52.             echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
  53.             break;
  54.         }
  55.  
  56.         $out = '';
  57.  
  58.         $cmd = "GET ".substr(strstr($url, $aurl['host']), strlen($aurl['host']))." HTTP/1.0\n";
  59.         $cmd .= "User-Agent: My Name is bud\n";
  60.         $cmd .= "Accept: */*\n";
  61.         $cmd .= "Host: ".$aurl['host']."\n";
  62.         $cmd .= "Connection: Keep-Alive\n\n";
  63.  
  64.         socket_write($socket, $cmd, strlen($cmd));
  65.  
  66.         while ($out = socket_read($socket, 2048)) {
  67.             $data .= $out;
  68.         }
  69.  
  70.         socket_close($socket);
  71.         break;
  72.     default:
  73.         break;
  74. }
  75.  
  76. $check=preg_match_all('/\<li\>\<a href=\"(.*)\"\>(.*)\<\/a\>.*\<\/li\>/i', $data, $matchs);
  77. if($check)
  78. {
  79. /*
  80.     var_dump($matchs);
  81.     while (list(, $value) = each($matchs)) {
  82.         foreach ($value as $val) {
  83.             echo "Value: $val<br />\n";
  84.         }
  85.     }
  86. */
  87. //     我基础不好,不太会写循环哈, 这个显示结果的地方我知道写得不好,求指点
  88.     for($i=0; $i<sizeof($matchs[0]); $i++)
  89.             echo $matchs[1][$i]."----------".$matchs[2][$i]."<br/>\n";
  90. /*
  91.         foreach ($value as $matches[1]) {
  92.             echo "Value: $val<br />\n";
  93.         }
  94.  
  95.         foreach ($value as $matches[2]) {
  96.             echo "Value: $val<br />\n";
  97.         }
  98. */
  99.  
  100. }
  101.  
  102.  
  103. ?>
 
 

Tags: php 基本功 练习题 
本文未看懂?联系冠威客服,享受手把手服务,远程、现场任您选。优惠期间,免费服务!
有更好的解决方案?联系冠威客服,加入冠威,成为冠威客。发表文章,赚取佣金!
冠威客服:E-mail:Service@GuanWei.Org QQ:1026092 合作伙伴:淘男网
分类:PHP笔记 | 评论:0 | 引用:0
分享到:

上一篇:如何破解Windows密码[LM/NTLMv2介绍]
下一篇:The Sixth Sense《灵异第六感》剧情+观后感(影评)

或许你还对下面的文章感兴趣

Comments

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Hot Articles

New Articles

Last Comments

Guest