<?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://ray.imiddle.net/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://ray.imiddle.net</link>
	<description>狂人的成长史</description>
	<lastBuildDate>Thu, 17 Nov 2011 01:01:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>使用PHP读取Excel文件</title>
		<link>http://ray.imiddle.net/2009/11/how-to-read-the-excel-with-php/</link>
		<comments>http://ray.imiddle.net/2009/11/how-to-read-the-excel-with-php/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 06:28:01 +0000</pubDate>
		<dc:creator>Ray</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[OLE]]></category>

		<guid isPermaLink="false">http://ray.imiddle.net/?p=601</guid>
		<description><![CDATA[可能这应该算得上一个很古老的问题，解决的也有多种多样，不过Internet上比较多的是Excel的保存的范例，所以写一篇如何读取Excel，可能对大家有所帮助。 使用COM接口调用，把Excel应用程序作为一个Server，PHP间接使用Excel来读取文件。 使用PHPExcel的程序包。它的优点不单单读取资料而且可以保存资料为Excel文件，同时还支持Excel 2007的格式。方法就是把Excel看作一个普通的Excel文件读取。 还有一种是PHP Excel Reader，它把Excel文件看作一个二进制文件读取，不过不支持新版本Excel文件。 方法2可能看起来不错，不过当你在读取资料大比较大的文件时，会有一个致命的缺点：内存溢出。因为它必须把整个Excel读入内存。有点像XML的DOM接口，不清楚是否有类型XML的SAX的方法。 方法3有类似方法2内存溢出的问题，同时对新版的支持较差。 方法1应该是属于非常传统的方式，只有支持COM程序接口就可。同时只有你能用当前安装的Excel打开此文件，你就可以通过COM接口读取文件。缺点就是你必须在你的电脑上安装Excel。不过对于大文件现在只能使用这个方法。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 $doc = &#34;test.xls&#34; ; $excel_app = new COM&#40;&#34;Excel.Application&#34;, NULL, CP_UTF8&#41; or die &#40;&#34;Please install the Excel. \n&#34;&#41;; &#160; #$excel_app-&#62;Visible = 1; $workbook = [...]]]></description>
			<content:encoded><![CDATA[<p>可能这应该算得上一个很古老的问题，解决的也有多种多样，不过Internet上比较多的是Excel的保存的范例，所以写一篇如何读取Excel，可能对大家有所帮助。</p>
<ol>
<li>使用COM接口调用，把Excel应用程序作为一个Server，PHP间接使用Excel来读取文件。</li>
<li>使用<a href="http://www.phpexcel.net/" target="_blank">PHPExcel</a>的程序包。它的优点不单单读取资料而且可以保存资料为Excel文件，同时还支持Excel 2007的格式。方法就是把Excel看作一个普通的Excel文件读取。</li>
<li>还有一种是<a href="http://sourceforge.net/projects/phpexcelreader">PHP Excel Reader</a>，它把Excel文件看作一个二进制文件读取，不过不支持新版本Excel文件。</li>
</ol>
<p>方法2可能看起来不错，不过当你在读取资料大比较大的文件时，会有一个致命的缺点：内存溢出。因为它必须把整个Excel读入内存。有点像XML的DOM接口，不清楚是否有类型XML的SAX的方法。</p>
<p>方法3有类似方法2内存溢出的问题，同时对新版的支持较差。</p>
<p>方法1应该是属于非常传统的方式，只有支持COM程序接口就可。同时只有你能用当前安装的Excel打开此文件，你就可以通过COM接口读取文件。缺点就是你必须在你的电脑上安装Excel。不过对于大文件现在只能使用这个方法。</p>

<div class="wp_syntax"><table><tr><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
21
22
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$doc</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;test.xls&quot;</span> <span style="color: #339933;">;</span>
<span style="color: #000088;">$excel_app</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> COM<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Excel.Application&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">NULL</span><span style="color: #339933;">,</span> CP_UTF8<span style="color: #009900;">&#41;</span> or <span style="color: #990000;">die</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Please install the Excel. <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#$excel_app-&gt;Visible = 1;
</span>
<span style="color: #000088;">$workbook</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$excel_app</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Workbooks</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Open</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$doc</span><span style="color: #009900;">&#41;</span> or <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Can't open &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$doc</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$worksheet</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$workbook</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">WorkSheets</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$worksheet</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">activate</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$min_row</span>    <span style="color: #339933;">=</span> <span style="color: #000088;">$worksheet</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">UsedRange</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Row</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$min_col</span>    <span style="color: #339933;">=</span> <span style="color: #000088;">$worksheet</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">UsedRange</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Column</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$max_row</span>    <span style="color: #339933;">=</span> <span style="color: #000088;">$worksheet</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">UsedRange</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Rows</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Count</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$max_col</span>    <span style="color: #339933;">=</span> <span style="color: #000088;">$worksheet</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">UsedRange</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Columns</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Count</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$min_row</span> <span style="color: #339933;">;</span> <span style="color: #000088;">$row</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$max_row</span><span style="color: #339933;">;</span> <span style="color: #000088;">$row</span> <span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$column</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$min_col</span> <span style="color: #339933;">;</span> <span style="color: #000088;">$column</span> <span style="color: #339933;">&lt;=</span> <span style="color: #000088;">$max_col</span><span style="color: #339933;">;</span> <span style="color: #000088;">$column</span> <span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
       <span style="color: #000088;">$value</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$worksheet</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Cells</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span><span style="color: #339933;">,</span> <span style="color: #000088;">$column</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">value</span><span style="color: #339933;">;</span>
       <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$value</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000088;">$excel_app</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Workbooks</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$excel_app</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Quit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://ray.imiddle.net/2009/11/how-to-read-the-excel-with-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework 1.9发布</title>
		<link>http://ray.imiddle.net/2009/08/zend-framework-19-released/</link>
		<comments>http://ray.imiddle.net/2009/08/zend-framework-19-released/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 03:49:17 +0000</pubDate>
		<dc:creator>Ray</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://ray.imiddle.net/?p=576</guid>
		<description><![CDATA[感觉现在Zend Framework 更新了很快，可能和日益受到关注有关。不知不觉中已经发布到了1.9版本。 更新的内容可以查看：http://devzone.zend.com/article/4906-Zend-Framework-1.9.0-Released 我对Zend_Test_PHPUnit_Db和Zend_Queue比较感兴趣，特别是Zend_Queue的支持，特别是加入了对MemcacheQ的原生支持。 有空学习一下这些新内容，感觉Zend Framework在逐渐缩短和RoR之间的差距。在新版本发布之际，更新一下Zend Framework的帮助chm. 中文Chm: http://ray.imiddle.net/download/zend_framework_1_9_cn.chm 英文Chm: http://ray.imiddle.net/download/zend_framework_1_9_en.chm]]></description>
			<content:encoded><![CDATA[<p>感觉现在Zend Framework 更新了很快，可能和日益受到关注有关。不知不觉中已经发布到了1.9版本。</p>
<p>更新的内容可以查看：<a href="http://devzone.zend.com/article/4906-Zend-Framework-1.9.0-Released">http://devzone.zend.com/article/4906-Zend-Framework-1.9.0-Released</a></p>
<p>我对<code>Zend_Test_PHPUnit_Db和</code><code>Zend_Queue比较感兴趣，特别是Zend_Queue的支持，特别是加入了对</code>MemcacheQ的原生支持。</p>
<p>有空学习一下这些新内容，感觉Zend Framework在逐渐缩短和RoR之间的差距。在新版本发布之际，更新一下Zend Framework的帮助chm.</p>
<ul>
<li>中文Chm: <a href="http://ray.imiddle.net/download/zend_framework_1_9_cn.chm">http://ray.imiddle.net/download/zend_framework_1_9_cn.chm</a></li>
<li>英文Chm: <a href="http://ray.imiddle.net/download/zend_framework_1_9_en.chm">http://ray.imiddle.net/download/zend_framework_1_9_en.chm</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ray.imiddle.net/2009/08/zend-framework-19-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用PHP来动态生成CSS/JS</title>
		<link>http://ray.imiddle.net/2009/03/generate-css-js-with-php/</link>
		<comments>http://ray.imiddle.net/2009/03/generate-css-js-with-php/#comments</comments>
		<pubDate>Fri, 06 Mar 2009 07:37:17 +0000</pubDate>
		<dc:creator>Ray</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Apache]]></category>

		<guid isPermaLink="false">http://ray.imiddle.net/?p=531</guid>
		<description><![CDATA[对于一个网站其实很多时候都需要对动态的生成所使用的CSS/JS，其中主要是CSS/JS中所包含的一些URL，当然这些URL信息也可以使用相对路径来实现，但在一些情况下使用相对路径并不能解决这个难题。 按照Yahoo YSlow（http://developer.yahoo.com/yslow/help）的建议1，就是必须减少HTTP的请求，当然手动把所有代码合并是一种方法，但这种方法反而会带来两个更糟的问题，把所有CSS/JS都合并到一个文件中，当然不利于代码的阅读和管理。如果使用jQuery，因为不同的Plugin都是会放在不同的js文件中，和Yahoo YSlow的建议有较大的冲突，当然是用动态语言来合并这些js文件应该是个不错的idea。合并过程中还可以使用jsmin.php来进行js文件的压缩。 如想使用这个技术可参考以下的几篇说明： Automatic merging and versioning of CSS/JS files with PHP Adding JSMin to my CSS/JS merging script (这篇写了一般，其实有更好的方法来做) GZip files with .htaccess and PHP (这篇是说明如何对输出的PHP内容进行GZip的压缩，因为动态文件无法使用Apache 的 GZIP的库来压缩，所以为了节省传递数据必须在PHP中把输出内容进行压缩)。]]></description>
			<content:encoded><![CDATA[<p>对于一个网站其实很多时候都需要对动态的生成所使用的CSS/JS，其中主要是CSS/JS中所包含的一些URL，当然这些URL信息也可以使用相对路径来实现，但在一些情况下使用相对路径并不能解决这个难题。</p>
<p>按照Yahoo YSlow（<a href="http://developer.yahoo.com/yslow/help">http://developer.yahoo.com/yslow/help</a>）的建议1，就是必须减少HTTP的请求，当然手动把所有代码合并是一种方法，但这种方法反而会带来两个更糟的问题，把所有CSS/JS都合并到一个文件中，当然不利于代码的阅读和管理。如果使用jQuery，因为不同的Plugin都是会放在不同的js文件中，和Yahoo YSlow的建议有较大的冲突，当然是用动态语言来合并这些js文件应该是个不错的idea。合并过程中还可以使用jsmin.php来进行js文件的压缩。</p>
<p>如想使用这个技术可参考以下的几篇说明：</p>
<ol>
<li><a href="http://www.ejeliot.com/blog/72" target="_blank">Automatic merging and versioning of CSS/JS files with PHP</a></li>
<li><a href="http://www.ejeliot.com/blog/73">Adding JSMin to my CSS/JS merging script</a> (这篇写了一般，其实有更好的方法来做<a href="http://www.ejeliot.com/blog/73">)</a></li>
<li><a href="http://www.lateralcode.com/2008/12/gzip-files-with-htaccess-and-php/" target="_blank">GZip files with .htaccess and PHP</a> (这篇是说明如何对输出的PHP内容进行GZip的压缩，因为动态文件无法使用Apache 的 GZIP的库来压缩，所以为了节省传递数据必须在PHP中把输出内容进行压缩)。</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://ray.imiddle.net/2009/03/generate-css-js-with-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>为PHP脚本添加utf-8编码支持</title>
		<link>http://ray.imiddle.net/2008/11/add-utf-8-charset-for-php-script/</link>
		<comments>http://ray.imiddle.net/2008/11/add-utf-8-charset-for-php-script/#comments</comments>
		<pubDate>Fri, 07 Nov 2008 09:15:12 +0000</pubDate>
		<dc:creator>Ray</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[utf-8]]></category>

		<guid isPermaLink="false">http://ray.imiddle.net/?p=505</guid>
		<description><![CDATA[方法1： 修改.htacces文件或者httpd.conf，添加一行AddCharset UTF-8 .php 方法2: 使用header函数，添加如下代码：header(“Content-Type: text/html; charset=utf-8&#8243;); 方法3: 使用HTML的meta标签：添加如下代码: &#60;meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8&#8243;&#62;]]></description>
			<content:encoded><![CDATA[<p>方法1：</p>
<p style="padding-left: 30px;">修改.htacces文件或者httpd.conf，添加一行AddCharset UTF-8 .php</p>
<p>方法2:</p>
<p style="padding-left: 30px;">使用header函数，添加如下代码：header(“Content-Type: text/html; charset=utf-8&#8243;);</p>
<p>方法3:</p>
<p style="padding-left: 30px;">使用HTML的meta标签：添加如下代码: &lt;meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8&#8243;&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://ray.imiddle.net/2008/11/add-utf-8-charset-for-php-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>搜索机器人的PHP代码</title>
		<link>http://ray.imiddle.net/2008/10/search-robot/</link>
		<comments>http://ray.imiddle.net/2008/10/search-robot/#comments</comments>
		<pubDate>Tue, 21 Oct 2008 06:57:30 +0000</pubDate>
		<dc:creator>Ray</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Robots]]></category>
		<category><![CDATA[Spider]]></category>

		<guid isPermaLink="false">http://ray.imiddle.net/?p=502</guid>
		<description><![CDATA[/** * 判断是否为搜索引擎蜘蛛 * * @access public * @return string */ function is_spider($record = true) { static $spider = NULL; if ($spider !== NULL) { return $spider; } if (empty($_SERVER['HTTP_USER_AGENT'])) { $spider = ''; return ''; } $searchengine_bot = array( 'googlebot', 'mediapartners-google', 'baiduspider+', 'msnbot', 'yodaobot', 'yahoo! slurp;', 'yahoo! slurp china;', 'iaskspider', 'sogou web spider', 'sogou [...]]]></description>
			<content:encoded><![CDATA[<pre name="code" class="php">
/**
* 判断是否为搜索引擎蜘蛛
*
* @access  public
* @return  string
*/
function is_spider($record = true)
{
    static $spider = NULL;
    if ($spider !== NULL)
    {
        return $spider;

    }
    if (empty($_SERVER['HTTP_USER_AGENT']))
    {
        $spider = '';
        return '';
    }

    $searchengine_bot = array(
        'googlebot',
        'mediapartners-google',
        'baiduspider+',
        'msnbot',
        'yodaobot',
        'yahoo! slurp;',
        'yahoo! slurp china;',
        'iaskspider',
        'sogou web spider',
        'sogou push spider',
        'feedfetcher-google',
        'yahoofeedseeker'
    );

    $searchengine_name = array(
        'GOOGLE',
        'GOOGLE ADSENSE',
        'BAIDU',
        'MSN',
        'YODAO',
        'YAHOO',
        'Yahoo China',
        'IASK',
        'SOGOU',
        'SOGOU',
        'Feedfetcher-Google',
        'YahooFeedSeeker'
    );

    $spider = strtolower($_SERVER['HTTP_USER_AGENT']);
    foreach ( $searchengine_bot AS $key => $value)
    {
        if (strpos($spider, $value) !== false)
        {
            $spider = $searchengine_name[$key];
            if ($record === true)
            {
            // do something
            }
            return $spider;
        }
    }
    $spider = '';
    return '';
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://ray.imiddle.net/2008/10/search-robot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UTF8编码规则</title>
		<link>http://ray.imiddle.net/2008/10/utf8-encode-rul/</link>
		<comments>http://ray.imiddle.net/2008/10/utf8-encode-rul/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 13:55:53 +0000</pubDate>
		<dc:creator>Ray</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[UTF8]]></category>

		<guid isPermaLink="false">http://ray.imiddle.net/?p=492</guid>
		<description><![CDATA[utf-8为变长编码, 编码规则如下: Binary Hexadecimal Decimal Width 00000000-01111111 00-7F 0-127 1 byte 11000010-11011111 C2-DF 194-223 2 bytes 11100000-11101111 E0-EF 224-239 3 bytes 11110000-11110100 F0-F4 240-244 4 bytes PHP中有以下的函数在操作utf-8字符串时会不安全，具体参考此链接：http://www.phpwact.org/php/i18n/utf-8和http://www.phpwact.org/php/i18n/charsets。 不过所以的问题在PHP6中将都会成为过去，PHP6中会原生的支持utf-8字符集，不过感觉慢了点。觉得.Net和Java早已解决了这类问题，毕竟为了支持多国语言，UTF-8必将成为Web编码的标准。]]></description>
			<content:encoded><![CDATA[<p>utf-8为变长编码, 编码规则如下:</p>
<table style="text-align: center;" border="1" border-color="#CCCCCC" cell-space="2">
<tbody>
<tr>
<th>Binary</th>
<th>Hexadecimal</th>
<th>Decimal</th>
<th>Width</th>
</tr>
<tr>
<td>00000000-01111111</td>
<td>00-7F</td>
<td>0-127</td>
<td>1 byte</td>
</tr>
<tr>
<td>11000010-11011111</td>
<td>C2-DF</td>
<td>194-223</td>
<td>2 bytes</td>
</tr>
<tr>
<td>11100000-11101111</td>
<td>E0-EF</td>
<td>224-239</td>
<td>3 bytes</td>
</tr>
<tr>
<td>11110000-11110100</td>
<td>F0-F4</td>
<td>240-244</td>
<td>4 bytes</td>
</tr>
</tbody>
</table>
<p>PHP中有以下的函数在操作utf-8字符串时会不安全，具体参考此链接：<a href="http://www.phpwact.org/php/i18n/utf-8" target="_blank">http://www.phpwact.org/php/i18n/utf-8</a>和<a href="http://www.phpwact.org/php/i18n/charsets" target="_blank">http://www.phpwact.org/php/i18n/charsets</a>。<a href="http://www.phpwact.org/php/i18n/charsets" target="_blank"><br />
</a>不过所以的问题在PHP6中将都会成为过去，PHP6中会原生的支持utf-8字符集，不过感觉慢了点。觉得.Net和Java早已解决了这类问题，毕竟为了支持多国语言，UTF-8必将成为Web编码的标准。</p>
]]></content:encoded>
			<wfw:commentRss>http://ray.imiddle.net/2008/10/utf8-encode-rul/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP5.3中新增的常量__DIR__</title>
		<link>http://ray.imiddle.net/2008/07/constant_dir_in_php_53/</link>
		<comments>http://ray.imiddle.net/2008/07/constant_dir_in_php_53/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 05:47:05 +0000</pubDate>
		<dc:creator>Ray</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ray.imiddle.net/?p=477</guid>
		<description><![CDATA[在PHP中有一个常量__FILE__，它主要用来指向当前执行的PHP脚本。但PHP没有直接提供该脚本所在目录的常量。也就是说如果我们要得到当前PHP脚本所在的目录，需要使用dirname()这个函数： &#60;?php $dir = dirname(__FILE__); ?&#62; 现在在PHP5.3中会增加了一个新的常量__DIR__，你可以通过此常量来取得当前执行的PHP脚本所在的目录。 例如当前执行的PHP文件为 /htdocs/index.php，则__FILE__等于&#8217;/htdocs/index.php&#8217;，而__DIR__等于&#8217;/htdocs&#8217;。 不过最大的缺点还是现在有多少空间服务商支持PHP5.3呢？]]></description>
			<content:encoded><![CDATA[<p>在PHP中有一个常量__FILE__，它主要用来指向当前执行的PHP脚本。但PHP没有直接提供该脚本所在目录的常量。也就是说如果我们要得到当前PHP脚本所在的目录，需要使用dirname()这个函数：</p>
<pre name="code" class="php">
&lt;?php
$dir = dirname(__FILE__);
?&gt;
</pre>
<p>现在在PHP5.3中会增加了一个新的常量__DIR__，你可以通过此常量来取得当前执行的PHP脚本所在的目录。<br />
例如当前执行的PHP文件为 /htdocs/index.php，则__FILE__等于&#8217;/htdocs/index.php&#8217;，而__DIR__等于&#8217;/htdocs&#8217;。</p>
<p>不过最大的缺点还是现在有多少空间服务商支持PHP5.3呢？</p>
]]></content:encoded>
			<wfw:commentRss>http://ray.imiddle.net/2008/07/constant_dir_in_php_53/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>设置PHP的Magic Quotes</title>
		<link>http://ray.imiddle.net/2008/07/php-magic-quotes-setting/</link>
		<comments>http://ray.imiddle.net/2008/07/php-magic-quotes-setting/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 05:48:06 +0000</pubDate>
		<dc:creator>Ray</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[随笔]]></category>
		<category><![CDATA[magic quotes]]></category>

		<guid isPermaLink="false">http://ray.imiddle.net/?p=467</guid>
		<description><![CDATA[Magic Quotes在原来设计时可能是为了减轻开发人员的开发工作量，不过最后去反而成为了开发人员的一个噩梦，在不同的PHP环境下，由于Magic Quotes设置的不同，造成了相同的代码却产生了完全不同的结果。明明在开发环境中运行正常，但在最终的运行环境中，内容会莫名其妙的多出一些单引号。最终使得PHP设计师们也不得不在PHP6中把此些设定值取消，把最终的控制权重新还给开发人员。 但现在毕竟还是PHP5的时间，还有很多的服务器依然还在运行着PHP4，等待PHP6的完全商业看来还是有一段时间的。那如何让我们来避免这次噩梦呢？ 方法1: 如果你使用的是Dedicated Server，那可以修改系统etc下面的php.ini，不过这种方法使用几率应该不大，使用phpinfo()可以查看修改的效果。 方法2: 修改你的Virtual Host里etc/目录中的php.ini，一些比较成熟的服务商基本上可以这样修改，使用Local Value覆盖系统的Master Value，使用phpinfo()可以查看修改的效果。 方法3: 如果方法2都不行时，可以使用此方法，修改.htaccess，在.htaccess文件中设置php_flag magic_quotes_gpc off，这样也能把magic quotes 关闭。不过文件最好放在最上层的目录中，否则未覆盖到目录，可能设置无效，这种方法必须使用ini_get去查看实际修改结果。]]></description>
			<content:encoded><![CDATA[<p>Magic Quotes在原来设计时可能是为了减轻开发人员的开发工作量，不过最后去反而成为了开发人员的一个噩梦，在不同的PHP环境下，由于Magic Quotes设置的不同，造成了相同的代码却产生了完全不同的结果。明明在开发环境中运行正常，但在最终的运行环境中，内容会莫名其妙的多出一些单引号。最终使得PHP设计师们也不得不在PHP6中把此些设定值取消，把最终的控制权重新还给开发人员。</p>
<p>但现在毕竟还是PHP5的时间，还有很多的服务器依然还在运行着PHP4，等待PHP6的完全商业看来还是有一段时间的。那如何让我们来避免这次噩梦呢？</p>
<p><strong>方法1:</strong></p>
<p>如果你使用的是Dedicated Server，那可以修改系统etc下面的php.ini，不过这种方法使用几率应该不大，使用phpinfo()可以查看修改的效果。</p>
<p><strong>方法2:</strong></p>
<p>修改你的Virtual Host里etc/目录中的php.ini，一些比较成熟的服务商基本上可以这样修改，使用Local Value覆盖系统的Master Value，使用phpinfo()可以查看修改的效果。</p>
<p><strong>方法3:</strong></p>
<p>如果方法2都不行时，可以使用此方法，修改.htaccess，在.htaccess文件中设置php_flag magic_quotes_gpc off，这样也能把magic quotes 关闭。不过文件最好放在最上层的目录中，否则未覆盖到目录，可能设置无效，这种方法必须使用ini_get去查看实际修改结果。</p>
]]></content:encoded>
			<wfw:commentRss>http://ray.imiddle.net/2008/07/php-magic-quotes-setting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework中如何让View和Controller关联</title>
		<link>http://ray.imiddle.net/2008/07/bind-view-and-controller-in-the-zend-framework/</link>
		<comments>http://ray.imiddle.net/2008/07/bind-view-and-controller-in-the-zend-framework/#comments</comments>
		<pubDate>Thu, 03 Jul 2008 15:45:03 +0000</pubDate>
		<dc:creator>Ray</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://ray.imiddle.net/?p=461</guid>
		<description><![CDATA[$view = new Zend_View(); $view-&#62;setEncoding('utf-8'); $view-&#62;doctype('XHTML1_STRICT'); $view-&#62;headTitle('title'); $view-&#62;headScript() -&#62;appendFile('/scripts/jquery/jquery-min.js') -&#62;appendFile('/scripts/thickbox/thickbox.js'); $view-&#62;headStyle()-&#62;appendStyle('/styles/main.css') -&#62;appendStyle('/styles/default.css') -&#62;appendStyle('/styles/thickbox.css') -&#62;appendStyle('/styles/ie6.css'); $view-&#62;addHelperPath('../application/default/views/helpers'); $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view); Zend_Controller_Action_HelperBroker::addHelper($viewRenderer); Zend Framework的官方文档说明还是比较详尽的，不过关于如何整合MVC的例子还是少了些。以上的代码实现了Zend Framework中的View和Cotroller的关联。慢慢再介绍在View或者View Helper中如何获取Controller的实例。]]></description>
			<content:encoded><![CDATA[<pre name="code" class="php">$view = new Zend_View();
$view-&gt;setEncoding('utf-8');
$view-&gt;doctype('XHTML1_STRICT');
$view-&gt;headTitle('title');
$view-&gt;headScript()
-&gt;appendFile('/scripts/jquery/jquery-min.js')
-&gt;appendFile('/scripts/thickbox/thickbox.js');
$view-&gt;headStyle()-&gt;appendStyle('/styles/main.css')
-&gt;appendStyle('/styles/default.css')
-&gt;appendStyle('/styles/thickbox.css')
-&gt;appendStyle('/styles/ie6.css');
$view-&gt;addHelperPath('../application/default/views/helpers');
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);</pre>
<p>Zend Framework的官方文档说明还是比较详尽的，不过关于如何整合MVC的例子还是少了些。以上的代码实现了Zend Framework中的View和Cotroller的关联。慢慢再介绍在View或者View Helper中如何获取Controller的实例。</p>
]]></content:encoded>
			<wfw:commentRss>http://ray.imiddle.net/2008/07/bind-view-and-controller-in-the-zend-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Studio for Eclipse 6.01</title>
		<link>http://ray.imiddle.net/2008/06/zend-studio-for-eclipse-601/</link>
		<comments>http://ray.imiddle.net/2008/06/zend-studio-for-eclipse-601/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 13:35:02 +0000</pubDate>
		<dc:creator>Ray</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Studio]]></category>

		<guid isPermaLink="false">http://ray.imiddle.net/?p=456</guid>
		<description><![CDATA[今天把我的Zend Studio 进行了升级，从原来的6.0版本升级到了6.01版。简单的从UI上看和原来版本没啥区别，想升级主要因为此版本集成了Zend Framework 1.52，这样自己就不用手动集成1.5版。其实那时也挺纳闷的，当6.0版发布时，Zend Framework 1.5也已经发布了，为何那是不一步到位，还得折腾我的硬盘。 具体更新功能如下： Updated Zend Framework support including Zend Framework 1.5.2 Improved Code formatter Improved Debugger performance New GUI translations for German, French and Italian Improved Code folding Updated Added PHP extensions for PHP binary on Windows 新增功能6其实也非常诱人，如果Zend Studio中不支持扩展，真的挺难想象PHPUnit还能测试些啥。不过折腾了半天，我的PHPUnit测试还是报“You cannot serialize or unserialize PDO instances”，在命令行运行时完全正常。看来还是继续命令行测试吧。 如有兴趣下载测试，点击这个地址。http://downloads.zend.com/studio-eclipse/6.0.1/ZendStudioForEclipse-6_0_1.exe]]></description>
			<content:encoded><![CDATA[<p>今天把我的Zend Studio 进行了升级，从原来的6.0版本升级到了6.01版。简单的从UI上看和原来版本没啥区别，想升级主要因为此版本集成了Zend Framework 1.52，这样自己就不用手动集成1.5版。其实那时也挺纳闷的，当6.0版发布时，Zend Framework 1.5也已经发布了，为何那是不一步到位，还得折腾我的硬盘。</p>
<p>具体更新功能如下：</p>
<ol>
<li><span style="font-weight: bold;">Updated</span> Zend Framework support including Zend Framework 1.5.2</li>
<li><span style="font-weight: bold;">Improved</span> Code formatter</li>
<li><span style="font-weight: bold;">Improved</span> Debugger performance</li>
<li><span style="font-weight: bold;">New</span> GUI translations for German, French and Italian</li>
<li><span style="font-weight: bold;">Improved</span> Code folding</li>
<li><span style="font-weight: bold;">Updated</span> Added PHP extensions for PHP binary on Windows</li>
</ol>
<p>新增功能6其实也非常诱人，如果Zend Studio中不支持扩展，真的挺难想象PHPUnit还能测试些啥。不过折腾了半天，我的PHPUnit测试还是报“You cannot serialize or unserialize PDO instances”，在命令行运行时完全正常。看来还是继续命令行测试吧。</p>
<p>如有兴趣下载测试，点击这个地址。<a href="http://downloads.zend.com/studio-eclipse/6.0.1/ZendStudioForEclipse-6_0_1.exe">http://downloads.zend.com/studio-eclipse/6.0.1/ZendStudioForEclipse-6_0_1.exe</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ray.imiddle.net/2008/06/zend-studio-for-eclipse-601/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

