<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>奔向远方 &#187; php学习点滴</title>
	<atom:link href="http://www.tisswb.cn/archives/tag/php%e5%ad%a6%e4%b9%a0%e7%82%b9%e6%bb%b4/feed" rel="self" type="application/rss+xml" />
	<link>http://www.tisswb.cn</link>
	<description>结婚开始倒计时了，高兴~</description>
	<lastBuildDate>Sat, 31 Jul 2010 16:42:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>php单引号和双引号的区别</title>
		<link>http://www.tisswb.cn/archives/505.html</link>
		<comments>http://www.tisswb.cn/archives/505.html#comments</comments>
		<pubDate>Tue, 26 May 2009 06:39:03 +0000</pubDate>
		<dc:creator>笨二十一</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web技术]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php学习点滴]]></category>

		<guid isPermaLink="false">http://www.tisswb.cn/?p=505</guid>
		<description><![CDATA[平时很少注意到这个细节，一直以为PHP中单引号和双引号是互通的，直到有一天，发现单引号和双引号确实存在区别的时候，就仔细研究了一下，有了下面这段文字。
&#8221; &#8221; 双引号里面的字段会经过编译器解释，然后再当作HTML代码输出。
&#8216; &#8216; 单引号里面的不进行解释，直接输出。
从字面意思上就可以看出，单引号比双引号要快了。
例如：
$abc=&#8217;my name is tome&#8217;;
echo $abc //结果是:my name is tom
echo &#8216;$abc&#8217; //结果是:$abc
echo &#8220;$abc&#8221; //结果是:my name is tom
特别在使用MYSQL语句的时候，双引号和单引号的用法让新手不知所措，在这里，举个例子，来进行说明。
<span class="readmore"><a href="http://www.tisswb.cn/archives/505.html" title="php单引号和双引号的区别" target="_blank">阅读全文——共957字</a></span>]]></description>
			<content:encoded><![CDATA[<p>平时很少注意到这个细节，一直以为PHP中单引号和双引号是互通的，直到有一天，发现单引号和双引号确实存在区别的时候，就仔细研究了一下，有了下面这段文字。</p>
<p>&#8221; &#8221; 双引号里面的字段会经过编译器解释，然后再当作HTML代码输出。</p>
<p>&#8216; &#8216; 单引号里面的不进行解释，直接输出。</p>
<p>从字面意思上就可以看出，单引号比双引号要快了。</p>
<p>例如：<br />
$abc=&#8217;my name is tome&#8217;;<br />
echo $abc //结果是:my name is tom<br />
echo &#8216;$abc&#8217; //结果是:$abc<br />
echo &#8220;$abc&#8221; //结果是:my name is tom</p>
<p>特别在使用MYSQL语句的时候，双引号和单引号的用法让新手不知所措，在这里，举个例子，来进行说明。</p>
<p>假设查询条件中使用的是常量，例如：</p>
<p>select    *    from    abc_table where user_name=&#8217;abc&#8217;;</p>
<p>SQL语句可以写成:</p>
<p>SQLstr = &#8220;select    *    from abc_table where user _name= &#8216;abc&#8217;&#8221; ;</p>
<p>假设查询条件中使用的是变量，例如：</p>
<p>$user_name = $_REQUEST['user_name']; //字符串变量</p>
<p>或</p>
<p>$user=array (&#8220;name&#8221;=&gt; $_REQUEST['user_name‘,"age"=&gt;$_REQUEST['age'];//数组变量</p>
<p>SQL语句就可以写成：</p>
<p>SQLstr = &#8220;select    *    from abc_table where user_name = &#8216; &#8221; . $user_name . &#8221; &#8216; &#8220;;</p>
<p>SQLstr = &#8220;select * from abc_table where user_name = &#8216; &#8221; . $user["name"] . &#8221; &#8216; &#8220;;</p>
<p>对比一下:</p>
<p>SQLstr=&#8221;select * from abc_table where user_name = &#8216; abc &#8216; &#8221; ;</p>
<p>SQLstr=&#8221;select * from abc_table where user_name =&#8217; &#8221; . $user _name . &#8221; &#8216; &#8220;;</p>
<p>SQLstr=&#8221;select * from abc_table where user_name =&#8217; &#8221; . $user["name"] . &#8221; &#8216; &#8220;;</p>
<p>SQLstr可以分解为以下3个部分:<br />
1：&#8221;select * from table where user_name = &#8216; &#8221; //固定SQL语句<br />
2：$user //变量<br />
3：&#8221; &#8216; &#8221;<br />
1,2,3部分字符串之间用&#8221;.&#8221; 来连接</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tisswb.cn/archives/505.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php采集利器——模拟浏览器类snoopy应用</title>
		<link>http://www.tisswb.cn/archives/299.html</link>
		<comments>http://www.tisswb.cn/archives/299.html#comments</comments>
		<pubDate>Sun, 15 Mar 2009 17:20:15 +0000</pubDate>
		<dc:creator>笨二十一</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web技术]]></category>
		<category><![CDATA[php学习点滴]]></category>

		<guid isPermaLink="false">http://www.tisswb.cn/?p=299</guid>
		<description><![CDATA[研究php页面数据采集的时候，无意中发现了snoopy这个类，snoopy是用php写的用以模拟浏览器功能的php类，它可以模拟访问，提交表单到你需要登录的web服务器端，同时提供了筛选信息的功能，让你可以根据需要取得自己想要的信息。
snoopy的官方网站：http://sourceforge.net/projects/snoopy/
Snoopy是一个php类，用来模拟浏览器的功能，可以获取网页内容，发送表单。
Snoopy 正确运行需要你的服务器的 PHP 版本在 4 以上，并且支持 PCRE（Perl Compatible Regular Expressions），基本的 LAMP 服务都支持。
下载snoopy
Snoopy的一些特点:
1抓取网页的内容 fetch
2 抓取网页的文本内容 (去除HTML标签) fetchtext
3抓取网页的链接，表单 fetchlinks fetchform
<span class="readmore"><a href="http://www.tisswb.cn/archives/299.html" title="php采集利器——模拟浏览器类snoopy应用" target="_blank">阅读全文——共5360字</a></span>]]></description>
			<content:encoded><![CDATA[<p>研究php页面数据采集的时候，无意中发现了snoopy这个类，snoopy是用php写的用以模拟浏览器功能的php类，它可以模拟访问，提交表单到你需要登录的web服务器端，同时提供了筛选信息的功能，让你可以根据需要取得自己想要的信息。</p>
<p>snoopy的官方网站：<a href="http://sourceforge.net/projects/snoopy/" target="_blank">http://sourceforge.net/projects/snoopy/</a></p>
<p>Snoopy是一个php类，用来模拟浏览器的功能，可以获取网页内容，发送表单。</p>
<p>Snoopy 正确运行需要你的服务器的 PHP 版本在 4 以上，并且支持 PCRE（Perl Compatible Regular Expressions），基本的 LAMP 服务都支持。<br />
下载<a href="http://sourceforge.net/projects/snoopy/" target="_blank"><strong>snoopy</strong></a></p>
<p>Snoopy的一些特点:</p>
<p>1抓取网页的内容 fetch<br />
2 抓取网页的文本内容 (去除HTML标签) fetchtext<br />
3抓取网页的链接，表单 fetchlinks fetchform<br />
4 支持代理主机<br />
5支持基本的用户名/密码验证<br />
6 支持设置 user_agent, referer(来路), cookies 和 header content(头文件)<br />
7支持浏览器重定向，并能控制重定向深度<br />
8能把网页中的链接扩展成高质量的url(默认)<br />
9提交数据并且获取返回值<br />
10 支持跟踪HTML框架<br />
11支持重定向的时候传递cookies<br />
要求php4以上就可以了 由于本身是php一个类 无需扩支持 服务器不支持curl时候的最好选择，</p>
<p>类方法:</p>
<p>fetch($URI)<br />
———–</p>
<p>这是为了抓取网页的内容而使用的方法。<br />
$URI参数是被抓取网页的URL地址。<br />
抓取的结果被存储在 $this-&gt;results 中。<br />
如果你正在抓取的是一个框架，Snoopy将会将每个框架追踪后存入数组中，然后存入 $this-&gt;results。</p>
<p>fetchtext($URI)<br />
—————</p>
<p>本方法类似于fetch()，唯一不同的就是本方法会去除HTML标签和其他的无关数据，只返回网页中的文字内容。</p>
<p>fetchform($URI)<br />
—————</p>
<p>本方法类似于fetch()，唯一不同的就是本方法会去除HTML标签和其他的无关数据，只返回网页中表单内容(form)。</p>
<p>fetchlinks($URI)<br />
—————-</p>
<p>本方法类似于fetch()，唯一不同的就是本方法会去除HTML标签和其他的无关数据，只返回网页中链接(link)。<br />
默认情况下，相对链接将自动补全，转换成完整的URL。</p>
<p>submit($URI,$formvars)<br />
———————-</p>
<p>本方法向$URL指定的链接地址发送确认表单。$formvars是一个存储表单参数的数组。</p>
<p>submittext($URI,$formvars)<br />
————————–</p>
<p>本方法类似于submit()，唯一不同的就是本方法会去除HTML标签和其他的无关数据，只返回登陆后网页中的文字内容。</p>
<p>submitlinks($URI)<br />
—————-</p>
<p>本方法类似于submit()，唯一不同的就是本方法会去除HTML标签和其他的无关数据，只返回网页中链接(link)。<br />
默认情况下，相对链接将自动补全，转换成完整的URL。</p>
<p>类属性: (缺省值在括号里)</p>
<p>$host 连接的主机<br />
$port 连接的端口<br />
$proxy_host 使用的代理主机，如果有的话<br />
$proxy_port 使用的代理主机端口，如果有的话<br />
$agent 用户代理伪装 (Snoopy v0.1)<br />
$referer 来路信息，如果有的话<br />
$cookies cookies， 如果有的话<br />
$rawheaders 其他的头信息, 如果有的话<br />
$maxredirs 最大重定向次数， 0=不允许 (5)<br />
$offsiteok whether or not to allow redirects off-site. (true)<br />
$expandlinks 是否将链接都补全为完整地址 (true)<br />
$user 认证用户名, 如果有的话<br />
$pass 认证用户名, 如果有的话<br />
$accept http 接受类型 (image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*)<br />
$error 哪里报错, 如果有的话<br />
$response_code 从服务器返回的响应代码<br />
$headers 从服务器返回的头信息<br />
$maxlength 最长返回数据长度<br />
$read_timeout 读取操作超时 (requires PHP 4 Beta 4+)<br />
设置为0为没有超时<br />
$timed_out 如果一次读取操作超时了，本属性返回 true (requires PHP 4 Beta 4+)<br />
$maxframes 允许追踪的框架最大数量<br />
$status 抓取的http的状态<br />
$temp_dir 网页服务器能够写入的临时文件目录 (/tmp)<br />
$curl_path cURL binary 的目录, 如果没有cURL binary就设置为 false</p>
<p>以下是demo</p>
<div><code lang="php"><br />
<div id="wpshdo_2" class="wp-synhighlighter-outer"><div id="wpshdt_2" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_2"></a><a id="wpshat_2" class="wp-synhighlighter-title" href="#codesyntax_2"  onClick="javascript:wpsh_toggleBlock(2)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_2" onClick="javascript:wpsh_code(2)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.tisswb.cn/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_2" onClick="javascript:wpsh_print(2)" title="Print code"><img border="0" style="border: 0 none" src="http://www.tisswb.cn/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.tisswb.cn/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.tisswb.cn/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_2" class="wp-synhighlighter-inner" style="display: block;"><pre class="php" style="font-family:monospace;"><span class="kw1">include</span> <span class="st0">&quot;Snoopy.class.php&quot;</span><span class="sy0">;</span>
<span class="re0">$snoopy</span> <span class="sy0">=</span> <span class="kw2">new</span> Snoopy<span class="sy0">;</span> 
&nbsp;
<span class="re0">$snoopy</span><span class="sy0">-&gt;</span><span class="me1">proxy_host</span> <span class="sy0">=</span> <span class="st0">&quot;www.baidu.com&quot;</span><span class="sy0">;</span>
<span class="re0">$snoopy</span><span class="sy0">-&gt;</span><span class="me1">proxy_port</span> <span class="sy0">=</span> <span class="st0">&quot;8080&quot;</span><span class="sy0">;</span> 
&nbsp;
<span class="re0">$snoopy</span><span class="sy0">-&gt;</span><span class="me1">agent</span> <span class="sy0">=</span> <span class="st0">&quot;(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)&quot;</span><span class="sy0">;</span>
<span class="re0">$snoopy</span><span class="sy0">-&gt;</span><span class="me1">referer</span> <span class="sy0">=</span> <span class="st0">&quot;http://www.baidu.com/&quot;</span><span class="sy0">;</span> 
&nbsp;
<span class="re0">$snoopy</span><span class="sy0">-&gt;</span><span class="me1">cookies</span><span class="br0">&#91;</span><span class="st0">&quot;SessionID&quot;</span><span class="br0">&#93;</span> <span class="sy0">=</span> 238472834723489l<span class="sy0">;</span>
<span class="re0">$snoopy</span><span class="sy0">-&gt;</span><span class="me1">cookies</span><span class="br0">&#91;</span><span class="st0">&quot;favoriteColor&quot;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st0">&quot;RED&quot;</span><span class="sy0">;</span> 
&nbsp;
<span class="re0">$snoopy</span><span class="sy0">-&gt;</span><span class="me1">rawheaders</span><span class="br0">&#91;</span><span class="st0">&quot;Pragma&quot;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st0">&quot;no-cache&quot;</span><span class="sy0">;</span> 
&nbsp;
<span class="re0">$snoopy</span><span class="sy0">-&gt;</span><span class="me1">maxredirs</span> <span class="sy0">=</span> <span class="nu0">2</span><span class="sy0">;</span>
<span class="re0">$snoopy</span><span class="sy0">-&gt;</span><span class="me1">offsiteok</span> <span class="sy0">=</span> <span class="kw4">false</span><span class="sy0">;</span>
<span class="re0">$snoopy</span><span class="sy0">-&gt;</span><span class="me1">expandlinks</span> <span class="sy0">=</span> <span class="kw4">false</span><span class="sy0">;</span> 
&nbsp;
<span class="re0">$snoopy</span><span class="sy0">-&gt;</span><span class="me1">user</span> <span class="sy0">=</span> <span class="st0">&quot;joe&quot;</span><span class="sy0">;</span>
<span class="re0">$snoopy</span><span class="sy0">-&gt;</span><span class="me1">pass</span> <span class="sy0">=</span> <span class="st0">&quot;bloe&quot;</span><span class="sy0">;</span> 
&nbsp;
<span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$snoopy</span><span class="sy0">-&gt;</span><span class="me1">fetchtext</span><span class="br0">&#40;</span><span class="st0">&quot;http://www.baidu.com&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
<span class="kw1">echo</span> <span class="st0">&quot; &quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlspecialchars"><span class="kw3">htmlspecialchars</span></a><span class="br0">&#40;</span><span class="re0">$snoopy</span><span class="sy0">-&gt;</span><span class="me1">results</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;n&quot;</span><span class="sy0">;</span>
&nbsp;
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">else</span>
&nbsp;
<span class="kw1">echo</span> <span class="st0">&quot;error fetching document: &quot;</span><span class="sy0">.</span><span class="re0">$snoopy</span><span class="sy0">-&gt;</span><span class="me1">error</span><span class="sy0">.</span><span class="st0">&quot;n&quot;</span><span class="sy0">;</span></pre></div></div></code><code lang="php"><br />
</code></div>
<p>snoopy采集示例<br />
<code lang="php"><br />
&lt; ?php<br />
//采集phpchina<br />
set_time_limit(0);<br />
require_once("Snoopy.class.php");<br />
$snoopy=new Snoopy();<br />
//登陆论坛<br />
$submit_url = "http://www.phpchina.com/bbs/logging.php?action=login";<br />
$submit_vars["loginmode"] = "normal";<br />
$submit_vars["styleid"] = "1";<br />
$submit_vars["cookietime"] = "315360000";<br />
$submit_vars["loginfield"] = "username";<br />
$submit_vars["username"] = "***"; //你的用户名<br />
$submit_vars["password"] = "*****"; //你的密码<br />
$submit_vars["questionid"] = "0";<br />
$submit_vars["answer"] = "";<br />
$submit_vars["loginsubmit"] = "提 交";<br />
$snoopy-&gt;submit($submit_url,$submit_vars);<br />
if ($snoopy-&gt;results)<br />
{<br />
//获取连接地址<br />
$snoopy-&gt;fetchlinks("http://www.phpchina.com/bbs");<br />
$url=array();<br />
$url=$snoopy-&gt;results;<br />
//print_r($url);<br />
foreach ($url as $key=&gt;$value)<br />
{<br />
//匹配http://www.phpchina.com/bbs/forumdisplay.php?fid=156&amp;sid=VfcqTR地址即论坛板块地址<br />
if (!preg_match("/^(http://www.phpchina.com/bbs/forumdisplay.php?fid=)[0-9]*&amp;sid=[a-zA-Z]{6}/i",$value))<br />
{<br />
unset($url[$key]);<br />
}<br />
}<br />
//print_r($url);<br />
//获取到板块数组$url，循环访问，此处获取第一个模块第一页的数据<br />
$i=0;<br />
foreach ($url as $key=&gt;$value)<br />
{<br />
if ($i&gt;=1)<br />
{<br />
//测试限制<br />
break;<br />
}<br />
else<br />
{<br />
//访问该模块，提取帖子的连接地址，正式访问里需要提取帖子分页的数据，然后根据分页数据提取帖子数据<br />
$snoopy=new Snoopy();<br />
$snoopy-&gt;fetchlinks($value);<br />
$tie=array();<br />
$tie[$i]=$snoopy-&gt;results;<br />
//print_r($tie);<br />
//转换数组<br />
foreach ($tie[$i] as $key=&gt;$value)<br />
{<br />
//匹配http://www.phpchina.com/bbs/viewthread.php?tid=68127&amp;extra=page%3D1&amp;page=1&amp;sid=iBLZfK<br />
if (!preg_match("/^(http://www.phpchina.com/bbs/viewthread.php?tid=)[0-9]*&amp;extra=page%3D1&amp;page=[0-9]*&amp;sid=[a-zA-Z]{6}/i",$value))<br />
{<br />
unset($tie[$i][$key]);<br />
}<br />
}<br />
//print_r($tie[$i]);<br />
//归类数组，将同一个帖子不同页面的内容放一个数组里<br />
$left='';//连接左边公用地址<br />
$j=0;<br />
$page=array();<br />
foreach ($tie[$i] as $key=&gt;$value)<br />
{<br />
$left=substr($value,0,52);<br />
$m=0;<br />
foreach ($tie[$i] as $pkey=&gt;$pvalue)<br />
{<br />
//重组数组<br />
if (substr($pvalue,0,52)==$left)<br />
{<br />
$page[$j][$m]=$pvalue;<br />
$m++;<br />
}<br />
}<br />
$j++;<br />
}<br />
//去除重复项开始<br />
//$page=array_unique($page);只能用于一维数组<br />
$paget[0]=$page[0];<br />
$nums=count($page);<br />
for ($n=1;$n&lt; $nums;$n++)<br />
{<br />
$paget[$n]=array_diff($page[$n],$page[$n-1]);<br />
}<br />
//去除多维数组重复值结束<br />
//去除数组空值<br />
unset($page);<br />
$page=array();//重新定义page数组<br />
$page=array_filter($paget);<br />
//print_r($page);<br />
$u=0;<br />
$title=array();<br />
$content=array();<br />
$temp='';<br />
$tt=array();<br />
foreach ($page as $key=&gt;$value)<br />
{<br />
//外围循环，针对一个帖子<br />
if (is_array($value))<br />
{<br />
foreach ($value as $k1=&gt;$v1)<br />
{<br />
//页内循环，针对一个帖子的N页<br />
$snoopy=new Snoopy();<br />
$snoopy-&gt;fetch($v1);<br />
$temp=$snoopy-&gt;results;<br />
//读取标题<br />
if (!preg_match_all("/</p>
<h2>(.*)&lt; /h2&gt;/i",$temp,$tt))<br />
{<br />
echo "no title";<br />
exit;<br />
}<br />
else<br />
{<br />
$title[$u]=$tt[1][1];<br />
}<br />
unset($tt);<br />
//读取内容<br />
if (!preg_match_all("/</p>
<div id="postmessage_[0-9]{1,8}" class="t_msgfont">(.*)&lt; /div&gt;/i",$temp,$tt))<br />
{<br />
print_r($tt);<br />
echo "no content1";<br />
exit;<br />
}<br />
else<br />
{<br />
foreach ($tt[1] as $c=&gt;$c2)<br />
{<br />
$content[$u].=$c2;<br />
}<br />
}<br />
}<br />
}<br />
else<br />
{<br />
//直接取页内容<br />
$snoopy=new Snoopy();<br />
$snoopy-&gt;fetch($value);<br />
$temp=$snoopy-&gt;results;<br />
//读取标题<br />
if (!preg_match_all("/</p>
<h2>(.*)&lt; /h2&gt;/i",$temp,$tt))<br />
{<br />
echo "no title";<br />
exit;<br />
}<br />
else<br />
{<br />
$title[$u]=$tt[1][1];<br />
}<br />
unset($tt);<br />
//读取内容<br />
if (!preg_match_all("/</p>
<div id="postmessage_[0-9]*" class="t_msgfont">(.*)&lt; /div&gt;/i",$temp,$tt))<br />
{<br />
echo "no content2";<br />
exit;<br />
}<br />
else<br />
{<br />
foreach ($tt[1] as $c=&gt;$c2)<br />
{<br />
$content[$u].=$c2;<br />
}<br />
}<br />
}<br />
$u++;<br />
}<br />
print_r($content);<br />
}<br />
$i++;<br />
}<br />
}<br />
else<br />
{<br />
echo "login failed";<br />
exit;<br />
}<br />
?&gt;</div>
</h2>
</div>
</h2>
<p> </p>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tisswb.cn/archives/299.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP抓取远程网站数据的代码</title>
		<link>http://www.tisswb.cn/archives/287.html</link>
		<comments>http://www.tisswb.cn/archives/287.html#comments</comments>
		<pubDate>Sat, 07 Mar 2009 20:57:18 +0000</pubDate>
		<dc:creator>笨二十一</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web技术]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php学习点滴]]></category>

		<guid isPermaLink="false">http://www.tisswb.cn/?p=287</guid>
		<description><![CDATA[这几天开发一套新的采集系统，整理了一些这方面的资料：如何像搜索引擎那样去抓取别人网站的HTML代码,然后把代码收集整理成为自己有用的数据!今天就等我介绍一些简单例子吧.
Ⅰ.抓取远程网页标题的例子:

< ?php
/*
+-------------------------------------------------------------
+抓取网页标题的代码,直接拷贝本代码片段,另存为.php文件执行即可.
+-------------------------------------------------------------
*/
error_reporting(7);
<span class="readmore"><a href="http://www.tisswb.cn/archives/287.html" title="PHP抓取远程网站数据的代码" target="_blank">阅读全文——共1792字</a></span>]]></description>
			<content:encoded><![CDATA[<p>这几天开发一套新的采集系统，整理了一些这方面的资料：如何像搜索引擎那样去抓取别人网站的HTML代码,然后把代码收集整理成为自己有用的数据!今天就等我介绍一些简单例子吧.</p>
<p><strong>Ⅰ.抓取远程网页标题的例子:</strong></p>
<p><code lang="php" linenum="on"><br />
< ?php<br />
/*<br />
+-------------------------------------------------------------<br />
+抓取网页标题的代码,直接拷贝本代码片段,另存为.php文件执行即可.<br />
+-------------------------------------------------------------<br />
*/<br />
error_reporting(7);<br />
$file = fopen ("http://www.dnsing.com/", "r");<br />
if (!$file) {<br />
echo "<font color=red>Unable to open remote file.n";<br />
exit;<br />
}<br />
while (!feof ($file)) {<br />
$line = fgets ($file, 1024);<br />
if (eregi ("", $line, $out)) {<br />
$title = $out[1];<br />
echo "".$title."";<br />
break;<br />
}<br />
}<br />
fclose($file); </p>
<p>//End<br />
?><br />
</code></p>
<p><strong>Ⅱ.抓取远程网页HTML代码的例子:</strong></p>
<p><code lang="php" linenum="on"><br />
< ? php<br />
/*<br />
+----------------<br />
+DNSing Sprider<br />
+----------------<br />
*/</p>
<p>$fp = fsockopen("www.dnsing.com", 80, $errno, $errstr, 30);<br />
if (!$fp) {<br />
   echo "$errstr ($errno)<br/>n";<br />
} else {<br />
   $out = "GET / HTTP/1.1rn";<br />
   $out .= "Host: www.dnsing.com rn";<br />
   $out .= "Connection: Close rnrn";<br />
   fputs($fp, $out);<br />
   while (!feof($fp)) {<br />
     echo fgets($fp, 128);<br />
   }<br />
   fclose($fp);<br />
}<br />
//End<br />
?></code></p>
<p>以上两个代码片段都直接Copy回去运行就知道效果了,上面的例子只是抓取网页数据的雏形,要使其更适合自己的使用,情况有各异.所以,在此各位程序爱好者自己好好研究一下吧.</p>
<p>===============================</p>
<p>稍微有点意义的函数是：get_content_by_socket(), get_url(), get_content_url(), get_content_object 几个函数，也许能够给你点什么想法。</p>
<p><code lang="php" linenum="on"><br />
< ?php </p>
<p>//获取所有内容url保存到文件<br />
function get_index($save_file, $prefix="index_"){<br />
     $count = 68;<br />
     $i = 1;<br />
     if (file_exists($save_file)) @unlink($save_file);<br />
     $fp = fopen($save_file, "a+") or die("Open ". $save_file ." failed");<br />
     while($i<$count){<br />
         $url = $prefix . $i .".htm";<br />
         echo "Get ". $url ."...";<br />
         $url_str = get_content_url(get_url($url));<br />
         echo " OKn";<br />
         fwrite($fp, $url_str);<br />
         ++$i;<br />
     }<br />
     fclose($fp);<br />
} </p>
<p>//获取目标多媒体对象<br />
function get_object($url_file, $save_file, $split="|--:**:--|"){<br />
     if (!file_exists($url_file)) die($url_file ." not exist");<br />
     $file_arr = file($url_file);<br />
     if (!is_array($file_arr) || empty($file_arr)) die($url_file ." not content");<br />
     $url_arr = array_unique($file_arr);<br />
     if (file_exists($save_file)) @unlink($save_file);<br />
     $fp = fopen($save_file, "a+") or die("Open save file ". $save_file ." failed");<br />
     foreach($url_arr as $url){<br />
         if (empty($url)) continue;<br />
         echo "Get ". $url ."...";<br />
         $html_str = get_url($url);<br />
         echo $html_str;<br />
         echo $url;<br />
         exit;<br />
         $obj_str = get_content_object($html_str);<br />
         echo " OKn";<br />
         fwrite($fp, $obj_str);<br />
     }<br />
     fclose($fp);<br />
} </p>
<p>//遍历目录获取文件内容<br />
function get_dir($save_file, $dir){<br />
     $dp = opendir($dir);<br />
     if (file_exists($save_file)) @unlink($save_file);<br />
     $fp = fopen($save_file, "a+") or die("Open save file ". $save_file ." failed");<br />
     while(($file = readdir($dp)) != false){<br />
         if ($file!="." &#038;&#038; $file!=".."){<br />
             echo "Read file ". $file ."...";<br />
             $file_content = file_get_contents($dir . $file);<br />
             $obj_str = get_content_object($file_content);<br />
             echo " OKn";<br />
             fwrite($fp, $obj_str);<br />
         }<br />
     }<br />
     fclose($fp);<br />
} </p>
<p>//获取指定url内容<br />
function get_url($url){<br />
     $reg = '/^http://[^/].+$/';<br />
     if (!preg_match($reg, $url)) die($url ." invalid");<br />
     $fp = fopen($url, "r") or die("Open url: ". $url ." failed.");<br />
     while($fc = fread($fp, 8192)){<br />
         $content .= $fc;<br />
     }<br />
     fclose($fp);<br />
     if (empty($content)){<br />
         die("Get url: ". $url ." content failed.");<br />
     }<br />
     return $content;<br />
} </p>
<p>//使用socket获取指定网页<br />
function get_content_by_socket($url, $host){<br />
     $fp = fsockopen($host, 80) or die("Open ". $url ." failed");<br />
     $header = "GET /".$url ." HTTP/1.1rn";<br />
     $header .= "Accept: */*rn";<br />
     $header .= "Accept-Language: zh-cnrn";<br />
     $header .= "Accept-Encoding: gzip, deflatern";<br />
     $header .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; InfoPath.1; .NET CLR 2.0.50727)rn";<br />
     $header .= "Host: ". $host ."rn";<br />
     $header .= "Connection: Keep-Alivern";<br />
     //$header .= "Cookie: cnzz02=2; rtime=1; ltime=1148456424859; cnzz_eid=56601755-rnrn";<br />
     $header .= "Connection: Closernrn"; </p>
<p>     fwrite($fp, $header);<br />
     while (!feof($fp)) {<br />
         $contents .= fgets($fp, 8192);<br />
     }<br />
     fclose($fp);<br />
     return $contents;<br />
} </p>
<p>//获取指定内容里的url<br />
function get_content_url($host_url, $file_contents){ </p>
<p>     //$reg = '/^(#|javascript.*?|ftp://.+|http://.+|.*?href.*?|play.*?|index.*?|.*?asp)+$/i';<br />
     //$reg = '/^(down.*?.html|d+_d+.htm.*?)$/i';<br />
     $rex = "/([hH][rR][eE][Ff])s*=s*['"]*([^>'"s]+)["'>]*s*/i";<br />
     $reg = '/^(down.*?.html)$/i';<br />
     preg_match_all ($rex, $file_contents, $r);<br />
     $result = ""; //array();<br />
     foreach($r as $c){<br />
         if (is_array($c)){<br />
             foreach($c as $d){<br />
                 if (preg_match($reg, $d)){ $result .= $host_url . $d."n"; }<br />
             }<br />
         }<br />
     }<br />
     return $result;<br />
} </p>
<p>//获取指定内容中的多媒体文件<br />
function get_content_object($str, $split="|--:**:--|"){<br />
     $regx = "/hrefs*=s*['"]*([^>'"s]+)["'>]*s*(<b>.*?< /b>)/i";<br />
     preg_match_all($regx, $str, $result); </p>
<p>     if (count($result) == 3){<br />
         $result[2] = str_replace("</b><b>多媒体： ", "", $result[2]);<br />
         $result[2] = str_replace("</b>", "", $result[2]);<br />
         $result = $result[1][0] . $split .$result[2][0] . "n";<br />
     }<br />
     return $result;<br />
} </p>
<p>?> </code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tisswb.cn/archives/287.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php小偷程序原理分析</title>
		<link>http://www.tisswb.cn/archives/284.html</link>
		<comments>http://www.tisswb.cn/archives/284.html#comments</comments>
		<pubDate>Sat, 07 Mar 2009 20:51:59 +0000</pubDate>
		<dc:creator>笨二十一</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web技术]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php学习点滴]]></category>

		<guid isPermaLink="false">http://www.tisswb.cn/?p=284</guid>
		<description><![CDATA[拿华军软件开刀,经过今天的教程以后,我相信大家都能偷.
当然,你想偷别的站也是一个道理.关键是方法.
我们打开华军软件园主站地址:
http://www.onlinedown.net/index.htm
当打开完成以后,点 查看&#8211;查看源文件
系统会用记事本显示出来首页的HTML代码.
/*
&#60;title&#62;华军软件园——共享软件发布-下载-学习-研究-交流之园(推荐用1024*768)&#60;/title&#62;
*/
看见这一行没?这就是标题.
<span class="readmore"><a href="http://www.tisswb.cn/archives/284.html" title="php小偷程序原理分析" target="_blank">阅读全文——共10526字</a></span>]]></description>
			<content:encoded><![CDATA[<p>拿华军软件开刀,经过今天的教程以后,我相信大家都能偷.<br />
当然,你想偷别的站也是一个道理.关键是方法.<br />
我们打开华军软件园主站地址:<br />
<a href="http://www.onlinedown.net/index.htm">http://www.onlinedown.net/index.htm</a></p>
<p>当打开完成以后,点 查看&#8211;查看源文件<br />
系统会用记事本显示出来首页的HTML代码.</p>
<p>/*<br />
&lt;title&gt;华军软件园——共享软件发布-下载-学习-研究-交流之园(推荐用1024*768)&lt;/title&gt;<br />
*/<br />
看见这一行没?这就是标题.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
写小偷需要能看懂HTML才行哦?如果你一点HTML都看不懂的话,那就学起来有难度.<br />
现在大家从HTML中,找出华军软件园首页的<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
软件总数:30738 更新:287<br />
国产软件:160国外软件:113<br />
汉化补丁:13 数码软件:1<br />
杀毒快报:10 资讯中心:42<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
以上信息从HTML代码从 哪里开始.<br />
是单独表格还是在表格内的行,或者列.<br />
不会也没关系,看多了就会了.如果你不会以后想成为神偷就有难度,所以现在开始就得学习了.</p>
<p>好了,讲了这么多,就是告诉大家,小偷就是用ASP,PHP或者其他语言在程序中打开并且处理这些HTML<br />
拿PHP讲<br />
&lt;?php<br />
$files=&#8221;http://www.onlinedown.net/index.htm&#8221;;<br />
$fp=fopen($files,&#8221;a&#8221;);<br />
&#8230;..<br />
&#8230;&#8230;<br />
?&gt;<br />
把打开的HTML代码进行切割,更换.<br />
比如刚才叫大家找的.下面的信息<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
软件总数:30738 更新:287<br />
国产软件:160国外软件:113<br />
汉化补丁:13 数码软件:1<br />
杀毒快报:10 资讯中心:42<br />
&#8212;&#8212;&#8212;&#8212;&#8211;<br />
PHP就是处理这个index.htm<br />
把你要的信息切割处理.简单的这么讲<br />
&#8211;<br />
首页更新 = 从index.htm中切割出首页更新内容<br />
&#8211;<br />
然后在你要显示的地方输出,就显示了上面内容.</p>
<p>其他内容也是一样处理.<br />
处理原理就是这样.所以说是一直自动更新.<br />
按照你的办法切割着首页.它首页内容变新了,当访问你小偷的时候,你切割出来的内容是他的内容,所以是同步时时的内容.</p>
<p>今天就讲这么多,就弄明白原理,知道怎么回事就可以,别往深处想.如果你看不懂HTML的话,应该花几个小时看看了.以后要用.<br />
对自己要有信心,其实每个人都很聪明的.知识是慢慢积累的.<br />
我相信经过我几天的教程,到最后你能写出你自己的小偷来!</p>
<p>____________________________________________________________________________________________</p>
<p>今天教第二天.<br />
有个朋友说的好,其实教功夫也是变相的教你怎么杀人,可是不说出来.<br />
所以这个教程从下一篇开始就改个名字<br />
叫&lt;远程操作对方数据程序&gt;有点土比小偷好听<br />
第二天.<br />
教几个函数给大家.<br />
1 读取判断函数<br />
2 更新cache函数<br />
3 写入文件函数<br />
4 切割字符函数<br />
5 读取字符函数<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
在我们想写之前我们先要做好准备,构思一下怎么去写.<br />
制作前构思1<br />
我们打开华军首页<br />
[url]http://www.onlinedown.net/[/url]<br />
经过我们统计,是不是发现它的连接有个很相同的规则?<br />
1 根目录的index.htm文件<br />
2 soft文件夹的 1.htm &#8230;&#8230;.30000.htm<br />
3 sort文件夹的 1_1.htm   200_1.htm<br />
4 a-z文件夹 1.htm &#8230;.200.htm<br />
到此我们可以想好一个打开函数,不是根目录 就是文件夹/名字<br />
只有2中可能.<br />
制作前构思2<br />
为了让速度更快,我们最好把内容读过来存储起来.<br />
1 减少了对对方站点的请求.<br />
2 提供了速度.<br />
这里我们判断这个文件写入的时间为准 我们自己设置一个时间<br />
当写入时间 和现在的时间比一下,如果在我们的设置时间内的话.就是可以.<br />
如果不在比如<br />
文件写入时间 2004年5月18好 06:00 我们现在时间是2004年5月19号 18:00<br />
我们设置时间是1个小时<br />
当再次请求这个文件的时候 他发现已经过期了.就会重新向对方请求一次并且存入.<br />
制作前构思3<br />
为了以后频繁的操作简单话,把固定的操作写进一个函数.<br />
切割字符.<br />
一般切割就是 从第一个位置   切割到第二个位置 然后取中间部分<br />
比如:<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;演示站点&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
从&lt;title&gt;开始切割到&lt;/title&gt;<br />
那切割出来的 就是 &#8220;演示站点&#8221;4个字<br />
如果说,可以找到   几个 &lt;title&gt;怎么办?程序会从第一处开始切割<br />
到这里构思差不多..<br />
程序要干净明了才行,不要这一个文件不知道什么,那一个文件不知道哪来.<br />
所以,如果你以后有做大站的机会的话,文件夹,文件一定要写的清楚,分的清楚.<br />
既然明白了构思,我们就开始动手做了.<br />
建立我们第一个PHP文件:<br />
你可以用记事本,可以用Dreamweaver也可以用专用PHP编辑软件<br />
取名字为 commom.php<br />
内容为<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
&lt;?php<br />
include &#8216;./config.php&#8217;;<br />
include &#8216;./global.php&#8217;;<br />
?&gt;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
这个文件有什么用?就是在以后操作中直接 inclue 这个文件就可以用到所有的函数啊什么的<br />
然后config.php是设置 URL 刷新时间 等等<br />
global.php是 所有函数的文件<br />
也就是今天要给教给大家的!<br />
第一个个函数 open<br />
&#8212;&#8212;&#8212;&#8212;-<br />
function open($file,$type=&#8221;){<br />
         global $fromurl,$referer;<br />
         $cachename=$file;<br />
                 if($type){<br />
                         $file=$fromurl.&#8217;/&#8217;.$type.&#8217;/&#8217;.$file;<br />
                 }else{<br />
                         $file=$fromurl.$file;<br />
                 }</p>
<p>                <br />
                <br />
                <br />
                         if($open=file($file)){<br />
                                         $count=count($open);<br />
                                         for($i=0;$i&lt;$count;$i++){<br />
                                                 $theget.=$open[$i];</p>
<p>                                         }<br />
                                        <br />
                                 }else{<br />
                                         die(&#8216;请求过多，超时，请刷新&#8217;);<br />
                                 }<br />
                <br />
                <br />
         return $theget;</p>
<p>}<br />
&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
解释过了,连接地址就2中请求,根目录,和 文件夹/名字<br />
函数怎么用法等等,不多说了.建议大家下载译本PHP中文手册看看.<br />
第二个函数<br />
根据设置时间更新cache目录文件函数 update<br />
&#8212;&#8212;&#8212;&#8212;&#8212;<br />
function update($file,$type=&#8221;){<br />
         global $timestamp,$flush;<br />
         if(!file_exists(&#8220;cache/$file&#8221;)){<br />
                 if($type){<br />
                         $data=open($file,$type);<br />
                 }else{<br />
                         $data=open($file);<br />
                 }<br />
                <br />
                 writetofile(&#8220;cache/$file&#8221;,$data);<br />
         }else{<br />
                 $lastflesh=@filemtime(&#8220;cache/$file&#8221;);<br />
                <br />
        <br />
        <br />
                 if($lastflesh + ($flush * 60) &lt; $timestamp ){<br />
                         if($type){<br />
                                 $data=open($file,$type);<br />
                         }else{<br />
                                 $data=open($file);<br />
                         }<br />
                         writetofile(&#8220;cache/$file&#8221;,$data);<br />
                 }<br />
         }</p>
<p>}<br />
&#8212;&#8212;&#8211;<br />
简单解释<br />
$data=open($file,$type);就是用到上面的 open函数了<br />
如果我们用 udate(&#8220;index.htm&#8221;);<br />
那不就是用到了 update函数吗? 明白吗?<br />
上面出现了writetofile函数 下面是代码<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
function writetofile($file_name,$data,$method=&#8221;w&#8221;) {<br />
         if($filenum=fopen($file_name,$method)){<br />
                 flock($filenum,LOCK_EX);<br />
                 $file_data=fwrite($filenum,$data);<br />
                 fclose($filenum);<br />
                 return $file_data;<br />
         }else{<br />
                 return false;<br />
         }<br />
}&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
切割字符函数<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
function cut($file,$from,$end){</p>
<p>         $message=explode($from,$file);<br />
         $message=explode($end,$message[1]);<br />
return         $message[0];<br />
}<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
读取函数<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
function readfromfile($file_name) {<br />
         if($filenum=fopen($file_name,&#8221;r&#8221;)){<br />
                 flock($filenum,LOCK_SH);<br />
                 $file_data=fread($filenum,filesize($file_name));<br />
                 fclose($filenum);<br />
                 return $file_data;<br />
         }else{<br />
                 return false;<br />
         }<br />
        <br />
}<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
把所有函数写成一个文件 保存起来 取名字叫 global.php<br />
内容如下:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
&lt;?php<br />
function open($file,$type=&#8221;){<br />
         global $fromurl,$referer;<br />
         $cachename=$file;<br />
                 if($type){<br />
                         $file=$fromurl.&#8217;/&#8217;.$type.&#8217;/&#8217;.$file;<br />
                 }else{<br />
                         $file=$fromurl.$file;<br />
                 }</p>
<p>                <br />
                <br />
                <br />
                         if($open=file($file)){<br />
                                         $count=count($open);<br />
                                         for($i=0;$i&lt;$count;$i++){<br />
                                                 $theget.=$open[$i];</p>
<p>                                         }<br />
                                        <br />
                                 }else{<br />
                                         die(&#8216;请求过多，超时，请刷新&#8217;);<br />
                                 }<br />
                <br />
                <br />
         return $theget;</p>
<p>}</p>
<p>function update($file,$type=&#8221;){<br />
//更新cache中的文件<br />
         global $timestamp,$flush;<br />
         if(!file_exists(&#8220;cache/$file&#8221;)){<br />
                 if($type){<br />
                         $data=open($file,$type);<br />
                 }else{<br />
                         $data=open($file);<br />
                 }<br />
                <br />
                 writetofile(&#8220;cache/$file&#8221;,$data);<br />
         }else{<br />
                 $lastflesh=@filemtime(&#8220;cache/$file&#8221;);<br />
                <br />
        <br />
        <br />
                 if($lastflesh + ($flush * 60) &lt; $timestamp ){<br />
                         if($type){<br />
                                 $data=open($file,$type);<br />
                         }else{<br />
                                 $data=open($file);<br />
                         }<br />
                         writetofile(&#8220;cache/$file&#8221;,$data);<br />
                 }<br />
         }</p>
<p>}<br />
function readfromfile($file_name) {<br />
         if($filenum=fopen($file_name,&#8221;r&#8221;)){<br />
                 flock($filenum,LOCK_SH);<br />
                 $file_data=fread($filenum,filesize($file_name));<br />
                 fclose($filenum);<br />
                 return $file_data;<br />
         }else{<br />
                 return false;<br />
         }<br />
        <br />
}</p>
<p>function writetofile($file_name,$data,$method=&#8221;w&#8221;) {<br />
         if($filenum=fopen($file_name,$method)){<br />
                 flock($filenum,LOCK_EX);<br />
                 $file_data=fwrite($filenum,$data);<br />
                 fclose($filenum);<br />
                 return $file_data;<br />
         }else{<br />
                 return false;<br />
         }<br />
}<br />
function cut($file,$from,$end){</p>
<p>         $message=explode($from,$file);<br />
         $message=explode($end,$message[1]);<br />
return         $message[0];<br />
}<br />
function updatecache($file,$cache=&#8221;){<br />
         global $timestamp,$flush;<br />
         if(!file_exists($file)){<br />
                 writetofile($file,$cache);<br />
                 $return=$cache;<br />
         }elseif(@filemtime($file) &lt; $timestamp &#8211; ($flush * 60)){<br />
                 writetofile($file,$cache);<br />
                 $return=$cache;<br />
         }else{<br />
                 $return=readfromfile($file);        <br />
         }<br />
         return $return;<br />
}<br />
?&gt;<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
其中有几个变量在config.php中设置一下<br />
我们建立config.php文件 内容如下:<br />
&lt;?php<br />
$fromurl = &#8220;http://www.onlinedown.net/&#8221;;<br />
$flush=&#8221;120&#8243;;//update函数中自动同步更新时间<br />
?&gt;<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
现在位置我们有了3个文件了 commom.php config.php global.php<br />
有了3个文件 程序总体完成了.接下来如何去偷呢?<br />
心急的人可以先试试<br />
建立一个index.php文件 就是首页<br />
你先做好模板 的样子<br />
HTML先做好.<br />
然后在<br />
&lt;html&gt;<br />
&#8230;&#8230;..<br />
&#8230;&#8230;..<br />
&lt;/html&gt;<br />
的上方插入PHP代码<br />
如下:<br />
&lt;?php<br />
require &#8216;./commom.php&#8217;;<br />
update(&#8220;index.htm&#8221;);<br />
$file=readfromfile(&#8220;cache/index.htm&#8221;);<br />
$gwrj = cut($file,&#8221;&lt;TD width=&#8221;307&#8243; height=&#8221;118&#8243;&gt;&#8221;,&#8221;&lt;/TD&gt;&#8221;);<br />
?&gt;<br />
&lt;html&gt;<br />
&#8230;&#8230;.<br />
&#8230;&#8230;<br />
&#8230;&#8230;.<br />
&lt;/html&gt;<br />
在你想要插入的地方插入&lt;?php echo $gwrj; ?&gt;<br />
就是从首页中切割出来的国外软件<br />
自己试试</p>
<p>___________________________________________________________________________________________</p>
<p>今天我们教,偷取首页.不同的首页需要不同的偷法,主要是分析HTML代码.函数以及方法前面2天介绍的很清楚了.今天我们在实践中讲解和使用.</p>
<p>还是拿华军软件园开刀.<br />
<a href="http://www.onlinedown.net/index.htm">http://www.onlinedown.net/index.htm</a><br />
用Dreamweaver新建一个index.php的页子.<br />
注意:<br />
先做好你要的首页模板,然后开始偷首页.由于考虑到对初学者的教程.所以先把模板和PHP处理代码放在同一个网页中.<br />
以后教大家HTML和PHP的分离.</p>
<p>模板建立好以后,我们就开偷.<br />
在&lt;html&gt;<br />
的上方插入PHP代码,如下形式:<br />
&lt;?<br />
require &#8216;./commom.php&#8217;;<br />
update(&#8220;index.htm&#8221;);<br />
$file=readfromfile(&#8220;cache/index.htm&#8221;);</p>
<p>?&gt;<br />
解释<br />
require &#8216;./commom.php&#8217;//引入commom.php文件<br />
update(&#8220;index.htm&#8221;)//读取写入index.htm网页<br />
$file=readfromfile(&#8220;cache/index.htm&#8221;)//从本地文件夹cache中读取index.htm<br />
这里的$file是一个变量,你可以随便取名.也可以叫它 $html<br />
但是后面用到的时候要统一.</p>
<p>上面代码,没有处理任何东西,也没有输出任何的东西.如果说输出$file的话,那么就是index.htm的所有html代码.<br />
下面就开始到index.htm中拿我们想要的东东.</p>
<p>1 拿国外软件更新的代码.<br />
大家可以取一个变量名为 $gwrj    //国外软件 名字随便取<br />
怎么从这个index.htm拿出这个我们想要的国外软件呢?这里拿出我们上一节讲过的cut函数<br />
$gwrj = cut($file,&#8221;&lt;TD width=&#8221;307&#8243; height=&#8221;118&#8243;&gt;&#8221;,&#8221;&lt;/TD&gt;&#8221;);<br />
解释<br />
$xxx = cut($file,&#8221;$first&#8221;,&#8221;$end&#8221;);<br />
如何工作的呢?就是把$file(index.htm)从$first处切割取下面部分,在切割$end取上面部分.<br />
比如说:<br />
$file = &#8220;111222333444&#8243;;<br />
$xxx = cut($file,&#8221;1&#8243;,&#8221;3&#8243;);//结果是11222 这样的解释应该明白吧?<br />
注意:<br />
&#8220;&lt;TD width=&#8221;307&#8243; height=&#8221;118&#8243;&gt;&#8221;<br />
在&#8221; &#8220;内的内容 如果也有 &#8221; 的话,需要在前面加<br />
例子<br />
&#8220;&lt;TD width=&#8221;307&#8243; height=&#8221;118&#8243;&gt;&#8221;<br />
成为<br />
&#8220;&lt;TD width=&#8221;307&#8243; height=&#8221;118&#8243;&gt;&#8221;<br />
下面这段代码就是成功偷取了国外软件:<br />
&lt;?<br />
require &#8216;./commom.php&#8217;;<br />
update(&#8220;index.htm&#8221;);<br />
$file=readfromfile(&#8220;cache/index.htm&#8221;);<br />
$gwrj = cut($file,&#8221;&lt;TD width=&#8221;307&#8243; height=&#8221;118&#8243;&gt;&#8221;,&#8221;&lt;/TD&gt;&#8221;);<br />
?&gt;<br />
然后在你的html模板中,在需要显示的地方插入代码<br />
&lt;? echo $gwrj; ?&gt;</p>
<p>其他偷取也一样.<br />
注意:<br />
这里拿出来的HTML需要更换为自己的代码,可以总的更换,也可以一个一个更换.<br />
我们讲单独更换代码就是:<br />
$gwrj = cut($file,&#8221;&lt;TD width=&#8221;307&#8243; height=&#8221;118&#8243;&gt;&#8221;,&#8221;&lt;/TD&gt;&#8221;);<br />
$gwrj = str_replace(&#8220;soft/&#8221;,&#8221;soft.php?id=&#8221;,$gwrj);<br />
$gwrj = str_replace(&#8220;.htm&#8221;,&#8221;",$gwrj);<br />
解释:<br />
就是把偷过来的国外软件中的代码更换.<br />
原来的<br />
&lt;a target=_blank href=&#8221;soft/18204.htm&#8221;&gt;<br />
变为了现在的<br />
&lt;a target=_blank href=&#8221;soft.php?id=18204&#8243;&gt;</p>
<p>基本差不多了,多菜鸟讲来应该很详细咯.先做好首页模板,然后一个一个的挖出来你想要的东西.<br />
想一个问题.<br />
index.htm中,有很多分类资讯的,都是调用JS显示的内容,你怎么把它拿过来显示在你的首页中.<br />
希望大家偷的都很顺利.<br />
简单讲下分类的偷取.和偷取首页一样.代码如下:<br />
&lt;?<br />
require &#8216;./commom.php&#8217;;</p>
<p>if($soft){<br />
         update(&#8220;${soft}.htm&#8221;,&#8221;soft&#8221;);<br />
         $file=readfromfile(&#8220;cache/${soft}.htm&#8221;);<br />
}<br />
?&gt;<br />
soft.php<br />
其中$soft就是从前面传递过来的soft.php?id=1234<br />
如果传递过来1234<br />
那么就是更新读取update(&#8220;1234.html&#8221;,&#8221;soft&#8221;);</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tisswb.cn/archives/284.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP小偷原理实现及改进</title>
		<link>http://www.tisswb.cn/archives/272.html</link>
		<comments>http://www.tisswb.cn/archives/272.html#comments</comments>
		<pubDate>Sat, 07 Mar 2009 20:36:41 +0000</pubDate>
		<dc:creator>笨二十一</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web技术]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php学习点滴]]></category>

		<guid isPermaLink="false">http://www.tisswb.cn/?p=272</guid>
		<description><![CDATA[PHP小偷程序说白了就是让别人帮你维护你的网站，有点不劳而获的意思。至于这个东西到底是好是坏我们不评价了，还是研究一下程序要紧。
优点：通过PHP小偷我们可以借用别人网站上的信息而不用自己辛苦地去采集
缺点：需要把整页的HTML代码读取到本地,然后通过匹配获取到想要的信息再进行显示,这样大大影响网页的加载速度
改进：通过AJAX异步读取HTML代码,后台进行匹配获取到想要的信息,再显示到前台页面
预备知识：PHP,AJAX,正则表达式
关键字：file_get_contents()  fopen()  fwrite()  eregi()
前三个关键字都是关于PHP文件处理的函数,eregi()是关于正则表达式的函数
PHP小偷原理的实现
一、file_get_contents() fopen() fwrite() 的应用
咱们用华夏黑客牛刀小试吧,把主页的全部信息获取过来
<span class="readmore"><a href="http://www.tisswb.cn/archives/272.html" title="PHP小偷原理实现及改进" target="_blank">阅读全文——共2032字</a></span>]]></description>
			<content:encoded><![CDATA[<p>PHP小偷程序说白了就是让别人帮你维护你的网站，有点不劳而获的意思。至于这个东西到底是好是坏我们不评价了，还是研究一下程序要紧。</p>
<p><strong>优点</strong>：通过PHP小偷我们可以借用别人网站上的信息而不用自己辛苦地去采集</p>
<p><strong>缺点</strong>：需要把整页的HTML代码读取到本地,然后通过匹配获取到想要的信息再进行显示,这样大大影响网页的加载速度</p>
<p><strong>改进</strong>：通过AJAX异步读取HTML代码,后台进行匹配获取到想要的信息,再显示到前台页面</p>
<p><strong>预备知识</strong>：PHP,AJAX,正则表达式</p>
<p><strong>关键字</strong>：file_get_contents()  fopen()  fwrite()  eregi()</p>
<p>前三个关键字都是关于PHP文件处理的函数,eregi()是关于正则表达式的函数</p>
<p>PHP小偷原理的实现</p>
<p>一、file_get_contents() fopen() fwrite() 的应用</p>
<p>咱们用华夏黑客牛刀小试吧,把主页的全部信息获取过来</p>
<p>建立一个PHP文件</p>
<p><code lang="php"><br />
&lt; ?php<br />
$url = 'http://www.77169.com/';<br />
//file_get_contents（）函数获取网页的html文档<br />
$file = file_get_contents ( $url );<br />
//建立一个新文件ImitationIndex.htm<br />
$newfile = fopen ( 'ImitationIndex.htm', 'w' );<br />
//把内容读取进去<br />
fwrite ( $newfile, $file );<br />
//关闭打开的文件<br />
fclose ( $newfile );<br />
?&gt;<br />
</code><br />
ImitationIndex.htm获取主页全部的HTML(保存好,以备下次使用)</p>
<p>二、eregi()函数的应用</p>
<p>通过eregi()获取里的内容</p>
<div><code lang="php"><br />
&lt; ?php<br />
$url = 'http://www.77169.com/';<br />
//file_get_contents（）函数获取网页的html文档<br />
$file = file_get_contents ( $url );<br />
//通过eregi()匹配获取想要的信息<br />
eregi ( '之间的内容</code></div>
<div><code lang="php">　　从上面的两个例子,已经知道PHP小偷的实现原理,从中也知道它的不足之处,但通过AJAX可以完善它,使它可以用于实践项目中</code></div>
<p><code lang="php">　　PHP小偷技术的实用和改进</p>
<p>　　目的:获取华夏黑客的最新资讯,并实时更新查看示例<br />
实际中可能只用到三个页面</p>
<p>　　showNews.php,Update.php,HackNews.htm</p>
<p>　　但为了能看到实时更新的效果,这里用到了模拟主页的页面ImitationIndex.htm</p>
<div><code lang="html"><br />
<!--<br />
body {<br />
background: #c60;<br />
}</div>
<div mce_tmp="1">a {<br />
color: #444;<br />
font: 12px Courier New;<br />
padding: 8px;<br />
}</div>
<div mce_tmp="1">a:hover {<br />
color: #f00<br />
}</div>
<div mce_tmp="1">#hei_content {<br />
width: 400px;<br />
background: #ccc;<br />
border: 2px solid #000;<br />
border-bottom: 5px solid #000;<br />
}<br />
--></div>
<p></code><code lang="html">&lt; ?php<br />
echo ('<br />
</code></p>
<div></div>
</div>
<p> </p>
<p></code><code lang="html"></p>
<div id="hei_content">');<br />
include ('HackNews.htm');<br />
echo ('');<br />
?&gt;<br />
<script type="text/javascript"><!--
window.onload=UpdateNews;
function GetXmlHttp()
{
var xmlhttp;
try
{
//IE7.0 ect
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
}</p>
<p>catch(a)
{
try
{
//ie6.0 ect
xmlhttp=new ActiveXObject("Mscrosoft.XMLHTTP");
}
catch(b)
{
//非IE
xmlhttp=new XMLHttpRequest();
}
}
return xmlhttp;
}
function StateChange()
{
if(xmlhttp.readyState==4&#038;&#038;xmlhttp.status==200)
{
document.getElementById("hei_content").innerHTML=xmlhttp.responseText;
}
}
function UpdateNews()
{
xmlhttp=GetXmlHttp();
xmlhttp.onreadystatechange=StateChange;</p>
<p>var url='Update.php';
url=url+"?sid="+Math.random();
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}
// --></script></div>
<p>showNews.php中的</p>
<div><code lang="php"><br />
echo('</code></div>
<p></code><code lang="php"></p>
<div id="hei_content">');<br />
include('HackNews.htm');<br />
echo('</div>
<p>');</p>
<p></code></p>
<p>　　HackNews.htm是已经缓存的文件,这样不用加载主页上的整个HTML再显示,这个工作留给AJAX</p>
<p>　　document.getElementById(&#8220;hei_content&#8221;).innerHTML=xmlhttp.responseText</p>
<p>　　xmlhttp.responseText就是加载更新后的内容</p>
<p>　　Update.php</p>
<div><code lang="html"><br />
&lt; ?php<br />
$url = 'ImitationIndex.htm';<br />
//file_get_contents（）函数获取网页的html文档<br />
$file = file_get_contents ( $url );<br />
//$regx为正则表达式的内容,用于匹配获取想要的信息<br />
$regx = '</code></div>
<p><code lang="html"></p>
<td colspan="3" height="100" background="http://hack.77169.com/20090220100422648.gif"> </td>
<p> (.*)<br />
&lt; /td&gt;<br />
&lt; /tr&gt;<br />
&lt; /table&gt;<br />
&lt; /td&gt;<br />
&lt; /tr&gt;</p>
<td colspan="3"> </td>
<p> <img src="" alt="" height="8" /> //eregi()获取匹配到的内容,赋值给数组变量$rg;<br />
eregi ( $regx, $file, $rg );<br />
//建立一个新文件HackNews.htm<br />
$newfile = fopen ( 'HackNews.htm', 'w' );<br />
//把内容读取进去<br />
fwrite ( $newfile, $rg [1] );<br />
fclose ( $newfile );<br />
//用iconv编码转换后,输出匹配的HTML内容<br />
$rg [1] = iconv ( 'gb2312', 'utf-8', $rg [1] );<br />
echo ($rg [1]);<br />
?/&gt; </p>
<p>　　Update.php是异步更新的后台页面</p>
<p></code></p>
<p>　　$newfile=fopen(&#8216;HackNews.htm&#8217;,'w&#8217;);</p>
<p>　　fwrite($newfile,$rg[1]);</p>
<p>　　把更新的内容重新保存在HackNews.htm中,下次在index.php中include时就直接调用这个页面</p>
<p>　　$url=&#8217;ImitationIndex.htm&#8217;在实际应用中应该是这样$url=&#8217;http://www.77169.com/&#8217;</p>
<p>　　但为了便于调试,建立一个ImitationIndex.htm模拟页面,如果对ImitationIndex.htm页面中最新资讯中的内容改改,就可以看到实时更新效果。</p>
<p>　　总结:通过AJAX改进的PHP小偷技术,在采集多个网站的大量信息下,页面的加载速度并不会受多大影响。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tisswb.cn/archives/272.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP采集程序中常用的函数</title>
		<link>http://www.tisswb.cn/archives/259.html</link>
		<comments>http://www.tisswb.cn/archives/259.html#comments</comments>
		<pubDate>Sat, 07 Mar 2009 19:52:41 +0000</pubDate>
		<dc:creator>笨二十一</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web技术]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php学习点滴]]></category>

		<guid isPermaLink="false">http://www.tisswb.cn/?p=259</guid>
		<description><![CDATA[网上找到的，给大家总结一下：

//获得当前的脚本网址
function get_php_url(){
        if(!empty($_SERVER["REQUEST_URI"])){
                $scriptName = $_SERVER["REQUEST_URI"];
                $nowurl = $scriptName;
        }else{
                $scriptName = $_SERVER["PHP_SELF"];
                if(empty($_SERVER["QUERY_STRING"])) $nowurl = $scriptName;
<span class="readmore"><a href="http://www.tisswb.cn/archives/259.html" title="PHP采集程序中常用的函数" target="_blank">阅读全文——共2780字</a></span>]]></description>
			<content:encoded><![CDATA[<p>网上找到的，给大家总结一下：<br />
<code lang="php" linenum="on" download="phpcaiji_function.php"><br />
//获得当前的脚本网址<br />
function get_php_url(){<br />
        if(!empty($_SERVER["REQUEST_URI"])){<br />
                $scriptName = $_SERVER["REQUEST_URI"];<br />
                $nowurl = $scriptName;<br />
        }else{<br />
                $scriptName = $_SERVER["PHP_SELF"];<br />
                if(empty($_SERVER["QUERY_STRING"])) $nowurl = $scriptName;<br />
                else $nowurl = $scriptName."?".$_SERVER["QUERY_STRING"];<br />
        }<br />
        return $nowurl;<br />
}<br />
//把全角数字转为半角数字<br />
function GetAlabNum($fnum){<br />
        $nums = array("０","１","２","３","４","５","６","７","８","９");<br />
        $fnums = "0123456789";<br />
        for($i=0;$i< =9;$i++) $fnum = str_replace($nums[$i],$fnums[$i],$fnum);<br />
        $fnum = ereg_replace("[^0-9.]|^0{1,}","",$fnum);<br />
        if($fnum=="") $fnum=0;<br />
        return $fnum;<br />
}<br />
//去除HTML标记<br />
function Text2Html($txt){<br />
        $txt = str_replace("  ","　",$txt);<br />
        $txt = str_replace("<","<",$txt);<br />
        $txt = str_replace(">",">",$txt);<br />
        $txt = preg_replace("/[rn]{1,}/isU","<br />rn",$txt);<br />
        return $txt;<br />
}</p>
<p>//清除HTML标记<br />
function ClearHtml($str){<br />
        $str = str_replace('< ','<',$str);<br />
        $str = str_replace('>','>',$str);<br />
        return $str;<br />
}<br />
//相对路径转化成绝对路径<br />
function relative_to_absolute($content, $feed_url) {<br />
    preg_match('/(http|https|ftp):///', $feed_url, $protocol);<br />
    $server_url = preg_replace("/(http|https|ftp|news):///", "", $feed_url);<br />
    $server_url = preg_replace("//.*/", "", $server_url);</p>
<p>    if ($server_url == '') {<br />
        return $content;<br />
    }</p>
<p>    if (isset($protocol[0])) {<br />
        $new_content = preg_replace('/href="//', 'href="'.$protocol[0].$server_url.'/', $content);<br />
        $new_content = preg_replace('/src="//', 'src="'.$protocol[0].$server_url.'/', $new_content);<br />
    } else {<br />
        $new_content = $content;<br />
    }<br />
    return $new_content;<br />
}<br />
//取得所有链接<br />
function get_all_url($code){<br />
        preg_match_all('/<a s+href=["|']?([^>"' ]+)["|']?s*[^>]*>([^>]+)< /a>/i',$code,$arr);<br />
        return array('name'=>$arr[2],'url'=>$arr[1]);<br />
}</p>
<p>//获取指定标记中的内容<br />
function get_tag_data($str, $start, $end){<br />
        if ( $start == '' || $end == '' ){<br />
               return;<br />
        }<br />
        $str = explode($start, $str);<br />
        $str = explode($end, $str[1]);<br />
        return $str[0];<br />
}<br />
//HTML表格的每行转为CSV格式数组<br />
function get_tr_array($table) {<br />
        $table = preg_replace("'
<td [^>]*?>'si",'"',$table);<br />
        $table = str_replace("</td>
<p>",'",',$table);<br />
        $table = str_replace("","{tr}",$table);<br />
        //去掉 HTML 标记<br />
        $table = preg_replace("'< [/!]*?[^<>]*?>'si","",$table);<br />
        //去掉空白字符<br />
        $table = preg_replace("'([rn])[s]+'","",$table);<br />
        $table = str_replace(" ","",$table);<br />
        $table = str_replace(" ","",$table);</p>
<p>        $table = explode(",{tr}",$table);<br />
        array_pop($table);<br />
        return $table;<br />
}</p>
<p>//将HTML表格的每行每列转为数组，采集表格数据<br />
function get_td_array($table) {<br />
        $table = preg_replace("'<br />
<table [^>]*?>'si","",$table);<br />
        $table = preg_replace("'<br />
<tr [^>]*?>'si","",$table);<br />
        $table = preg_replace("'
<td [^>]*?>'si","",$table);<br />
        $table = str_replace("</td>
</tr>
<p>","{tr}",$table);<br />
        $table = str_replace("","{td}",$table);<br />
        //去掉 HTML 标记<br />
        $table = preg_replace("'< [/!]*?[^<>]*?>'si","",$table);<br />
        //去掉空白字符<br />
        $table = preg_replace("'([rn])[s]+'","",$table);<br />
        $table = str_replace(" ","",$table);<br />
        $table = str_replace(" ","",$table);</p>
<p>        $table = explode('{tr}', $table);<br />
        array_pop($table);<br />
        foreach ($table as $key=>$tr) {<br />
                $td = explode('{td}', $tr);<br />
                array_pop($td);<br />
            $td_array[] = $td;<br />
        }<br />
        return $td_array;<br />
}</p>
<p>//返回字符串中的所有单词 $distinct=true 去除重复<br />
function split_en_str($str,$distinct=true) {<br />
        preg_match_all('/([a-zA-Z]+)/',$str,$match);<br />
        if ($distinct == true) {<br />
                $match[1] = array_unique($match[1]);<br />
        }<br />
        sort($match[1]);<br />
        return $match[1];<br />
}<br />
</table>
<p></a></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tisswb.cn/archives/259.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP学习——获得URL信息的类</title>
		<link>http://www.tisswb.cn/archives/255.html</link>
		<comments>http://www.tisswb.cn/archives/255.html#comments</comments>
		<pubDate>Sat, 07 Mar 2009 19:32:10 +0000</pubDate>
		<dc:creator>笨二十一</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web技术]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php学习点滴]]></category>

		<guid isPermaLink="false">http://www.tisswb.cn/?p=255</guid>
		<description><![CDATA[获取URL信息的类
使用这个类，你能获得URL的如下信息：
- Host
- Path
- Statuscode (eg. 404,200, &#8230;)
- HTTP Version
- Server
- Content Type
- Date
- The whole header string of the URL
<span class="readmore"><a href="http://www.tisswb.cn/archives/255.html" title="PHP学习——获得URL信息的类" target="_blank">阅读全文——共5315字</a></span>]]></description>
			<content:encoded><![CDATA[<p>获取URL信息的类<br />
使用这个类，你能获得URL的如下信息：<br />
- Host<br />
- Path<br />
- Statuscode (eg. 404,200, &#8230;)<br />
- HTTP Version<br />
- Server<br />
- Content Type<br />
- Date<br />
- The whole header string of the URL</p>
<p><code lang="php" linenum="on"><br />
< ?php<br />
/**<br />
 * Class for getting information about URL's<br />
 * @author Sven Wagener <[email]sven.wagener@intertribe.de[/email]><br />
 * @copyright Intertribe limited<br />
 * @PHP中文社区收集整理 [url]www.phpNet.cn[/url]<br />
 * @include Funktion:_include_<br />
 */<br />
class url {<br />
	var $url = "";<br />
	var $url_host;<br />
	var $url_path;<br />
	var $file = "";<br />
	var $code = "";<br />
	var $code_desc = "";<br />
	var $http_version = ""; // Variable for HTTP version<br />
	var $header_stream;<br />
	var $header_array;<br />
	var $timeout = "1";<br />
	/**<br />
	 * Constructor of class url<br />
	 * @param string $url the complete url<br />
	 * @desc Constructor of class url<br />
	 */<br />
	function url($url) {<br />
		$this->url = $url;<br />
		$url_array = parse_url ( $this->url );<br />
		$this->url_host = $url_array ['host'];<br />
		$this->url_path = $url_array ['path'];<br />
		if ($this->url_path == "") {<br />
			$this->url_path = "/";<br />
		}<br />
		$this->refresh_headerinfo ();<br />
	}<br />
	/**<br />
	 * Returns the whole url<br />
	 * @return string $url the whole url<br />
	 * @desc Returns the whole url<br />
	 */<br />
	function get_url() {<br />
		return $this->url;<br />
	}<br />
	/**<br />
	 * Returns the host of the url<br />
	 * @return string $url_host the host of the url<br />
	 * @desc Returns the host of the url<br />
	 */<br />
	function get_url_host() {<br />
		return $this->url_host;<br />
	}<br />
	/**<br />
	 * Returns the path of the url<br />
	 * @return string $url_path the path of the url<br />
	 * @desc Returns the path of the url<br />
	 */<br />
	function get_url_path() {<br />
		return $this->url_path;<br />
	}<br />
	/**<br />
	 * Returns the status code of the url<br />
	 * @return string $status_code the status code<br />
	 * @desc Returns the status code of the url<br />
	 */<br />
	function get_statuscode() {<br />
		return $this->code;<br />
	}<br />
	/**<br />
	 * Returns the status code description of the url<br />
	 * @return string $status_code_desc the status code description<br />
	 * @desc Returns the status code description of the url<br />
	 */<br />
	function get_statuscode_desc() {<br />
		return $this->code_desc;<br />
	}<br />
	/**<br />
	 * Returns the http version of the url by the returned headers of the server<br />
	 * @return string $http_version the http version<br />
	 * @desc Returns the http version of the url by the returned headers of the server<br />
	 */<br />
	function get_info_http_version() {<br />
		return $this->http_version;<br />
	}<br />
	/**<br />
	 * Returns the server type of the url's host by the returned headers of the server<br />
	 * @return string header_array['Server'] the server type<br />
	 * @desc Returns the server type of the url's host by the returned headers of the server<br />
	 */<br />
	function get_info_server() {<br />
		return $this->header_array ['Server'];<br />
	}<br />
	/**<br />
	 * Returns the date of the url's host by the returned headers of the server<br />
	 * @return string $header_array['Date'] the date<br />
	 * @desc Returns the date of the url's host by the returned headers of the server<br />
	 */<br />
	function get_info_date() {<br />
		return $this->header_array ['Date'];<br />
	}<br />
	/*<br />
function get_info_content_length(){<br />
return $this->header_array['Content-Length'];<br />
}<br />
*/<br />
	/**<br />
	 * Returns the content type by the returned headers of the server<br />
	 * @return string header_array['Content-Type'] the content type<br />
	 * @desc Returns the content type by the returned headers of the server<br />
	 */<br />
	function get_info_content_type() {<br />
		return $this->header_array ['Content-Type'];<br />
	}<br />
	/**<br />
	 * Returns the content of the url without the headers<br />
	 * @return string $content the content<br />
	 * @desc Returns the content of the url without the headers<br />
	 */<br />
	function get_content() {<br />
		// Get a web page into a string<br />
		$string = implode ( '', file ( $this->url ) );<br />
		return $string;<br />
	}<br />
	/**<br />
	 * Returns the whole header of url without content<br />
	 * @return string $header the header<br />
	 * @desc Returns the whole header of url without content<br />
	 */<br />
	function get_header_stream() {<br />
		return $this->header_stream;<br />
	}<br />
	/**<br />
	 * Returns the whole headers of the url in an array<br />
	 * @return array $header_array the headers in an array<br />
	 * @desc Returns the whole headers of the url in an array<br />
	 */<br />
	function get_headers() {<br />
		return $this->header_array;<br />
	}<br />
	/**<br />
	 * Refreshes the header information<br />
	 * @desc Refreshes the header information<br />
	 */<br />
	function refresh_headerinfo() {<br />
		// Open socket for connection via port 80 to put headers<br />
		$fp = fsockopen ( $this->url_host, 80, $errno, $errstr, 30 );<br />
		if (! $fp) {<br />
			// echo "$errstr ($errno)";<br />
			if ($errno == 0) {<br />
				$errstr = "Server Not Found";<br />
			}<br />
			$this->code = $errno;<br />
			$this->code_desc = $errstr;<br />
		} else {<br />
			$put_string = "GET " . $this->url_path . " HTTP/1.0rnHost: " . $this->url_host . "rnrn";<br />
			fputs ( $fp, $put_string );<br />
			@socket_set_timeout ( $fp, $this->timeout );<br />
			$stream = "";<br />
			$this->header_array = "";<br />
			$header_end = false;<br />
			// Getting header string and creating header array<br />
			$i = 0;<br />
			while ( ! feof ( $fp ) &#038;&#038; ! $header_end ) {<br />
				$line = fgets ( $fp, 128 );<br />
				if (strlen ( $line ) == 2) {<br />
					$header_end = true;<br />
				} else {<br />
					if ($i == 0) {<br />
						$line1 = $line;<br />
					}<br />
					$stream .= $line;<br />
					$splitted_line = split ( ":", $line );<br />
					$this->header_array [$splitted_line [0]] = $splitted_line [1];<br />
					$i ++;<br />
				}<br />
			}<br />
			fclose ( $fp );<br />
			$this->header_stream = $stream;<br />
			$splitted_stream = split ( " ", $line1 );<br />
			// Getting status code and description of the URL<br />
			$this->code = $splitted_stream [1];<br />
			$this->code_desc = $splitted_stream [2];<br />
			if (count ( $splitted_stream ) > 3) {<br />
				for($i = 3; $i < count ( $splitted_stream ); $i ++) {<br />
					$this->code_desc .= " " . $splitted_stream [$i];<br />
				}<br />
			}<br />
			// Cleaning up for n and r<br />
			$this->code_desc = preg_replace ( "[n]", "", $this->code_desc );<br />
			$this->code_desc = preg_replace ( "[r]", "", $this->code_desc );<br />
			// Getting Http Version<br />
			$http_array = split ( "/", $splitted_stream [0] );<br />
			$this->http_version = $http_array [1];<br />
		}<br />
	}<br />
	/**<br />
	 * Sets the timeout for getting header data from server<br />
	 * @param int $seconds time for timeout in seconds<br />
	 * @desc Sets the timeout for getting header data from server<br />
	 */<br />
	function set_timeout($seconds) {<br />
		$this->timeout = $seconds;<br />
	}<br />
}<br />
?><br />
</code></p>
<p>调用代码：<br />
<code lang="php" linenum="on"><br />
< ?php<br />
include ("url.class.php");<br />
$url = new url ( "[url]http://www.phpNet.cn/[/url]" );<br />
echo $url->get_header_stream ();<br />
$headers = $url->get_headers ();<br />
echo $headers ['Server'];<br />
echo $url->get_content ();<br />
echo "URL: <b>" . $url->get_url () . "</b><br />n";<br />
echo "URL Host: " . $url->get_url_host () . "<br />n";<br />
echo "URL Path: " . $url->get_url_path () . "<br />n<br />n";<br />
echo "Statuscode: " . $url->get_statuscode () . "<br />n";<br />
echo "Statuscode description: " . $url->get_statuscode_desc () . "<br />n";<br />
echo "HTTP Version: " . $url->get_info_http_version () . "<br />n";<br />
echo "Server: " . $url->get_info_server () . "<br />n";<br />
echo "Content Type: " . $url->get_info_content_type () . "<br />n";<br />
echo "Date: " . $url->get_info_date () . "<br />n<br />n";<br />
echo "WHOLE HEADERS:<br />n";<br />
echo $url->get_header_stream ();<br />
?> </code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tisswb.cn/archives/255.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php学习点滴-Failed to initialize storage module解决方法</title>
		<link>http://www.tisswb.cn/archives/119.html</link>
		<comments>http://www.tisswb.cn/archives/119.html#comments</comments>
		<pubDate>Sat, 20 Sep 2008 13:48:53 +0000</pubDate>
		<dc:creator>笨二十一</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web技术]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php学习点滴]]></category>

		<guid isPermaLink="false">http://www.tisswb.cn/?p=119</guid>
		<description><![CDATA[今天更新了一下自己的cms，然后后台就提示登陆不了，报错如下：Failed to initialize storage module。
解决方法有两种如下：
1。在报错的文件里的session start();之前加入如下代码：ini_set(&#8216;session.save_handler&#8217;, &#8216;files&#8217;); 。这种方法适合租用空间的用户使用。
2。在php.ini文件里，显式指定session的save_path(比如 c:/temp)然后重启web服务。如果服务器的管理权限属于你，那还是这样改比较方便。
原因分析：php5一个安全模式的bug，默认session的save_path是系统的临时目录，这样会要校验权限。
]]></description>
			<content:encoded><![CDATA[<p>今天更新了一下自己的cms，然后后台就提示登陆不了，报错如下：Failed to initialize storage module。</p>
<p>解决方法有两种如下：</p>
<p>1。在报错的文件里的session start();之前加入如下代码：ini_set(&#8216;session.save_handler&#8217;, &#8216;files&#8217;); 。这种方法适合租用空间的用户使用。</p>
<p>2。在php.ini文件里，显式指定session的save_path(比如 c:/temp)然后重启web服务。如果服务器的管理权限属于你，那还是这样改比较方便。</p>
<p>原因分析：php5一个安全模式的bug，默认session的save_path是系统的临时目录，这样会要校验权限。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tisswb.cn/archives/119.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php学习点滴-php的函数前的@含义</title>
		<link>http://www.tisswb.cn/archives/114.html</link>
		<comments>http://www.tisswb.cn/archives/114.html#comments</comments>
		<pubDate>Fri, 05 Sep 2008 16:18:21 +0000</pubDate>
		<dc:creator>笨二十一</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web技术]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php学习点滴]]></category>

		<guid isPermaLink="false">http://www.tisswb.cn/?p=114</guid>
		<description><![CDATA[php的函数前的@含义：
例子:$connid=@mysql_connect(&#8220;$hostname&#8221;,&#8221;$dbusename&#8221;,&#8221;$dbpassword&#8221;) or die(&#8220;未连接数据库服务器&#8221;)
其中@表示加到任何函数前，不触发错误提示（如果发生错误的情况下）
]]></description>
			<content:encoded><![CDATA[<p><strong>php的函数前的@含义：</strong></p>
<p>例子:$connid=@mysql_connect(&#8220;$hostname&#8221;,&#8221;$dbusename&#8221;,&#8221;$dbpassword&#8221;) or die(&#8220;未连接数据库服务器&#8221;)</p>
<p>其中@表示加到任何函数前，不触发错误提示（如果发生错误的情况下）</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tisswb.cn/archives/114.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
