<?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>码农的生活</title>
	<atom:link href="http://www.61php.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.61php.com</link>
	<description>卢逸phper</description>
	<lastBuildDate>Fri, 20 May 2016 06:20:48 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.41</generator>
	<item>
		<title>61php 框架正式开源</title>
		<link>http://www.61php.com/?p=124</link>
		<comments>http://www.61php.com/?p=124#comments</comments>
		<pubDate>Fri, 20 May 2016 06:20:48 +0000</pubDate>
		<dc:creator><![CDATA[卢逸]]></dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.61php.com/?p=124</guid>
		<description><![CDATA[https://git.oschina.net/61php/PHP-framework-61php 源地址]]></description>
				<content:encoded><![CDATA[<p>https://git.oschina.net/61php/PHP-framework-61php</p>
<p>源地址</p>
]]></content:encoded>
			<wfw:commentRss>http://www.61php.com/?feed=rss2&#038;p=124</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于微信开发者中心，服务器配置token验证失败。</title>
		<link>http://www.61php.com/?p=116</link>
		<comments>http://www.61php.com/?p=116#comments</comments>
		<pubDate>Tue, 10 Nov 2015 08:35:47 +0000</pubDate>
		<dc:creator><![CDATA[卢逸]]></dc:creator>
				<category><![CDATA[weChat]]></category>

		<guid isPermaLink="false">http://www.61php.com/?p=116</guid>
		<description><![CDATA[今天碰到这样的问题，程序没有任何问题，网站防火墙已经全部关闭，但是提交服务器配置时死活不过token验证。 &#038;... <a href="http://www.61php.com/?p=116">Continue Reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>今天碰到这样的问题，程序没有任何问题，网站防火墙已经全部关闭，但是提交服务器配置时死活不过token验证。</p>
<p>&nbsp;</p>
<p>解决方法</p>
<p>在保证自己的程序与token没问题的情况下，尝试程序脚本的编码格式。我是原本是 无bom的urf8编码。但是不行。</p>
<p>我将脚本文件的编码改为 ANSI 格式一次就过了。</p>
<p>仅供借鉴。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.61php.com/?feed=rss2&#038;p=116</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sql joins图示</title>
		<link>http://www.61php.com/?p=112</link>
		<comments>http://www.61php.com/?p=112#comments</comments>
		<pubDate>Mon, 21 Sep 2015 01:34:18 +0000</pubDate>
		<dc:creator><![CDATA[卢逸]]></dc:creator>
				<category><![CDATA[Mysql]]></category>

		<guid isPermaLink="false">http://www.61php.com/?p=112</guid>
		<description><![CDATA[]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.61php.com/wp-content/uploads/2015/09/1.png"><img class="alignnone size-medium wp-image-113" src="http://www.61php.com/wp-content/uploads/2015/09/1.png" alt="1" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.61php.com/?feed=rss2&#038;p=112</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP判断客户端是否使用代理服务器及其匿名级别</title>
		<link>http://www.61php.com/?p=107</link>
		<comments>http://www.61php.com/?p=107#comments</comments>
		<pubDate>Fri, 18 Sep 2015 08:37:49 +0000</pubDate>
		<dc:creator><![CDATA[卢逸]]></dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.61php.com/?p=107</guid>
		<description><![CDATA[要判断客户端是否使用代理服务器，可以从客户端所发送的环境变量信息来判断。 具体来说，就是看HTTP_VIA字段... <a href="http://www.61php.com/?p=107">Continue Reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>要判断客户端是否使用代理服务器，可以从客户端所发送的环境变量信息来判断。<br />
具体来说，就是看HTTP_VIA字段，如果这个字段设置了，说明客户端使用了代理服务器。<br />
匿名级别可以参考下表来判断。</p>
<p>一、没有使用代理服务器的情况：<br />
REMOTE_ADDR = 您的 IP<br />
HTTP_VIA = 没数值或不显示<br />
HTTP_X_FORWARDED_FOR = 没数值或不显示</p>
<p>二、使用透明代理服务器的情况：Transparent Proxies<br />
REMOTE_ADDR = 代理服务器 IP<br />
HTTP_VIA = 代理服务器 IP (补充：这个字段由代理服务器填充，有时会填充网关信息等)<br />
HTTP_X_FORWARDED_FOR = 您的真实 IP<br />
这类代理服务器还是将您的信息转发给您的访问对象，无法达到隐藏真实身份的目的。</p>
<p>三、使用普通匿名代理服务器的情况：Anonymous Proxies<br />
REMOTE_ADDR = 代理服务器 IP<br />
HTTP_VIA = 代理服务器 IP (补充：这个字段由代理服务器填充，有时会填充网关信息等)<br />
HTTP_X_FORWARDED_FOR = 代理服务器 IP<br />
隐藏了您的真实IP，但是向访问对象透露了您是使用代理服务器访问他们的。</p>
<p>四、使用欺骗性代理服务器的情况：Distorting Proxies<br />
REMOTE_ADDR = 代理服务器 IP<br />
HTTP_VIA = 代理服务器 IP  (补充：这个字段由代理服务器填充，有时会填充网关信息等)<br />
HTTP_X_FORWARDED_FOR = 随机的 IP<br />
告诉了访问对象您使用了代理服务器，但编造了一个虚假的随机IP代替您的真实IP欺骗它。</p>
<p>五、使用高匿名代理服务器的情况：High Anonymity Proxies<br />
REMOTE_ADDR = 代理服务器 IP<br />
HTTP_VIA = 没数值或不显示<br />
HTTP_X_FORWARDED_FOR = 没数值或不显示<br />
完全用代理服务器的信息替代了您的所有信息，就象您就是完全使用那台代理服务器直接访问对象。<br />
除此之外，可以通过proxy judges总 结其他一些可供参考的判定信息，一遍于在实践中加以利用。</p>
<p>最后写一个php例子,仅供大家参考:</p>

<div class="wp_codebox"><table><tr id="p1072"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code" id="p107code2"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><a href="http://www.php.net/empty"><span style="color: #990000;">empty</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_VIA'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>    <span style="color: #666666; font-style: italic;">//使用了代理</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_X_FORWARDED_FOR'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//Anonymous Proxies    普通匿名代理服务器</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//代理IP地址为 $_SERVER['REMOTE_ADDR']</span>
&nbsp;
   <span style="color: #009900;">&#125;</span>
   <span style="color: #b1b100;">else</span>
   <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//Transparent Proxies 透明代理服务器</span>
        <span style="color: #666666; font-style: italic;">//代理IP地址为 $_SERVER['REMOTE_ADDR']</span>
        <span style="color: #666666; font-style: italic;">//真实ip地址为 $_SERVER['HTTP_X_FORWARDED_FOR']</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span>    <span style="color: #666666; font-style: italic;">//没有代理或者是高匿名代理</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">//真实ip地址为 $_SERVER['REMOTE_ADDR']</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.61php.com/?feed=rss2&#038;p=107</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql ip转换函数</title>
		<link>http://www.61php.com/?p=105</link>
		<comments>http://www.61php.com/?p=105#comments</comments>
		<pubDate>Fri, 18 Sep 2015 03:27:40 +0000</pubDate>
		<dc:creator><![CDATA[卢逸]]></dc:creator>
				<category><![CDATA[Mysql]]></category>

		<guid isPermaLink="false">http://www.61php.com/?p=105</guid>
		<description><![CDATA[1、用mysql内置函数转换ip地址和数字 利用两个内置函数 inet_aton:将ip地址转换成数字型 in... <a href="http://www.61php.com/?p=105">Continue Reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<div>1、用mysql内置函数转换ip地址和数字<br />
利用两个内置函数<br />
inet_aton:将ip地址转换成数字型<br />
inet_ntoa:将数字型转换成ip地址</div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.61php.com/?feed=rss2&#038;p=105</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP正则表达式模式修饰符 /i, /is, /s, /isU等</title>
		<link>http://www.61php.com/?p=94</link>
		<comments>http://www.61php.com/?p=94#comments</comments>
		<pubDate>Fri, 07 Aug 2015 07:49:30 +0000</pubDate>
		<dc:creator><![CDATA[卢逸]]></dc:creator>
				<category><![CDATA[Regex]]></category>

		<guid isPermaLink="false">http://www.61php.com/?p=94</guid>
		<description><![CDATA[模式修饰符 下面列出了当前可用的 PCRE 修饰符。括号中提到的名字是 PCRE 内部这些修饰符的名称。 模式... <a href="http://www.61php.com/?p=94">Continue Reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<div id="reference.pcre.pattern.modifiers" class="article">
<h1>模式修饰符</h1>
<p class="para">下面列出了当前可用的 PCRE 修饰符。括号中提到的名字是 PCRE 内部这些修饰符的名称。 模式修饰符中的空格，换行符会被忽略，其他字符会导致错误。</p>
<blockquote class="blockquote"><dl>
<dt><span class="term"><em class="emphasis">i</em> (<em>PCRE_CASELESS</em>)</span></dt>
</dl>
</blockquote>
<p><span class="simpara">如果设置了这个修饰符，模式中的字母会进行大小写不敏感匹配。 </span><span class="term"><em class="emphasis">m</em> (<em>PCRE_MULTILINE</em>)</span><span class="simpara">默认情况下，PCRE 认为目标字符串是由单行字符组成的(然而实际上它可能会包含多行)， &#8220;行首&#8221;元字符 (^) 仅匹配字符串的开始位置， 而&#8221;行末&#8221;元字符 ($) 仅匹配字符串末尾， 或者最后的换行符(除非设置了 <em class="emphasis">D</em> 修饰符)。这个行为和 perl 相同。 </span><span class="simpara">当这个修饰符设置之后，“行首”和“行末”就会匹配目标字符串中任意换行符之前或之后，另外， 还分别匹配目标字符串的最开始和最末尾位置。这等同于 perl 的 /m 修饰符。如果目标字符串 中没有 &#8220;\n&#8221; 字符，或者模式中没有出现 ^ 或 $，设置这个修饰符不产生任何影响。 </span><span class="term"><em class="emphasis">s</em> (<em>PCRE_DOTALL</em>)</span><span class="simpara">如果设置了这个修饰符，模式中的点号元字符匹配所有字符，包含换行符。如果没有这个 修饰符，点号不匹配换行符。这个修饰符等同于 perl 中的/s修饰符。 一个取反字符类比如 [^a] 总是匹配换行符，而不依赖于这个修饰符的设置。 </span><span class="term"><em class="emphasis">x</em> (<em>PCRE_EXTENDED</em>)</span><span class="simpara">如果设置了这个修饰符，模式中的没有经过转义的或不在字符类中的空白数据字符总会被忽略， 并且位于一个未转义的字符类外部的#字符和下一个换行符之间的字符也被忽略。 这个修饰符 等同于 perl 中的 /x 修饰符，使被编译模式中可以包含注释。 注意：这仅用于数据字符。 空白字符 还是不能在模式的特殊字符序列中出现，比如序列 (?( 引入了一个条件子组(译注: 这种语法定义的 特殊字符序列中如果出现空白字符会导致编译错误。 比如(?(就会导致错误)。 </span><span class="term"><em class="emphasis">e</em> (<em>PREG_REPLACE_EVAL</em>)</span><span class="simpara">如果这个修饰符设置了， <span class="function"><a class="function" href="http://docs.php.net/manual/zh/function.preg-replace.php">preg_replace()</a></span> 在进行了对替换字符串的 后向引用替换之后, 将替换后的字符串作为php 代码评估执行(eval 函数方式)，并使用执行结果 作为实际参与替换的字符串。单引号、双引号、反斜线(<em>\</em>)和 NULL 字符在 后向引用替换时会被用反斜线转义. </span></p>
<div class="caution">
<p><strong class="caution">Caution</strong></p>
<p class="para">The <span class="function"><a class="function" href="http://docs.php.net/manual/zh/function.addslashes.php">addslashes()</a></span> function is run on each matched backreference before the substitution takes place. As such, when the backreference is used as a quoted string, escaped characters will be converted to literals. However, characters which are escaped, which would normally not be converted, will retain their slashes. This makes use of this modifier very complicated.</p>
</div>
<div class="caution">
<p><strong class="caution">Caution</strong></p>
<p class="para">请确保 <em><code class="parameter">replacement</code></em> 参数由合法 php 代码字符串组成，否则 php 将会 在 <span class="function"><a class="function" href="http://docs.php.net/manual/zh/function.preg-replace.php">preg_replace()</a></span> 调用的行上产生一个解释错误。</p>
</div>
<div class="caution">
<p><strong class="caution">Caution</strong></p>
<p class="para">Use of this modifier is <em class="emphasis">discouraged</em>, as it can easily introduce security vulnerabilites:</p>
<div class="informalexample">
<div class="example-contents">
<div class="phpcode"><code><span style="color: #000000;"><span style="color: #0000bb;">&lt;?php<br />
$html </span><span style="color: #007700;">= </span><span style="color: #0000bb;">$_POST</span><span style="color: #007700;">[</span><span style="color: #dd0000;">'html'</span><span style="color: #007700;">];</p>
<p></span><span style="color: #ff8000;">// uppercase headings<br />
</span><span style="color: #0000bb;">$html </span><span style="color: #007700;">= </span><span style="color: #0000bb;">preg_replace</span><span style="color: #007700;">(<br />
</span><span style="color: #dd0000;">'(&lt;h([1-6])&gt;(.*?)&lt;/h\1&gt;)e'</span><span style="color: #007700;">,<br />
</span><span style="color: #dd0000;">'"&lt;h$1&gt;" . strtoupper("$2") . "&lt;/h$1&gt;"'</span><span style="color: #007700;">,<br />
</span><span style="color: #0000bb;">$html<br />
</span><span style="color: #007700;">);</span> </span></code></div>
</div>
</div>
<p class="para">The above example code can be easily exploited by passing in a string such as <em>&lt;h1&gt;{${eval($_GET[php_code])}}&lt;/h1&gt;</em>. This gives the attacker the ability to execute arbitrary PHP code and as such gives him nearly complete access to your server.</p>
<p class="para">To prevent this kind of remote code execution vulnerability the <span class="function"><a class="function" href="http://docs.php.net/manual/zh/function.preg-replace-callback.php">preg_replace_callback()</a></span> function should be used instead:</p>
<div class="informalexample">
<div class="example-contents">
<div class="phpcode"><code><span style="color: #000000;"><span style="color: #0000bb;">&lt;?php<br />
$html </span><span style="color: #007700;">= </span><span style="color: #0000bb;">$_POST</span><span style="color: #007700;">[</span><span style="color: #dd0000;">'html'</span><span style="color: #007700;">];</p>
<p></span><span style="color: #ff8000;">// uppercase headings<br />
</span><span style="color: #0000bb;">$html </span><span style="color: #007700;">= </span><span style="color: #0000bb;">preg_replace_callback</span><span style="color: #007700;">(<br />
</span><span style="color: #dd0000;">'(&lt;h([1-6])&gt;(.*?)&lt;/h\1&gt;)'</span><span style="color: #007700;">,<br />
function (</span><span style="color: #0000bb;">$m</span><span style="color: #007700;">) {<br />
return </span><span style="color: #dd0000;">"&lt;h</span><span style="color: #0000bb;">$m</span><span style="color: #007700;">[</span><span style="color: #0000bb;">1</span><span style="color: #007700;">]</span><span style="color: #dd0000;">&gt;" </span><span style="color: #007700;">. </span><span style="color: #0000bb;">strtoupper</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$m</span><span style="color: #007700;">[</span><span style="color: #0000bb;">2</span><span style="color: #007700;">]) . </span><span style="color: #dd0000;">"&lt;/h</span><span style="color: #0000bb;">$m</span><span style="color: #007700;">[</span><span style="color: #0000bb;">1</span><span style="color: #007700;">]</span><span style="color: #dd0000;">&gt;"</span><span style="color: #007700;">;<br />
},<br />
</span><span style="color: #0000bb;">$html<br />
</span><span style="color: #007700;">);</span> </span></code></div>
</div>
</div>
</div>
<blockquote class="note"><p><strong class="note">Note</strong>:</p>
<p class="para">仅 <span class="function"><a class="function" href="http://docs.php.net/manual/zh/function.preg-replace.php">preg_replace()</a></span> 使用此修饰符，其他 PCRE 函数忽略此修饰符。</p>
</blockquote>
<p><span class="term"><em class="emphasis">A</em> (<em>PCRE_ANCHORED</em>)</span><span class="simpara">如果设置了这个修饰符，模式被强制为&#8221;锚定&#8221;模式，也就是说约束匹配使其仅从 目标字符串的开始位置搜索。这个效果同样可以使用适当的模式构造出来，并且 这也是 perl 种实现这种模式的唯一途径。 </span><span class="term"><em class="emphasis">D</em> (<em>PCRE_DOLLAR_ENDONLY</em>)</span><span class="simpara">如果这个修饰符被设置，模式中的元字符美元符号仅仅匹配目标字符串的末尾。如果这个修饰符 没有设置，当字符串以一个换行符结尾时， 美元符号还会匹配该换行符(但不会匹配之前的任何换行符)。 如果设置了修饰符<em class="emphasis">m</em>，这个修饰符被忽略. 在 perl 中没有与此修饰符等同的修饰符。 </span><span class="term"><em class="emphasis">S</em></span><span class="simpara">当一个模式需要多次使用的时候，为了得到匹配速度的提升，值得花费一些时间 对其进行一些额外的分析。如果设置了这个修饰符，这个额外的分析就会执行。当前， 这种对一个模式的分析仅仅适用于非锚定模式的匹配(即没有单独的固定开始字符)。 </span><span class="term"><em class="emphasis">U</em> (<em>PCRE_UNGREEDY</em>)</span><span class="simpara">这个修饰符逆转了量词的&#8221;贪婪&#8221;模式。 使量词默认为非贪婪的，通过量词后紧跟<em>?</em> 的方式可以使其成为贪婪的。这和 perl 是不兼容的。 它同样可以使用 <a class="link" href="http://docs.php.net/manual/zh/regexp.reference.internal-options.php">模式内修饰符设置</a> (<em>?U</em>)进行设置， 或者在量词后以问号标记其非贪婪(比如<em>.*?</em>)。 </span></p>
<blockquote class="note"><p><strong class="note">Note</strong>:</p>
<p class="para">在非贪婪模式，通常不能匹配超过 <a class="link" href="http://docs.php.net/manual/zh/pcre.configuration.php#ini.pcre.backtrack-limit">pcre.backtrack_limit</a> 的字符。</p>
</blockquote>
<p><span class="term"><em class="emphasis">X</em> (<em>PCRE_EXTRA</em>)</span><span class="simpara">这个修饰符打开了 PCRE 与 perl 不兼容的附件功能。模式中的任意反斜线后就 ingen 一个 没有特殊含义的字符都会导致一个错误，以此保留这些字符以保证向后兼容性。 默认情况下，在 perl 中，反斜线紧跟一个没有特殊含义的字符被认为是该字符的原文。 当前没有其他特性由这个修饰符控制。 </span><span class="term"><em class="emphasis">J</em> (<em>PCRE_INFO_JCHANGED</em>)</span><span class="simpara">内部选项设置(?J)修改本地的<em>PCRE_DUPNAMES</em>选项。允许子组重名， (译注：只能通过内部选项设置，外部的 /J 设置会产生错误。) </span><span class="term"><em class="emphasis">u</em> (<em>PCRE_UTF8</em>)</span><span class="simpara">此修正符打开一个与 perl 不兼容的附加功能。 模式字符串被认为是utf-8的. 这个修饰符 从 unix 版php 4.1.0 或更高，win32版 php 4.2.3 开始可用。 php 4.3.5 开始检查模式的 utf-8 合法性。 </span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.61php.com/?feed=rss2&#038;p=94</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP接口类interface的正确使用方法</title>
		<link>http://www.61php.com/?p=88</link>
		<comments>http://www.61php.com/?p=88#comments</comments>
		<pubDate>Fri, 17 Jul 2015 05:36:26 +0000</pubDate>
		<dc:creator><![CDATA[卢逸]]></dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.61php.com/?p=88</guid>
		<description><![CDATA[对于那些初学PHP语言的人来说，对于PHP的接口类也许了解的还不是很深入，接下来我们就来具体讲述PHP接口类i... <a href="http://www.61php.com/?p=88">Continue Reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>对于那些初学PHP语言的人来说，对于PHP的接口类也许了解的还不是很深入，接下来我们就来具体讲述PHP接口类interface的使用方法。</p>
<p>其实他们的作用很简单，当有很多人一起开发一个项目时，可能都会去调用别人写的一些类，那你就会问，我怎么知道他的某个功能的实现方法是怎么命名的呢，这个时候PHP接口类interface就起到作用了，当我们定义了一个接口类时，它里面的方式是下面的子类必须实现的，比如 :</p>

<div class="wp_codebox"><table><tr id="p885"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p88code5"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">interface</span> Shop  
<span style="color: #009900;">&#123;</span>  
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> buy<span style="color: #009900;">&#40;</span><span style="color: #000088;">$gid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> sell<span style="color: #009900;">&#40;</span><span style="color: #000088;">$gid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> view<span style="color: #009900;">&#40;</span><span style="color: #000088;">$gid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>我声明一个shop接口类，定义了三个方法：买(buy),卖(sell),看(view),那么继承此类的所有子类都必须实现这3个方法少一个都不行，如果子类没有实现这些话，就无法运行。实际上接口类说白了，就是一个类的模板，一个类的规定，如果你属于这类，你就必须遵循我的规定，少一个都不行，但是具体你怎么去做，我不管，那是你的事，如：</p>

<div class="wp_codebox"><table><tr id="p886"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code" id="p88code6"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> BaseShop implements Shop  
<span style="color: #009900;">&#123;</span>  
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> buy<span style="color: #009900;">&#40;</span><span style="color: #000088;">$gid</span><span style="color: #009900;">&#41;</span>  
    <span style="color: #009900;">&#123;</span>  
        <span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'你购买了ID为 :'</span><span style="color: #339933;">.</span><span style="color: #000088;">$gid</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'的商品'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
    <span style="color: #009900;">&#125;</span>  
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> sell<span style="color: #009900;">&#40;</span><span style="color: #000088;">$gid</span><span style="color: #009900;">&#41;</span>  
    <span style="color: #009900;">&#123;</span>  
        <span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'你卖了ID为 :'</span><span style="color: #339933;">.</span><span style="color: #000088;">$gid</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'的商品'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
    <span style="color: #009900;">&#125;</span>  
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> view<span style="color: #009900;">&#40;</span><span style="color: #000088;">$gid</span><span style="color: #009900;">&#41;</span>  
    <span style="color: #009900;">&#123;</span>  
        <span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'你查看了ID为 :'</span><span style="color: #339933;">.</span><span style="color: #000088;">$gid</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'的商品'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
    <span style="color: #009900;">&#125;</span>  
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>你想想，在一个多人合作的大项目里面，有了接口类是多么的方便，这样你就不用去问别人，你的某某功能的方法名是什么了，当然如果你们喜欢这样我也没有办法。</p>
<p>结论 ： PHP接口类interface就是一个类的领导者，指明方向，子类必须完成它指定方法。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.61php.com/?feed=rss2&#038;p=88</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php浮点数判断BUG</title>
		<link>http://www.61php.com/?p=72</link>
		<comments>http://www.61php.com/?p=72#comments</comments>
		<pubDate>Tue, 12 May 2015 08:26:01 +0000</pubDate>
		<dc:creator><![CDATA[卢逸]]></dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.61php.com/?p=72</guid>
		<description><![CDATA[最近一个朋友碰到个问题,比较神奇 1 2 3 4 5 6 7 var_dump&#40;is_float&#4... <a href="http://www.61php.com/?p=72">Continue Reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>最近一个朋友碰到个问题,比较神奇</p>

<div class="wp_codebox"><table><tr id="p729"><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code" id="p72code9"><pre class="php" style="font-family:monospace;"><a href="http://www.php.net/var_dump"><span style="color: #990000;">var_dump</span></a><span style="color: #009900;">&#40;</span><a href="http://www.php.net/is_float"><span style="color: #990000;">is_float</span></a><span style="color: #009900;">&#40;</span><span style="color:#800080;">1.1</span><span style="color: #339933;">+</span><span style="color:#800080;">0.1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.php.net/var_dump"><span style="color: #990000;">var_dump</span></a><span style="color: #009900;">&#40;</span><a href="http://www.php.net/is_float"><span style="color: #990000;">is_float</span></a><span style="color: #009900;">&#40;</span><span style="color:#800080;">1.2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color:#800080;">1.2</span> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span><span style="color: #009900;">&#40;</span><span style="color:#800080;">1.1</span><span style="color: #339933;">+</span><span style="color:#800080;">0.1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;true&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;false&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>结果是 true<br />
网上查了一下，原因如下</p>
<p>如果用php的+-*/计算浮点数时，可能会遇到一些计算结果错误的问题，比如echo intval( 0.58*100 );会打印57，而不是58，这个其实是计算机底层二进制无法精确表示浮点数的一个bug，是跨语言的</p>
<p>那么运算浮点数用一些php特有的运算函数<br />
例如 bcadd() 把两个浮点数相加</p>

<div class="wp_codebox"><table><tr id="p7210"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p72code10"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color:#800080;">1.2</span> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>bcadd<span style="color: #009900;">&#40;</span><span style="color:#800080;">1.1</span><span style="color: #339933;">,</span><span style="color:#800080;">0.1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;true&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;false&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><a href="http://www.61php.com/wp-content/uploads/2015/05/QQ图片20150512163947.png"><img class="alignnone size-medium wp-image-77" src="http://www.61php.com/wp-content/uploads/2015/05/QQ图片20150512163947.png" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.61php.com/?feed=rss2&#038;p=72</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>希望儿子健康成长</title>
		<link>http://www.61php.com/?p=68</link>
		<comments>http://www.61php.com/?p=68#comments</comments>
		<pubDate>Mon, 04 May 2015 03:30:57 +0000</pubDate>
		<dc:creator><![CDATA[卢逸]]></dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.61php.com/?p=68</guid>
		<description><![CDATA[]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.61php.com/wp-content/uploads/2015/05/untitled.png"><img class="alignnone size-medium wp-image-69" src="http://www.61php.com/wp-content/uploads/2015/05/untitled-169x300.png" alt="untitled" width="169" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.61php.com/?feed=rss2&#038;p=68</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>身份证校验码计算公式及实例计算</title>
		<link>http://www.61php.com/?p=61</link>
		<comments>http://www.61php.com/?p=61#comments</comments>
		<pubDate>Thu, 23 Apr 2015 01:59:30 +0000</pubDate>
		<dc:creator><![CDATA[卢逸]]></dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.61php.com/?p=61</guid>
		<description><![CDATA[校验码是识别一个身份证号码是否真实存在的重要的依据。那我们要如何通过校验码来判断一个身份证号码是否真实的呢？ ... <a href="http://www.61php.com/?p=61">Continue Reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>校验码是识别一个身份证号码是否真实存在的重要的依据。那我们要如何通过校验码来判断一个身份证号码是否真实的呢？</p>
<p>校验码如何判断身份证号码真伪呢？我们来看看具体计划过程。</p>
<p>第一步：将身份证号码的第1位数字与7相乘；将身份证号码的第2位数字与9相乘；将身份证号码的第3位数字与10相乘；将身份证号码的第4位数字与5相乘；将身份证号码的第5位数字与8相乘；将身份证号码的第6位数字与4相乘；将身份证号码的第7位数字与2相乘；将身份证号码的第8位数字与1相乘；将身份证号码的第9位数字与6相乘；将身份证号码的第10位数字与3相乘；将身份证号码的第11位数字与7相乘；将身份证号码的第12位数字与9相乘；将身份证号码的第13位数字与10相乘；将身份证号码的第14位数字与5相乘；将身份证号码的第15位数字与8相乘；将身份证号码的第16位数字与4相乘；将身份证号码的第17位数字与2相乘。</p>
<p>第二步：将第一步身份证号码1~17位相乘的结果求和，全部加起来。</p>
<p>第三步：用第二步计算出来的结果除以11，这样就会出现余数为0，余数为1，余数为2，余数为3，余数为4，余数为5，余数为6，余数为7，余数为8，余数为9，余数为10共11种可能性。</p>
<p>第四步：如果余数为0，那对应的最后一位身份证的号码为1；如果余数为1，那对应的最后一位身份证的号码为0；如果余数为2，那对应的最后一位身份证的号码为X；如果余数为3，那对应的最后一位身份证的号码为9；如果余数为4，那对应的最后一位身份证的号码为8；如果余数为5，那对应的最后一位身份证的号码为7；如果余数为6，那对应的最后一位身份证的号码为6；如果余数为7，那对应的最后一位身份证的号码为5；如果余数为8，那对应的最后一位身份证的号码为4；如果余数为9，那对应的最后一位身份证的号码为3；如果余数为10，那对应的最后一位身份证的号码为2。</p>
<p>比如： 身份证号码 432831196411150810  这个身份证是否是有效身份证号码呢？请看校验码分析。</p>
<p><a href="http://www.61php.com/wp-content/uploads/2015/04/7ac880510fb30f24807bdc6aca95d143ac4b03b2.jpg"><img class="alignnone size-medium wp-image-64" src="http://www.61php.com/wp-content/uploads/2015/04/7ac880510fb30f24807bdc6aca95d143ac4b03b2.jpg" alt="7ac880510fb30f24807bdc6aca95d143ac4b03b2" /></a></p>
<p>校验码是0，身份证号码 432831196411150810中最后一位是0，所以这是一个有效的身份证号码。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.61php.com/?feed=rss2&#038;p=61</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
