<?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/"
	>

<channel>
	<title>疯人醉语</title>
	<atom:link href="http://fengzi.org/feed" rel="self" type="application/rss+xml" />
	<link>http://fengzi.org</link>
	<description>且听这疯人醉语，笑看那潮起花落。</description>
	<pubDate>Mon, 14 Jun 2010 16:48:28 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>关于NGINX 502 BAD-GATEWAY 和 NINGX 504 GATEWAY TIME-OUT的形象比喻</title>
		<link>http://fengzi.org/about-nginx-502-bad-gatewa-y-and-ningx-504-gateway-time-out-image-of-metaphor.html</link>
		<comments>http://fengzi.org/about-nginx-502-bad-gatewa-y-and-ningx-504-gateway-time-out-image-of-metaphor.html#comments</comments>
		<pubDate>Wed, 10 Feb 2010 01:18:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[程序人生]]></category>

		<category><![CDATA[502]]></category>

		<category><![CDATA[504]]></category>

		<category><![CDATA[BAD GATEWAY]]></category>

		<category><![CDATA[Gateway Time-out]]></category>

		<category><![CDATA[niginx]]></category>

		<guid isPermaLink="false">http://fengzi.org/?p=118</guid>
		<description><![CDATA[对于NGINX的爱好者来说，常常会把NGINX 502 BAD-GATEWAY 和 NINGX 504 GATEWAY TIME-OUT混淆，也就是搞不懂NGINX 502 BAD-GATEWAY 和 NINGX 504 GATEWAY TIME-OUT的真正含义。
下面我给出一个形象的比喻，有助于大家理解。
NGINX 502 BAD-GATEWAY说的是PHP-CGI脚本太累了，已经生病住院了，不能做任何事情了，所以它放弃了手头的工作，给它安排的工作它也做不了；
而NINGX 504 GATEWAY TIME-OUT说的是PHP-CGI只是很累很累，不能再做任何多余的安排了，目前只能做手头的工作，但是还没有生病，还没有进医院。所以在给它安排工作它也做不了。
总的来说NINGX 504 GATEWAY TIME-OUT没有NGINX 502 BAD-GATEWAY严重，NGINX504说明服务器很繁忙，而NGINX 502 BAD-GATEWAY说明PHP-CGI的脚本已经出问题了。这样大家就方便理解了。
]]></description>
			<content:encoded><![CDATA[<p>对于NGINX的爱好者来说，常常会把NGINX 502 BAD-GATEWAY 和 NINGX 504 GATEWAY TIME-OUT混淆，也就是搞不懂NGINX 502 BAD-GATEWAY 和 NINGX 504 GATEWAY TIME-OUT的真正含义。</p>
<p>下面我给出一个形象的比喻，有助于大家理解。</p>
<p>NGINX 502 BAD-GATEWAY说的是PHP-CGI脚本太累了，已经生病住院了，不能做任何事情了，所以它放弃了手头的工作，给它安排的工作它也做不了；</p>
<p>而NINGX 504 GATEWAY TIME-OUT说的是PHP-CGI只是很累很累，不能再做任何多余的安排了，目前只能做手头的工作，但是还没有生病，还没有进医院。所以在给它安排工作它也做不了。</p>
<p>总的来说NINGX 504 GATEWAY TIME-OUT没有NGINX 502 BAD-GATEWAY严重，NGINX504说明服务器很繁忙，而NGINX 502 BAD-GATEWAY说明PHP-CGI的脚本已经出问题了。这样大家就方便理解了。</p>
]]></content:encoded>
			<wfw:commentRss>http://fengzi.org/about-nginx-502-bad-gatewa-y-and-ningx-504-gateway-time-out-image-of-metaphor.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>WHY? 初次使用新浪SAE的感受[原创]</title>
		<link>http://fengzi.org/why-initial-use-of-the-feelings-of-sina-sae.html</link>
		<comments>http://fengzi.org/why-initial-use-of-the-feelings-of-sina-sae.html#comments</comments>
		<pubDate>Thu, 04 Feb 2010 08:26:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[程序人生]]></category>

		<category><![CDATA[SEA]]></category>

		<category><![CDATA[sina]]></category>

		<category><![CDATA[文档]]></category>

		<category><![CDATA[新浪]]></category>

		<category><![CDATA[测试]]></category>

		<guid isPermaLink="false">http://fengzi.org/?p=113</guid>
		<description><![CDATA[今天有幸试用了一下新浪的SAE，新浪官方的介绍如下：
Sina App Engine(SAE)，是由新浪公司开发和运营的开放云计算平台的核心组成部分。
SAE的目标是实现互联网应用在开发运维上的无缝整合，为App开发者提供稳定、快捷、透明、可控的服务化的平台，并且减少开发者的开发和维护成本。
同时通过对消耗资源的量化，反向作用于开发过程，促进新浪公司互联网应用服务的质量提升。
首先是探针演示：http://asdf.sinaapp.com ，可以看出支持的组件很少
其次从官方给出的文档来看，大概是自定义了一些预定义变量和修改了一些常用函数。
禁用的函数和类如下：
禁用函数

2010年2月1日解禁函数
fprintf,fscanf,ftruncate,fflush,fwrite,fputs,tempnam,file_put_contents,
fputcsv,error_reporting,phpinfo,copy,rename,phpcredits,gzputs,gzwrite,
gzpassthru
2009年10月8日追加禁用函数
gzputs,gzwrite,gzpassthru,openlog,syslog,closelog
最新禁用函数列表
php_logo_guid,php_real_logo_guid,php_egg_logo_guid,zend_logo_guid,
php_sapi_name,php_uname,php_ini_scanned_files,php_ini_loaded_file,readlink,
linkinfo,symlink,link,unlink,exec,system,escapeshellcmd,escapeshellarg,passthru,shell_exec,
proc_open,proc_close,proc_terminate,proc_get_status,proc_nice,getmyuid,getmygid,getmypid,
getmyinode,putenv,getopt,sys_getloadavg,getrusage,get_current_user,set_time_limit,
get_cfg_var,magic_quotes_runtime,set_magic_quotes_runtime,get_magic_quotes_gpc,
get_magic_quotes_runtime,import_request_variables,error_log,error_get_last,debug_zval_dump,
ini_get,ini_get_all,ini_set,ini_alter,ini_restore,get_include_path,set_include_path,
restore_include_path,move_uploaded_file,dl,pclose,popen,rewind,rmdir,umask,fpassthru,
mkdir,stream_select,stream_context_create,stream_context_set_params,stream_context_set_option,
stream_context_get_options,stream_context_get_default,stream_filter_prepend,
stream_filter_append,stream_filter_remove,stream_socket_client,stream_socket_server,
stream_socket_accept,stream_socket_get_name,stream_socket_recvfrom,stream_socket_sendto,
stream_socket_enable_crypto,stream_socket_shutdown,stream_socket_pair,stream_copy_to_stream,
stream_get_contents,stream_set_write_buffer,set_file_buffer,set_socket_blocking,
stream_set_blocking,socket_set_blocking,stream_get_meta_data,stream_get_line,
stream_wrapper_register,stream_register_wrapper,stream_wrapper_unregister,stream_wrapper_restore,
stream_get_wrappers,stream_get_transports,stream_is_local,get_headers,stream_set_timeout,
socket_set_timeout,socket_get_status,mail,apc_add,apc_cache_info,apc_clear_cache,apc_compile_file,
apc_define_constants,apc_delete,apc_fetch,apc_load_constants,apc_sma_info,apc_store,flock,tmpfile

禁用class

XMLWriter,DOMDocument,DOMNotation,DOMXPath,PDOException,PDO,PDOStatement,PDORow,SQLiteDatabase,
SQLiteResult,SQLiteUnbuffered,SQLiteException


可以替代的函数（部分）如下：


file_put_contents用$f = new SaeFetchurl();
$img = $f-&#62;fetch('a url of a img');来代替


imagecreatefromgif等一系列图片函数用类似如下的CLASS来代替





 $f = new SaeFetchurl();




 $img_data = $f-&#62;fetch( &#8216;http://ss7.sinaimg.cn/bmiddle/488efcbbt7b5c4ae51ca6&#38;690&#8242; );


 $img = new SaeImage();


 $img-&#62;setData( $img_data );


 $img-&#62;resize(200); // 等比缩放到200宽


 $img-&#62;flipH(); // 水平翻转


 $img-&#62;flipv(); // 垂直翻转


 $new_data = $img-&#62;exec(); // 执行处理并返回处理后的二进制数据


 // 或者可以直接输出


 $img-&#62;exec( &#8216;jpg&#8217; , true )


还有其他的细节就不一一列出。
这样做的好处我自己总结了一下，就是首先通过自建函数库（这种函数都是及其占用资源的）来通过统一的中央引擎来高效处理，并且可以节省服务器开销，提高服务器安全。但是缺点是显而易见的，把所有PHP的原有定义改成新浪的SAE形式的话无疑是一个浩大的工程，而且其必要性也有待于考证。诸如很多占用服务器资源的问题可以通过提高硬件的性能来解决。
还有一点就是说一下这个SAE的BUG或者说是另一种限制吧，以前写PHP脚本的时候我们可以使用&#60;? &#8230;?&#62;这种形式，但是在SAE下我们必须使用&#60;?php &#8230; ?&#62;这种形式，否则不会认为是PHP文件。
总的来说用两个字来总结新浪的SEA就是折腾，不过这也符合中国人的思维习惯。
]]></description>
			<content:encoded><![CDATA[<p>今天有幸试用了一下新浪的SAE，新浪官方的介绍如下：</p>
<blockquote><p>Sina App Engine(SAE)，是由新浪公司开发和运营的开放云计算平台的核心组成部分。</p>
<p>SAE的目标是实现互联网应用在开发运维上的无缝整合，为App开发者提供稳定、快捷、透明、可控的服务化的平台，并且减少开发者的开发和维护成本。</p>
<p>同时通过对消耗资源的量化，反向作用于开发过程，促进新浪公司互联网应用服务的质量提升。</p></blockquote>
<p>首先是探针演示：<a href="http://asdf.sinaapp.com">http://asdf.sinaapp.com</a> ，可以看出支持的组件很少</p>
<p>其次从官方给出的文档来看，大概是自定义了一些预定义变量和修改了一些常用函数。</p>
<p>禁用的函数和类如下：</p>
<h2><a id="禁用函数" name="禁用函数">禁用函数</a></h2>
<div class="level2">
<p>2010年2月1日解禁函数</p>
<pre class="code">fprintf,fscanf,ftruncate,fflush,fwrite,fputs,tempnam,file_put_contents,
fputcsv,error_reporting,phpinfo,copy,rename,phpcredits,gzputs,gzwrite,
gzpassthru</pre>
<p>2009年10月8日追加禁用函数</p>
<pre class="code">gzputs,gzwrite,gzpassthru,openlog,syslog,closelog</pre>
<p>最新禁用函数列表</p>
<pre class="code">php_logo_guid,php_real_logo_guid,php_egg_logo_guid,zend_logo_guid,
php_sapi_name,php_uname,php_ini_scanned_files,php_ini_loaded_file,readlink,
linkinfo,symlink,link,unlink,exec,system,escapeshellcmd,escapeshellarg,passthru,shell_exec,
proc_open,proc_close,proc_terminate,proc_get_status,proc_nice,getmyuid,getmygid,getmypid,
getmyinode,putenv,getopt,sys_getloadavg,getrusage,get_current_user,set_time_limit,
get_cfg_var,magic_quotes_runtime,set_magic_quotes_runtime,get_magic_quotes_gpc,
get_magic_quotes_runtime,import_request_variables,error_log,error_get_last,debug_zval_dump,
ini_get,ini_get_all,ini_set,ini_alter,ini_restore,get_include_path,set_include_path,
restore_include_path,move_uploaded_file,dl,pclose,popen,rewind,rmdir,umask,fpassthru,
mkdir,stream_select,stream_context_create,stream_context_set_params,stream_context_set_option,
stream_context_get_options,stream_context_get_default,stream_filter_prepend,
stream_filter_append,stream_filter_remove,stream_socket_client,stream_socket_server,
stream_socket_accept,stream_socket_get_name,stream_socket_recvfrom,stream_socket_sendto,
stream_socket_enable_crypto,stream_socket_shutdown,stream_socket_pair,stream_copy_to_stream,
stream_get_contents,stream_set_write_buffer,set_file_buffer,set_socket_blocking,
stream_set_blocking,socket_set_blocking,stream_get_meta_data,stream_get_line,
stream_wrapper_register,stream_register_wrapper,stream_wrapper_unregister,stream_wrapper_restore,
stream_get_wrappers,stream_get_transports,stream_is_local,get_headers,stream_set_timeout,
socket_set_timeout,socket_get_status,mail,apc_add,apc_cache_info,apc_clear_cache,apc_compile_file,
apc_define_constants,apc_delete,apc_fetch,apc_load_constants,apc_sma_info,apc_store,flock,tmpfile</pre>
</div>
<h2><a id="禁用class" name="禁用class">禁用class</a></h2>
<div class="level2">
<pre class="code">XMLWriter,DOMDocument,DOMNotation,DOMXPath,PDOException,PDO,PDOStatement,PDORow,SQLiteDatabase,
SQLiteResult,SQLiteUnbuffered,SQLiteException</pre>
</div>
<div class="level2">
<pre class="code">可以替代的函数（部分）如下：</pre>
</div>
<div class="level2">
<pre class="code">file_put_contents用$f = new SaeFetchurl();
$img = $f-&gt;fetch('a url of a img');来代替</pre>
</div>
<div class="level2">
<pre class="code">imagecreatefromgif等一系列图片函数用类似如下的CLASS来代替</pre>
</div>
<ol>
<li>
<pre class="code">
<li>
<div class="src-line"> <span class="src-var">$f </span>= <span class="src-key">new </span><span class="src-id">SaeFetchurl</span><span class="src-sym">(</span><span class="src-sym">)</span><span class="src-sym">;</span></div>
</li>
</pre>
</li>
<li>
<div class="src-line"> <span class="src-var">$img_data </span>= <span class="src-var">$f</span><span class="src-sym">-&gt;</span><span class="src-id">fetch</span><span class="src-sym">( </span><span class="src-str">&#8216;http://ss7.sinaimg.cn/bmiddle/488efcbbt7b5c4ae51ca6&amp;690&#8242; </span><span class="src-sym">)</span><span class="src-sym">;</span></div>
</li>
<li>
<div class="src-line"> <span class="src-var">$img </span>= <span class="src-key">new </span><span class="src-id">SaeImage</span><span class="src-sym">(</span><span class="src-sym">)</span><span class="src-sym">;</span></div>
</li>
<li>
<div class="src-line"> <span class="src-var">$img</span><span class="src-sym">-&gt;</span>setData<span class="src-sym">( </span><span class="src-var">$img_data </span><span class="src-sym">)</span><span class="src-sym">;</span></div>
</li>
<li>
<div class="src-line"> <span class="src-var">$img</span><span class="src-sym">-&gt;</span>resize<span class="src-sym">(</span><span class="src-num">200</span><span class="src-sym">)</span><span class="src-sym">; </span><span class="src-comm">// 等比缩放到200宽</span></div>
</li>
<li>
<div class="src-line"> <span class="src-var">$img</span><span class="src-sym">-&gt;</span>flipH<span class="src-sym">(</span><span class="src-sym">)</span><span class="src-sym">; </span><span class="src-comm">// 水平翻转</span></div>
</li>
<li>
<div class="src-line"> <span class="src-var">$img</span><span class="src-sym">-&gt;</span><span class="src-id">flipv</span><span class="src-sym">(</span><span class="src-sym">)</span><span class="src-sym">; </span><span class="src-comm">// 垂直翻转</span></div>
</li>
<li>
<div class="src-line"> <span class="src-var">$new_data </span>= <span class="src-var">$img</span><span class="src-sym">-&gt;</span>exec<span class="src-sym">(</span><span class="src-sym">)</span><span class="src-sym">; </span><span class="src-comm">// 执行处理并返回处理后的二进制数据</span></div>
</li>
<li>
<div class="src-line"> <span class="src-comm">// 或者可以直接输出</span></div>
</li>
<li>
<div class="src-line"> <span class="src-var">$img</span><span class="src-sym">-&gt;</span>exec<span class="src-sym">( </span><span class="src-str">&#8216;jpg&#8217; </span><span class="src-sym">, </span><span class="src-id">true </span><span class="src-sym">)</span></div>
</li>
</ol>
<p class="src-line"><span class="src-sym">还有其他的细节就不一一列出。</span></p>
<p class="src-line"><span class="src-sym">这样做的好处我自己总结了一下，就是首先通过自建函数库（这种函数都是及其占用资源的）来通过统一的中央引擎来高效处理，并且可以节省服务器开销，提高服务器安全。但是缺点是显而易见的，把所有PHP的原有定义改成新浪的SAE形式的话无疑是一个浩大的工程，而且其必要性也有待于考证。诸如很多占用服务器资源的问题可以通过提高硬件的性能来解决。</span></p>
<p class="src-line"><span class="src-sym">还有一点就是说一下这个SAE的BUG或者说是另一种限制吧，以前写PHP脚本的时候我们可以使用&lt;? &#8230;?&gt;这种形式，但是在SAE下我们必须使用&lt;?php &#8230; ?&gt;这种形式，否则不会认为是PHP文件。</span></p>
<p class="src-line"><span class="src-sym">总的来说用两个字来总结新浪的SEA就是折腾，不过这也符合中国人的思维习惯。</span></p>
]]></content:encoded>
			<wfw:commentRss>http://fengzi.org/why-initial-use-of-the-feelings-of-sina-sae.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>PHP下CURL的HTTP代理和SOCKS5代理初探</title>
		<link>http://fengzi.org/curl-of-php-http-proxy-and-socks5-proxy.html</link>
		<comments>http://fengzi.org/curl-of-php-http-proxy-and-socks5-proxy.html#comments</comments>
		<pubDate>Mon, 04 Jan 2010 06:04:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[程序人生]]></category>

		<guid isPermaLink="false">http://fengzi.org/?p=108</guid>
		<description><![CDATA[闲话不说, HTTP版的CURL代理
 $url=http://www.baicu.com;
 $ch = curl_init();  
 $proxy = &#8220;http://206.127.181.126:8080&#8220;;
//    curl_setopt ($ch, CURLOPT_PROXY, $proxy);
    curl_setopt ($ch, CURLOPT_URL, $url);  
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);   
    curl_setopt ($ch, CURLOPT_REFERER, &#8216;http://www.samedomain.com&#8217;); /*破解防盗链*/ 
    curl_setopt ($ch, CURLOPT_USERAGENT, &#8216;Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)&#8217;);   
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 30);  
    $im = @curl_exec($ch);  
    curl_close($ch);  
    echo $im; 
SOCKS5版的CURL代理
$url = &#8216;http://www.google.com&#8217;;
$ch = curl_init($url);      
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);
curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_PROXY, &#8220;218.75.42.178&#8243;);
curl_setopt($ch, CURLOPT_PROXYPORT, [...]]]></description>
			<content:encoded><![CDATA[<p>闲话不说, HTTP版的CURL代理<br />
 $url=<a href="http://www.baicu.com">http://www.baicu.com</a>;<br />
 $ch = curl_init();  <br />
 $proxy = &#8220;<a href="http://206.127.181.126:8080">http://206.127.181.126:8080</a>&#8220;;<br />
//    curl_setopt ($ch, CURLOPT_PROXY, $proxy);<br />
    curl_setopt ($ch, CURLOPT_URL, $url);  <br />
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);   <br />
    curl_setopt ($ch, CURLOPT_REFERER, &#8216;http://www.samedomain.com&#8217;); /*破解防盗链*/ <br />
    curl_setopt ($ch, CURLOPT_USERAGENT, &#8216;Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)&#8217;);   <br />
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 30);  <br />
    $im = @curl_exec($ch);  <br />
    curl_close($ch);  <br />
    echo $im; </p>
<p>SOCKS5版的CURL代理</p>
<p>$url = &#8216;http://www.google.com&#8217;;<br />
$ch = curl_init($url);      <br />
curl_setopt($ch, CURLOPT_HEADER, 0);<br />
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);<br />
curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);<br />
curl_setopt($ch, CURLOPT_PROXY, &#8220;218.75.42.178&#8243;);<br />
curl_setopt($ch, CURLOPT_PROXYPORT, 1080);<br />
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);<br />
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />
$im = curl_exec($ch);<br />
curl_close($ch);<br />
echo $im;</p>
<p>两个代理IP貌似都好用哦~~</p>
]]></content:encoded>
			<wfw:commentRss>http://fengzi.org/curl-of-php-http-proxy-and-socks5-proxy.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Linux(CentOS)修改VPS服务器时间以及同步服务器时间</title>
		<link>http://fengzi.org/linux-centos-modify-the-vps-server-time-and-time-synchronization-server.html</link>
		<comments>http://fengzi.org/linux-centos-modify-the-vps-server-time-and-time-synchronization-server.html#comments</comments>
		<pubDate>Thu, 17 Dec 2009 15:44:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[程序人生]]></category>

		<category><![CDATA[Centos]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[vps]]></category>

		<category><![CDATA[修改]]></category>

		<category><![CDATA[同步]]></category>

		<category><![CDATA[时间]]></category>

		<category><![CDATA[服务器]]></category>

		<category><![CDATA[服务器时间]]></category>

		<guid isPermaLink="false">http://fengzi.org/?p=95</guid>
		<description><![CDATA[BurstNet给我变更了VPS, 发现新的VPS时间与北京时间不一样.于是查询了如何修改服务器的时间(特别感谢BurstNet的Brain.S, 他教会了我如何设置), 详细的设置步骤如下:
首先,链接活着拷贝上海的时区设置作为本地的时区默认设置,即:
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
或者
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
其次,使服务器时间同步化:
yum install -y ntp
ntpdate -d us.pool.ntp.org
这样就可以了
]]></description>
			<content:encoded><![CDATA[<p><a href="https://service.burst.net/aff.php?aff=269">BurstNet</a>给我变更了VPS, 发现新的VPS时间与北京时间不一样.于是查询了如何修改服务器的时间(特别感谢<a href="https://service.burst.net/aff.php?aff=269">BurstNet</a>的Brain.S, 他教会了我如何设置), 详细的设置步骤如下:</p>
<p>首先,链接活着拷贝上海的时区设置作为本地的时区默认设置,即:<br />
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime<br />
或者<br />
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime</p>
<p>其次,使服务器时间同步化:<br />
yum install -y ntp<br />
ntpdate -d us.pool.ntp.org<br />
这样就可以了</p>
]]></content:encoded>
			<wfw:commentRss>http://fengzi.org/linux-centos-modify-the-vps-server-time-and-time-synchronization-server.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>深入分析Nginx 502 Bad Gateway和Nginx 504 Gateway Time-out及其解决</title>
		<link>http://fengzi.org/in-depth-analysis-nginx-502-bad-gateway-and-nginx-504-gateway-time-out-and-their-solutions.html</link>
		<comments>http://fengzi.org/in-depth-analysis-nginx-502-bad-gateway-and-nginx-504-gateway-time-out-and-their-solutions.html#comments</comments>
		<pubDate>Fri, 11 Dec 2009 04:42:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[程序人生]]></category>

		<category><![CDATA[502]]></category>

		<category><![CDATA[504]]></category>

		<category><![CDATA[BAD GATEWAY]]></category>

		<category><![CDATA[Gateway Time-out]]></category>

		<category><![CDATA[NGINX]]></category>

		<category><![CDATA[分析]]></category>

		<category><![CDATA[解决]]></category>

		<guid isPermaLink="false">http://fengzi.org/?p=88</guid>
		<description><![CDATA[Nginx 502 Bad Gateway的含义是请求的PHP-CGI已经执行，但是由于某种原因（一般是读取资源的问题）没有执行完毕而导致PHP-CGI进程终止。
Nginx 504 Gateway Time-out的含义是所请求的网关没有请求到，简单来说就是没有请求到可以执行的PHP-CGI。
解决这两个问题其实是需要综合思考的，一般来说Nginx 502 Bad Gateway和php-fpm.conf的设置有关，而Nginx 504 Gateway Time-out则是与nginx.conf的设置有关。
而正确的设置需要考虑服务器自身的性能和访客的数量等多重因素。
以我目前的服务器为例子CPU是奔四1.5G的，内存1GB，CENTOS的系统，访客大概是50人左右同时在线。
但是在线的人大都需要请求PHP-CGI进行大量的信息处理，因此我将nginx.conf设置为：
           fastcgi_connect_timeout 300s;
                fastcgi_send_timeout 300s;
              [...]]]></description>
			<content:encoded><![CDATA[<p>Nginx 502 Bad Gateway的含义是请求的PHP-CGI已经执行，但是由于某种原因（一般是读取资源的问题）没有执行完毕而导致PHP-CGI进程终止。<br />
Nginx 504 Gateway Time-out的含义是所请求的网关没有请求到，简单来说就是没有请求到可以执行的PHP-CGI。</p>
<p>解决这两个问题其实是需要综合思考的，一般来说Nginx 502 Bad Gateway和php-fpm.conf的设置有关，而Nginx 504 Gateway Time-out则是与nginx.conf的设置有关。<br />
而正确的设置需要考虑服务器自身的性能和访客的数量等多重因素。<br />
以我目前的服务器为例子CPU是奔四1.5G的，内存1GB，CENTOS的系统，访客大概是50人左右同时在线。<br />
但是在线的人大都需要请求PHP-CGI进行大量的信息处理，因此我将nginx.conf设置为：<br />
           fastcgi_connect_timeout 300s;<br />
                fastcgi_send_timeout 300s;<br />
                fastcgi_read_timeout 300s;<br />
                fastcgi_buffer_size 128k;<br />
                fastcgi_buffers 8 128k;#8 128<br />
                fastcgi_busy_buffers_size 256k;<br />
                fastcgi_temp_file_write_size 256k;<br />
                fastcgi_intercept_errors on;<br />
这里最主要的设置是前三条，即<br />
           fastcgi_connect_timeout 300s;<br />
                fastcgi_send_timeout 300s;<br />
                fastcgi_read_timeout 300s;<br />
这里规定了PHP-CGI的连接、发送和读取的时间，300秒足够用了，因此我的服务器很少出现504 Gateway Time-out这个错误。最关键的是php-fpm.conf的设置，这个会直接导致502 Bad Gateway和504 Gateway Time-out。<br />
下面我们来仔细分析一下php-fpm.conf几个重要的参数：<br />
php-fpm.conf有两个至关重要的参数，一个是&#8221;max_children&#8221;,另一个是&#8221;request_terminate_timeout&#8221;<br />
我的两个设置的值一个是&#8221;40&#8243;，一个是&#8221;900&#8243;，但是这个值不是通用的，而是需要自己计算的。<br />
计算的方式如下：<br />
如果你的服务器性能足够好，且宽带资源足够充足，PHP脚本没有系循环或BUG的话你可以直接将&#8221;request_terminate_timeout&#8221;设置成0s。0s的含义是让PHP-CGI一直执行下去而没有时间限制。而如果你做不到这一点，也就是说你的PHP-CGI可能出现某个BUG，或者你的宽带不够充足或者其他的原因导致你的PHP-CGI能够假死那么就建议你给&#8221;request_terminate_timeout&#8221;赋一个值，这个值可以根据你服务器的性能进行设定。一般来说性能越好你可以设置越高，20分钟-30分钟都可以。由于我的服务器PHP脚本需要长时间运行，有的可能会超过10分钟因此我设置了900秒，这样不会导致PHP-CGI死掉而出现502 Bad gateway这个错误。</p>
<p>而&#8221;max_children&#8221;这个值又是怎么计算出来的呢？这个值原则上是越大越好，php-cgi的进程多了就会处理的很快，排队的请求就会很少。设置&#8221;max_children&#8221;也需要根据服务器的性能进行设定，一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M左右，因此我的&#8221;max_children&#8221;我设置成40个，20M*40=800M也就是说在峰值的时候所有PHP-CGI所耗内存在800M以内，低于我的有效内存1Gb。而如果我的&#8221;max_children&#8221;设置的较小，比如5-10个，那么php-cgi就会“很累”，处理速度也很慢，等待的时间也较长。如果长时间没有得到处理的请求就会出现504 Gateway Time-out这个错误，而正在处理的很累的那几个php-cgi如果遇到了问题就会出现502 Bad gateway这个错误。</p>
]]></content:encoded>
			<wfw:commentRss>http://fengzi.org/in-depth-analysis-nginx-502-bad-gateway-and-nginx-504-gateway-time-out-and-their-solutions.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>centos下VSFTPD启动失败的解决</title>
		<link>http://fengzi.org/centos-boot-failure-under-the-settlement-vsftpd.html</link>
		<comments>http://fengzi.org/centos-boot-failure-under-the-settlement-vsftpd.html#comments</comments>
		<pubDate>Fri, 30 Oct 2009 02:02:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[程序人生]]></category>

		<guid isPermaLink="false">http://fengzi.org/?p=86</guid>
		<description><![CDATA[新买了一个服务器，所有配置文件和原有的都一样，但是VSFTPD在服务器重启以后的一段时间后就不好用，提示Starting vsftpd for vsftpd:                                [  FAILED  ]
重装也不好用很是奇怪。
偶然从网上搜索到/etc/logrotate.d/vsftpd.log的文件配置，和我自己的对比一下，我的多了missingok一项，把它注释掉启动，搞定！
目前的/etc/logrotate.d/vsftpd.log文件如下：
/var/log/vsftpd.log {
    # ftpd doesn&#8217;t handle SIGHUP properly
    nocompress
#  [...]]]></description>
			<content:encoded><![CDATA[<p>新买了一个服务器，所有配置文件和原有的都一样，但是VSFTPD在服务器重启以后的一段时间后就不好用，提示Starting vsftpd for vsftpd:                                [  FAILED  ]<br />
重装也不好用很是奇怪。<br />
偶然从网上搜索到/etc/logrotate.d/vsftpd.log的文件配置，和我自己的对比一下，我的多了missingok一项，把它注释掉启动，搞定！<br />
目前的/etc/logrotate.d/vsftpd.log文件如下：</p>
<p>/var/log/vsftpd.log {<br />
    # ftpd doesn&#8217;t handle SIGHUP properly<br />
    nocompress<br />
#    missingok<br />
}</p>
<p>/var/log/xferlog {<br />
    # ftpd doesn&#8217;t handle SIGHUP properly<br />
    nocompress<br />
#   missingok<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://fengzi.org/centos-boot-failure-under-the-settlement-vsftpd.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>解决IPTABLES规则和VSFTPD被动模式冲突的问题</title>
		<link>http://fengzi.org/iptables-rules-and-to-resolve-the-issue-of-conflict-vsftpd-passive-mode.html</link>
		<comments>http://fengzi.org/iptables-rules-and-to-resolve-the-issue-of-conflict-vsftpd-passive-mode.html#comments</comments>
		<pubDate>Sun, 23 Aug 2009 15:28:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[程序人生]]></category>

		<category><![CDATA[21]]></category>

		<category><![CDATA[iptables]]></category>

		<category><![CDATA[PASV]]></category>

		<category><![CDATA[vsftpd]]></category>

		<category><![CDATA[冲突]]></category>

		<category><![CDATA[被动模式]]></category>

		<guid isPermaLink="false">http://fengzi.org/?p=83</guid>
		<description><![CDATA[IPTABLES里面仅仅开放了80、21等常用端口，这样就导致了VSFTPD在被动模式时无法使用随机端口，从而造成了客户端连接FTP时无法列出目录这样的问题。解决方式很简单，给VSFTPD增加随机端口的范围，然后把这个端口范围添加到IPTABLES.
具体做法如下：
修改/etc/vsftpd/vsftpd.conf的配置文件，在文件末端添加
pasv_max_port=6666
pasv_min_port=5555
然后将这两个端口范围添加到IPTABLES中，亦即vi /etc/sysconfig/iptables修改IPTABLES的配置文件，在其中添加
-I INPUT -p tcp &#8211;dport 5555:6666 -j ACCEPT
-I OUTPUT -p tcp &#8211;sport 5555:6666 -j ACCEPT
这样的随机端口范围，使之合法化。
最后重启一下两个服务：
[root@ido ~]# service vsftpd restart
Shutting down vsftpd:                                  [...]]]></description>
			<content:encoded><![CDATA[<p>IPTABLES里面仅仅开放了80、21等常用端口，这样就导致了VSFTPD在被动模式时无法使用随机端口，从而造成了客户端连接FTP时无法列出目录这样的问题。解决方式很简单，给VSFTPD增加随机端口的范围，然后把这个端口范围添加到IPTABLES.<br />
具体做法如下：<br />
修改/etc/vsftpd/vsftpd.conf的配置文件，在文件末端添加<br />
pasv_max_port=6666<br />
pasv_min_port=5555<br />
然后将这两个端口范围添加到IPTABLES中，亦即vi /etc/sysconfig/iptables修改IPTABLES的配置文件，在其中添加<br />
-I INPUT -p tcp &#8211;dport 5555:6666 -j ACCEPT<br />
-I OUTPUT -p tcp &#8211;sport 5555:6666 -j ACCEPT<br />
这样的随机端口范围，使之合法化。</p>
<p>最后重启一下两个服务：<br />
[root@ido ~]# service vsftpd restart<br />
Shutting down vsftpd:                                      [  OK  ]<br />
Starting vsftpd for vsftpd:                                [  OK  ]<br />
[root@ido ~]# service iptables restart<br />
Flushing firewall rules:                                   [  OK  ]<br />
Setting chains to policy ACCEPT: mangle filter nat         [  OK  ]<br />
Applying iptables firewall rules:                          [  OK  ]</p>
<p>用客户端测试，成功！</p>
]]></content:encoded>
			<wfw:commentRss>http://fengzi.org/iptables-rules-and-to-resolve-the-issue-of-conflict-vsftpd-passive-mode.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>CURL的一个类（测试高亮代码用的）</title>
		<link>http://fengzi.org/curl-a-category-the-test-used-to-highlight-code.html</link>
		<comments>http://fengzi.org/curl-a-category-the-test-used-to-highlight-code.html#comments</comments>
		<pubDate>Mon, 10 Aug 2009 05:15:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[程序人生]]></category>

		<category><![CDATA[Add new tag]]></category>

		<category><![CDATA[HTML]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://fengzi.org/?p=75</guid>
		<description><![CDATA[


]]></description>
			<content:encoded><![CDATA[<pre lang="php" line="1" file="download.txt" colla="+/-">
<?
function fetch($url){
    $curl = curl_init();
    $timeout = 0;
 curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; )');
    curl_setopt($curl, CURLOPT_HEADER, 0);
 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
 curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1);
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($curl, CURLOPT_COOKIE, 'domain=www.stocksir.com');
    $tmpInfo = curl_exec($curl);
    curl_close($curl);
    return $tmpInfo;
}
$str = fetch("http://www.stocksir.com/index.php");
echo substr($str, -5);
?>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://fengzi.org/curl-a-category-the-test-used-to-highlight-code.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Michael Jackson Dies Aged 50</title>
		<link>http://fengzi.org/michael-jackson-dies-aged-50.html</link>
		<comments>http://fengzi.org/michael-jackson-dies-aged-50.html#comments</comments>
		<pubDate>Fri, 26 Jun 2009 01:11:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[程序人生]]></category>

		<category><![CDATA[Michael Jackson]]></category>

		<guid isPermaLink="false">http://fengzi.org/?p=64</guid>
		<description><![CDATA[
Michael Joseph Jackson was born on Aug. 29, 1958, in Gary, Indiana, the seventh child of a musically gifted family. He was 11 when he made his debut as a member of The Jackson 5, with older brothers Jackie, Tito, Jermaine and Marlon.
His solo career began in 1971 with the single “Got to Be There.” [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-65" title="Michael Jackson" src="http://fengzi.org/wp-content/uploads/2009/06/t1wide_jackson.jpg" alt="Michael Jackson" width="585" height="253" /></p>
<p>Michael Joseph Jackson was born on Aug. 29, 1958, in Gary, Indiana, the seventh child of a musically gifted family. He was 11 when he made his debut as a member of The Jackson 5, with older brothers Jackie, Tito, Jermaine and Marlon.</p>
<p>His solo career began in 1971 with the single “Got to Be There.” His first No. 1 single came in 1971 &#8212; “Ben,” the title song from a film about a rat.</p>
<p>In 1979, at 21, he came out with “Off the Wall,” an album that produced four hit singles, according to the Hall of Fame.</p>
<p>“Thriller,” his 1982 album, and especially the 14-minute music video made for the title song and released a year later, propelled Jackson into the upper echelon of pop stardom. It topped the album charts for 37 weeks in 1983, according to the Hall of Fame.</p>
<p>“Billie Jean,” the second single from the album, led the charts for another seven weeks. It was with that song that Jackson introduced his famous and much-imitated “moonwalk” dance move.</p>
<p>His 1987 album, “Bad,” produced seven more hit singles, including the title song.</p>
<p>He performed at halftime of Super Bowl XXVII in 1993.</p>
<p><object classid="clsid:6bf52a52-394a-11d3-b153-00c04f79faa6" width="265" height="46" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"><param name="url" value="http://res.cso365.com/classdata/20060510/2006s3/shuangwei/disanzhou_q/chuzhong/renjiaoxinkebiao/english/grade8/l1/mtsc/014.mp3" /><param name="url" value="http://res.cso365.com/classdata/20060510/2006s3/shuangwei/disanzhou_q/chuzhong/renjiaoxinkebiao/english/grade8/l1/mtsc/014.mp3" /><embed type="application/x-mplayer2" width="265" height="46" src="http://res.cso365.com/classdata/20060510/2006s3/shuangwei/disanzhou_q/chuzhong/renjiaoxinkebiao/english/grade8/l1/mtsc/014.mp3" url="http://res.cso365.com/classdata/20060510/2006s3/shuangwei/disanzhou_q/chuzhong/renjiaoxinkebiao/english/grade8/l1/mtsc/014.mp3"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://fengzi.org/michael-jackson-dies-aged-50.html/feed</wfw:commentRss>
<enclosure url="http://res.cso365.com/classdata/20060510/2006s3/shuangwei/disanzhou_q/chuzhong/renjiaoxinkebiao/english/grade8/l1/mtsc/014.mp3" length="6225630" type="audio/mpeg" />
		</item>
		<item>
		<title>Nginx/Apache框架下的动态网站纯静态化思路</title>
		<link>http://fengzi.org/nginx-apache-web-site-under-the-framework-of-a-purely-static-and-dynamic-ideas.html</link>
		<comments>http://fengzi.org/nginx-apache-web-site-under-the-framework-of-a-purely-static-and-dynamic-ideas.html#comments</comments>
		<pubDate>Thu, 11 Jun 2009 15:28:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[程序人生]]></category>

		<category><![CDATA[APACHE]]></category>

		<category><![CDATA[CRONTAB]]></category>

		<category><![CDATA[HTML]]></category>

		<category><![CDATA[JS]]></category>

		<category><![CDATA[NGINX]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[SESSION]]></category>

		<category><![CDATA[静态]]></category>

		<guid isPermaLink="false">http://fengzi.org/?p=59</guid>
		<description><![CDATA[相信很多站长都在考虑将自己的网站静态化，一方面HTML访问速度较快，另一方面对搜索引擎也友好。
在这里先不谈rulrewrite, 因为我们要做的是将网站动态页面真实静态化。
流程图如下：

一般来说，服务器端的cron请求不宜过频，控制在10分钟左右，保证没有用户访问的前提下网站能实现自动更新。而客户端的JS脚本则可以设置20秒左右请求更新一次，但是这样就会出现一个问题，那就是当同时登陆网站的客户端较多时会给网站造成不小的压力。这时候就需要在PHP2HTML脚本上动动脑筋，判断前一次生成HTML离现在的时间间隔，我一般是30秒重新生成一次，也就是说如果上一次生成时间离现在不到30秒，那么无论是客户端还是服务器端请求PHP2HTML都会自动停止。这样一方面减少了服务器的压力，另一方面能保证网站数据的定时有序的更新。
然而实际上，网站静态化的时间间隔会低于30秒，为什么会这样呢？答案是PHP2HTML运行本身需要时间，在它自身运行时又有新的请求产生，因此会同时运行导致生成时间间隔略小于预设的时间。这个问题理论上有解决的方法，就是利用session。但是实际中利用session会让你遇到意想不到的麻烦的，比如PHP2HTML突然间死掉了，session还存在，那么整个网站的静态就需要等到session也死掉，这需要很长的时间。
上述思路我在2个服务器上实践过，结果是我自己很满意，因为从客户端的角度出发访问的速度很快。但是服务商不满意了，由此我的网站被反反复复关闭了好多次。以后的思路是动态数据动态化，静态数据静态化，这样可以大大节省服务器开支。
]]></description>
			<content:encoded><![CDATA[<p>相信很多站长都在考虑将自己的网站静态化，一方面HTML访问速度较快，另一方面对搜索引擎也友好。</p>
<p>在这里先不谈rulrewrite, 因为我们要做的是将网站动态页面真实静态化。</p>
<p>流程图如下：</p>
<p><img class="aligncenter size-full wp-image-60" title="网页静态化的处理流程" src="http://fengzi.org/wp-content/uploads/2009/06/php2html.jpg" alt="网页静态化的处理流程" width="404" height="418" /></p>
<p>一般来说，服务器端的cron请求不宜过频，控制在10分钟左右，保证没有用户访问的前提下网站能实现自动更新。而客户端的JS脚本则可以设置20秒左右请求更新一次，但是这样就会出现一个问题，那就是当同时登陆网站的客户端较多时会给网站造成不小的压力。这时候就需要在PHP2HTML脚本上动动脑筋，判断前一次生成HTML离现在的时间间隔，我一般是30秒重新生成一次，也就是说如果上一次生成时间离现在不到30秒，那么无论是客户端还是服务器端请求PHP2HTML都会自动停止。这样一方面减少了服务器的压力，另一方面能保证网站数据的定时有序的更新。</p>
<p>然而实际上，网站静态化的时间间隔会低于30秒，为什么会这样呢？答案是PHP2HTML运行本身需要时间，在它自身运行时又有新的请求产生，因此会同时运行导致生成时间间隔略小于预设的时间。这个问题理论上有解决的方法，就是利用session。但是实际中利用session会让你遇到意想不到的麻烦的，比如PHP2HTML突然间死掉了，session还存在，那么整个网站的静态就需要等到session也死掉，这需要很长的时间。</p>
<p>上述思路我在2个服务器上实践过，结果是我自己很满意，因为从客户端的角度出发访问的速度很快。但是服务商不满意了，由此我的网站被反反复复关闭了好多次。以后的思路是动态数据动态化，静态数据静态化，这样可以大大节省服务器开支。</p>
]]></content:encoded>
			<wfw:commentRss>http://fengzi.org/nginx-apache-web-site-under-the-framework-of-a-purely-static-and-dynamic-ideas.html/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
