<?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>&#22823;&#34430;&#30340;&#23398;&#20064;&#31354;&#38388; &#187; albert</title>
	<atom:link href="http://blog.fabrichina.net/archives/author/albert/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.fabrichina.net</link>
	<description>PHP SEO &#30005;&#23376;&#21830;&#21153;&#26550;&#26500;</description>
	<lastBuildDate>Mon, 16 Jan 2012 09:32:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>基于HTTP协议的轻量级开源简单队列服务：HTTPSQS [转张宴]</title>
		<link>http://blog.fabrichina.net/archives/112</link>
		<comments>http://blog.fabrichina.net/archives/112#comments</comments>
		<pubDate>Mon, 01 Feb 2010 01:59:24 +0000</pubDate>
		<dc:creator>albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=112</guid>
		<description><![CDATA[httpsq  ulimit -SHn 65535 wget http://httpsqs.googlecode.com/files/libevent-1.4.13-stable.tar.gz tar zxvf libevent-1.4.13-stable.tar.gz cd libevent-1.4.13-stable/ ./configure &#8211;prefix=/usr make make install cd ../ wget http://httpsqs.googlecode.com/files/tokyocabinet-1.4.41.tar.gz tar zxvf tokyocabinet-1.4.41.tar.gz cd tokyocabinet-1.4.41/ ./configure #注：在32位Linux操作系统上编译Tokyo cabinet，请使用./configure &#8211;enable-off64代替./configure，可以使数据库文件突破2GB的限制。 #./configure &#8211;enable-off64 make make install cd ../ /sbin/ldconfig wget http://httpsqs.googlecode.com/files/httpsqs-1.1.tar.gz tar zxvf httpsqs-1.1.tar.gz cd httpsqs-1.1/ make make install cd ../ 　[root@xoyo ~]# httpsqs -h -l &#60;ip_addr&#62; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.fabrichina.net/wp-content/uploads/2010/02/httpsq.rar">httpsq</a> </p>
<p>ulimit -SHn 65535</p>
<p>wget <a href="http://httpsqs.googlecode.com/files/libevent-1.4.13-stable.tar.gz" target="_blank">http://httpsqs.googlecode.com/files/libevent-1.4.13-stable.tar.gz</a><br />
tar zxvf libevent-1.4.13-stable.tar.gz<br />
cd libevent-1.4.13-stable/<br />
./configure &#8211;prefix=/usr<br />
make<br />
make install<br />
cd ../<br />
<span id="more-112"></span><br />
wget <a href="http://httpsqs.googlecode.com/files/tokyocabinet-1.4.41.tar.gz" target="_blank">http://httpsqs.googlecode.com/files/tokyocabinet-1.4.41.tar.gz</a><br />
tar zxvf tokyocabinet-1.4.41.tar.gz<br />
cd tokyocabinet-1.4.41/<br />
./configure<br />
#注：在32位Linux操作系统上编译Tokyo cabinet，请使用./configure &#8211;enable-off64代替./configure，可以使数据库文件突破2GB的限制。<br />
#./configure &#8211;enable-off64<br />
make<br />
make install<br />
cd ../</p>
<p>/sbin/ldconfig</p>
<p>wget <a href="http://httpsqs.googlecode.com/files/httpsqs-1.1.tar.gz" target="_blank">http://httpsqs.googlecode.com/files/httpsqs-1.1.tar.gz</a><br />
tar zxvf httpsqs-1.1.tar.gz<br />
cd httpsqs-1.1/<br />
make<br />
make install<br />
cd ../</p>
<p>　[root@xoyo ~]# httpsqs -h</p>
<div>-l &lt;ip_addr&gt; 监听的IP地址，默认值为 0.0.0.0<br />
-p &lt;num&gt; 监听的TCP端口（默认值：1218）<br />
-x &lt;path&gt; 数据库目录，目录不存在会自动创建（例如：/opt/httpsqs/data）<br />
-t &lt;second&gt; HTTP请求的超时时间（默认值：1）<br />
-d 以守护进程运行<br />
-h 显示这个帮助</div>
<p>　　示例：</p>
<div>ulimit -SHn 65535<br />
httpsqs -d -p 1218 -x /data0/search/queue</div>
<p>　　请使用命令“killall httpsqs”、“pkill httpsqs”和“kill httpsqs的进程ID”来停止httpsqs。</p>
<p>　　注意：请不要使用命令“pkill -9 httpsqs”和“kill -9  httpsqs的进程ID”来结束httpsqs，否则，内存中尚未保存到磁盘的数据将会丢失。</p>
<hr />　　<strong>5、HTTPSQS 客户端使用文档：</strong></p>
<p>　　<strong>(1)、入队列（将文本消息放入队列）：</strong></p>
<p>　　HTTP GET 协议（以curl命令为例）：</p>
<div>curl &#8220;http://host:port/?name=your_queue_name&amp;opt=put&amp;data=经过URL编码的文本消息&#8221;</div>
<p>　　HTTP POST 协议（以curl命令为例）：</p>
<div>curl -d &#8220;经过URL编码的文本消息&#8221; <a href="http://host:port/?name=your_queue_name&amp;opt=put">http://host:port/?name=your_queue_name&amp;opt=put</a></div>
<p>　　如果入队列成功，返回：</p>
<div>HTTPSQS_PUT_OK</div>
<p>　　如果入队列失败，返回：</p>
<div>HTTPSQS_PUT_ERROR</div>
<hr />　　<strong>(2)、出队列（从队列中取出文本消息）：</strong></p>
<p>　　HTTP GET 协议（以curl命令为例）：</p>
<div>curl &#8220;http://host:port/?charset=utf-8&amp;name=your_queue_name&amp;opt=get&#8221;</div>
<p>curl <a href="http://host:port/?charset=gb2312&amp;name=your_queue_name&amp;opt=get">http://host:port/?charset=gb2312&amp;name=your_queue_name&amp;opt=get</a></p>
<p>　　返回消息队列的内容给客户端。如果没有未取出的消息队列，则返回：<br />
HTTPSQS_GET_END<br />
　　<strong>参数charset说明（例如：/?charset=utf-8）：</strong><br />
　　指定HTTP输出Header头的字符编码，即：<br />
　　Content-Type: text/plain; charset=utf-8</p>
<p>　　任何<a href="http://www.iana.org/assignments/character-sets" target="_blank">在IANA注册的字符编码</a>均可使用，但是，并不是所有的浏览器都能解析全部的字符编码。对于中文，常用的字符编码有：utf-8、gb2312、gbk、gb18030、big5等。</p>
<hr />　　<strong>(3)、查看队列状态：</strong></p>
<p>　　HTTP GET 协议（以curl命令为例）：</p>
<p>curl <a href="http://host:port/?name=your_queue_name&amp;opt=status">http://host:port/?name=your_queue_name&amp;opt=status</a></p>
<p>　　返回（示例）：</p>
<p>HTTP Simple Queue Service v1.0<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Queue Name: xoyo<br />
Maximum number of queues: 1000000<br />
Put position of queue (1st lap): 45<br />
Get position of queue (1st lap): 6<br />
Number of unread queue: 39</p>
<p>　　如果“队列写入点值”大于“最大队列数量值”，将重置“队列写入点”为1，即又从1开始存储新的队列内容，覆盖原来队列位置点的内容：<br />
HTTP Simple Queue Service v1.0<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Queue Name: xoyo<br />
Maximum number of queues: 1000000<br />
Put position of queue (2st lap): 4562<br />
Get position of queue (1st lap): 900045<br />
Number of unread queue: 104517</p>
<hr />　　<strong>(4)、查看指定队列位置点的内容：</strong></p>
<p>　　跟一般的队列系统不同的是，HTTPSQS 可以查看指定队列ID（队列点）的内容，包括未出、已出的队列内容。可以方便地观测进入队列的内容是否正确。</p>
<p>　　另外，假设有一个发送手机短信的队列，由客户端守护进程从队列中取出信息，并调用“短信网关接口”发送短信。但是，如果某段时间“短信网关接口”有故障，而这段时间队列位置点300~900的信息已经出队列，但是发送短信失败，我们还可以在位置点300~900被覆盖前，查看到这些位置点的内容，作相应的处理。</p>
<p>　　HTTP GET 协议（以curl命令为例）：</p>
<p>curl &#8220;http://host:port/?charset=utf-8&amp;name=your_queue_name&amp;opt=view&amp;pos=5&#8243;</p>
<p>curl <a href="http://host:port/?charset=gb2312&amp;name=your_queue_name&amp;opt=view&amp;pos=19">http://host:port/?charset=gb2312&amp;name=your_queue_name&amp;opt=view&amp;pos=19</a></p>
<p>　　pos &gt;=1 并且 &lt;= 1000000000</p>
<p>　　返回指定队列位置点的内容。</p>
<hr />　　<strong>(5)、重置指定队列：</strong></p>
<p>　　HTTP GET 协议（以curl命令为例）：</p>
<p>curl <a href="http://host:port/?name=your_queue_name&amp;opt=reset">http://host:port/?name=your_queue_name&amp;opt=reset</a></p>
<p>　　如果重置成功，返回：</p>
<p>HTTPSQS_RESET_OK</p>
<p>　　如果重置失败，返回：</p>
<p>HTTPSQS_RESET_ERROR</p>
<hr />　　<strong>(6)、更改指定队列的最大队列数量：</strong></p>
<p>　　默认的最大队列长度（100万条）：1000000</p>
<p>　　HTTP GET 协议（以curl命令为例）：</p>
<p>curl <a href="http://host:port/?name=your_queue_name&amp;opt=maxqueue&amp;num=1000000000">http://host:port/?name=your_queue_name&amp;opt=maxqueue&amp;num=1000000000</a></p>
<p>　　num &gt;=10 并且 &lt;= 1000000000</p>
<p>　　如果更改最大队列数量成功，则返回：</p>
<p>HTTPSQS_MAXQUEUE_OK</p>
<p>　　更改的最大队列数量必须大于当前的“队列写入点”。另外，当“队列写入点”小于“队列读取点”时（即PUT位于圆环的第二圈，而GET位于圆环的第一圈时），本操作将被取消，然而返回给客户端以下信息：<br />
HTTPSQS_MAXQUEUE_CANCEL</p>
<hr />　　<strong>(7)、全局错误：</strong></p>
<p>　　如果发送全局错误（即指令、参数错误等），将返回以下信息：</p>
<div><!--more-->HTTPSQS_ERROR</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/112/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5.3.1 vs oci8 1.4.0</title>
		<link>http://blog.fabrichina.net/archives/108</link>
		<comments>http://blog.fabrichina.net/archives/108#comments</comments>
		<pubDate>Wed, 06 Jan 2010 02:39:48 +0000</pubDate>
		<dc:creator>albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=108</guid>
		<description><![CDATA[oci8 1.4.0需要一个env 就是ORACLE_HOME 这个东西如果没有，就歇菜，根本就连不上数据库了，这可真是头疼了 apache vs php编译模块以后，会自动加载ORACLE_HOME也就是普通跑个apache没问题，关键问题是crontab和系统指令级别的php vi /etc/bashrc 在顶上加上export ORACLE_HOME= ****   //这个可以解决指令行的问题，每次登陆都会帮你自动export一下这个环境变量 当然啦放到/etc/profile 里面也行，不用打export还。。 但是crontab 不行 只好在crontab -e里面直接写上ORACLE_HOME= ****  //这可实在不怎么好看，我还在寻找新的，更好的解决方法~~]]></description>
			<content:encoded><![CDATA[<p>oci8 1.4.0需要一个env 就是ORACLE_HOME 这个东西如果没有，就歇菜，根本就连不上数据库了，这可真是头疼了<span id="more-108"></span></p>
<p>apache vs php编译模块以后，会自动加载ORACLE_HOME也就是普通跑个apache没问题，关键问题是crontab和系统指令级别的php</p>
<p>vi /etc/bashrc 在顶上加上export ORACLE_HOME= ****   //这个可以解决指令行的问题，每次登陆都会帮你自动export一下这个环境变量</p>
<p>当然啦放到/etc/profile 里面也行，不用打export还。。</p>
<p>但是crontab 不行</p>
<p>只好在crontab -e里面直接写上ORACLE_HOME= ****  //这可实在不怎么好看，我还在寻找新的，更好的解决方法~~</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/108/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php 5.2.x &#8211;&gt; php 5.3.x升级过程..</title>
		<link>http://blog.fabrichina.net/archives/103</link>
		<comments>http://blog.fabrichina.net/archives/103#comments</comments>
		<pubDate>Tue, 05 Jan 2010 07:32:38 +0000</pubDate>
		<dc:creator>albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=103</guid>
		<description><![CDATA[先是有这个帖子 5.3.x新增了一个goto函数。。结果我的项目里面有的goto函数全出问题了~~ 被放弃的函数有:  ereg()  eregi();  set_magic_quotes_runtime();  split  mysql_close();  //将不支持全部关闭, 需要改为:mysql_close($link); 以下变更:  magic_quotes_gpc()       将永远为1; Zend Optimizer   仍然没有支持.   该弃用的函数群 call_user_method() (use call_user_func() instead) call_user_method_array() (use call_user_func_array() instead) define_syslog_variables() dl() ereg() (use preg_match() instead) ereg_replace() (use preg_replace() instead) eregi() (use preg_match() with the ‘i’ modifier instead) eregi_replace() (use preg_replace() with the ‘i’ modifier instead) set_magic_quotes_runtime() and its [...]]]></description>
			<content:encoded><![CDATA[<p>先是有这个帖子</p>
<p>5.3.x新增了一个goto函数。。结果我的项目里面有的goto函数全出问题了~~</p>
<p><span style="FONT-FAMILY: '微软雅黑', sans-serif">被放弃的函数有:<br />
 ereg()<br />
 eregi();<br />
 set_magic_quotes_runtime();<br />
 split<br />
 mysql_close();  //将不支持全部关闭, 需要改为:mysql_close($link);</span></p>
<p>以下变更:<br />
 magic_quotes_gpc()       将永远为1;<br />
Zend Optimizer   仍然没有支持.<br />
 <br />
该弃用的函数群</p>
<p>call_user_method() (use call_user_func() instead)<br />
call_user_method_array() (use call_user_func_array() instead)<br />
define_syslog_variables()<br />
dl()<br />
ereg() (use preg_match() instead)<br />
ereg_replace() (use preg_replace() instead)<br />
eregi() (use preg_match() with the ‘i’ modifier instead)<br />
eregi_replace() (use preg_replace() with the ‘i’ modifier instead)<br />
set_magic_quotes_runtime() and its alias, magic_quotes_runtime()<br />
session_register() (use the $_SESSION superglobal instead)<br />
session_unregister() (use the $_SESSION superglobal instead)<br />
session_is_registered() (use the $_SESSION superglobal instead)<br />
set_socket_blocking() (use stream_set_blocking() instead)<br />
split() (use preg_split() instead)<br />
spliti() (use preg_split() with the ‘i’ modifier instead)<br />
sql_regcase()<br />
mysql_db_query() (use mysql_select_db() and mysql_query() instead)<br />
mysql_escape_string() (use mysql_real_escape_string() instead)<br />
Passing locale category names as strings is now deprecated. Use the LC_* family of constants instead.<br />
The is_dst parameter to</p>
<p><span style="FONT-FAMILY: '微软雅黑', sans-serif"> </span></p>
<p><span style="FONT-FAMILY: '微软雅黑', sans-serif"> </span></p>
<p><span style="FONT-FAMILY: '微软雅黑', sans-serif">其实我们要对付的就是split这种函数</span></p>
<p><span style="FONT-FAMILY: '微软雅黑', sans-serif">if（!<span><strong>function_exists(&#8216;split&#8217;))</strong></span></span></p>
<p><span style="FONT-FAMILY: '微软雅黑', sans-serif"><span><strong>{</strong></span></span></p>
<p><span style="FONT-FAMILY: '微软雅黑', sans-serif"><span><strong>function split($a,$b,$c=null)</strong></span></span></p>
<p><span style="FONT-FAMILY: '微软雅黑', sans-serif"><span><strong>{</strong></span></span></p>
<p><span style="FONT-FAMILY: '微软雅黑', sans-serif"><span><strong>   return explode($a,$b,$c);</strong></span></span></p>
<p><span style="FONT-FAMILY: '微软雅黑', sans-serif"><span><strong>}</strong></span></span></p>
<p><span style="FONT-FAMILY: '微软雅黑', sans-serif"><span><strong>}</strong></span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/103/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

