<?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>Sphinx 中文站</title>
	<atom:link href="http://www.sphinxsearch.org/feed" rel="self" type="application/rss+xml" />
	<link>http://www.sphinxsearch.org</link>
	<description>简单高效的全文搜索引擎</description>
	<lastBuildDate>Fri, 17 Feb 2012 04:41:27 +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>关于数据挖掘推荐系统实现</title>
		<link>http://www.sphinxsearch.org/archives/374</link>
		<comments>http://www.sphinxsearch.org/archives/374#comments</comments>
		<pubDate>Thu, 16 Feb 2012 13:39:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[数据挖掘]]></category>

		<guid isPermaLink="false">http://www.sphinxsearch.org/?p=374</guid>
		<description><![CDATA[作者：张荣华 先说一说问题，不知道大家有没有这样的经验，反正我是经常碰到。 举例1，某些网站每隔几天就发邮件给我，每次发的邮件内容都是一些我根本不感兴趣的东西，我不甚其扰，对其深恶痛绝。 举例2，添加具有某功能的一个msn机器人，每天都有几次突然蹦出一个窗口，推荐一堆我根本不想知道的内容，烦不烦啊， 我只好将你阻止掉。 每一个观众只想看他感兴趣的东西，而不是一下与之无关的事物，那么如何才能知道观众的兴趣所在呢，还是数据挖掘，经过一番思考，终于有点思路，即根据用户以往的浏览历史来预测用户将来的行为，也就是基于内容的推荐。 基于内容的推荐（Content-based Recommendation）是信息过滤技术的延续与发展，它是建立在项目的内容信息上作出推荐的，而不需要依据用户对项目的评价意见，更多地需要用机器学习的方法从关于内容的特征描述的事例中得到用户的兴趣资料。在基于内容的推荐系统中，项目或对象是通过相关的特征的属性来定义，系统基于用户评价对象的特征，学习用户的兴趣，考察用户资料与待预测项目的相匹配程度。用户的资料模型取决于所用学习方法，常用的有决策树、神经网络和基于向量的表示方法等。基于内容的用户资料是需要有用户的历史数据，用户资料模型可能随着用户的偏好改变而发生变化。 基于内容推荐方法的优点是： 1）不需要其它用户的数据，没有冷开始问题和稀疏问题。 2）能为具有特殊兴趣爱好的用户进行推荐。 3）能推荐新的或不是很流行的项目，没有新项目问题。 4）通过列出推荐项目的内容特征，可以解释为什么推荐那些项目。 5）已有比较好的技术，如关于分类学习方面的技术已相当成熟。 缺点是要求内容能容易抽取成有意义的特征，要求特征内容有良好的结构性，并且用户的口味必须能够用内容特征形式来表达，不能显式地得到其它用户的判断情况。 要实现内容推荐系统总体来说要经过4个大的步骤： 1 搜集数据，即搜集用户的行为资料，其中也包括很多方法，根据我找到的资料与以往的经验来看，web日志可以作为我们的切入点，即我们的数据来源。 2 过滤数据，web日志中有很多无用的信息，我们要把这些无用的信息排除掉，而且要区分出用户和日志数据之间的联系。 3 分析数据，利用分类聚类技术分析出这些日志数据之间的关联性，以及这些日志数据和用户之间的关联性，这也是最重要的一步。 4 输出结果。 有了这个思路之后，我们可以着手做第一步，即日志数据的收集 我们知道，大多数的web服务器都是有自己的日志记录的，比如说apache安装之后有一个logs目录，其中就有它的日志文件，一般说来它有自己的一个格式，比如说： 1浏览器所在主机的 IP 地址(ip)； 2访问日期和时间(date-time)；3客户机与服务器通信所用的方法(methed，get or post)； 4客户机请求访问页面的 URL； 5服务器返回的状态(status)； 6客户端浏览器的类型； 但是这个日志文件有一些不能克服的问题，或者我不知道如何克服，那么我先说说我的疑问，首先，这个日志文件中记录的是ip地址，据了解，网络中有很多计算机的ip地址是相同的，因为他们在一个统一的路由后面，这个比例可能达到25%。那么我们就无法根据ip地址来唯一确定一个用户。其次，一般的web服务器中都会用多个应用，那么其他应用的访问信息对我们来说有可能是多余的。再者，web服务器的日志形式比较单一，灵活性不大，可定制的余地很小，在日志数据中有效数据所占的比例较小。还有，一些静态文件的请求也会被web服务器记录下来，比如说js文件，css文件，还有图片文件，等等这些东西对内容推荐来说都是无用的资源。 基于上面3点原因，我认为可以自定义日志数据。为了解决用户唯一性，我们让应用为每一个浏览器生成一个clientId保存在对应的浏览器上，这样该浏览器只要访问网站，我们就可以确定这个浏览器的唯一性，当然我们仍然不能确定浏览器使用者的唯一性，但是我们可以更进一步，如果浏览器的使用者登陆网站的话，我们就可以使用用户id来确定用户的唯一性，不过大多数网站用户可能在使用网站的时候并不会登陆，我也是这样，没有关系，即使使用clientId问题也不会太大，随着社会的发展，计算机的拥有量逐渐增加，一般来说一个人只会使用一台固定的电脑，在公司里尤其是这样。所以我认为clientId的方案是可行的，也许有人要问，别人的浏览器禁止了cookie怎么办，那么我只能说没有办法，不过还好事实是绝大多数人都没有这样做。 接下来我们可以定义一下我们所需要的日志数据的格式，比如这样， ip，clientId，userId，url，datetime，get or post等等。 这样数据有效性会大大提高。 在得到较为有效的数据之后，我们还需要对这些数据进行再次过滤： 1 去掉一些非内容的url，这些数据也是无效数据，这些非内容的url需要我们自己手工的统计出来，然后和日志数据中的数据进行比对，将这些非内容数据从日志数据中清除出去。 2 同时我们也需要把post请求从日志数据中清除出去，或者我们在记录日志的时候根本不应该把post请求记录下来。 经过以上步骤之后我们就可以开始第3个阶段了，统计每个用户的访问的url，对这些url进行访问，得到对应的html中所包含的数据，这些数据都是文本，将有用的文本提取出来，然后对这些有用的文本进行聚类。这样就可以得到每个用户喜欢的几个类别。 聚类完成之后我们就可以开始分类了，即把最新的文章或者内容和对应的类别进行匹配，匹配成功之后，我们可以认为这个新文章或者内容可以推荐给对应的用户。 问题：以上的流程只适用于没有使用缓存的系统，但是一般大型的网站都会使用varnish，squid等等，使用它们之后我们就无法得到用户访问的日志数据了，所以如果使用了varnish或者squid，我们不得不再次面对web服务器的日志数据。 在不考虑varnish或者squid的情况下，使用lucene+jamon+htmlparse基本就可以实现以上推荐系统。]]></description>
			<content:encoded><![CDATA[<p>作者：张荣华</p>
<p>先说一说问题，不知道大家有没有这样的经验，反正我是经常碰到。</p>
<p>举例1，某些网站每隔几天就发邮件给我，每次发的邮件内容都是一些我根本不感兴趣的东西，我不甚其扰，对其深恶痛绝。<br />
举例2，添加具有某功能的一个msn机器人，每天都有几次突然蹦出一个窗口，推荐一堆我根本不想知道的内容，烦不烦啊， 我只好将你阻止掉。</p>
<p>每一个观众只想看他感兴趣的东西，而不是一下与之无关的事物，那么如何才能知道观众的兴趣所在呢，还是数据挖掘，经过一番思考，终于有点思路，即根据用户以往的浏览历史来预测用户将来的行为，也就是基于内容的推荐。<br />
基于内容的推荐（Content-based Recommendation）是信息过滤技术的延续与发展，它是建立在项目的内容信息上作出推荐的，而不需要依据用户对项目的评价意见，更多地需要用机器学习的方法从关于内容的特征描述的事例中得到用户的兴趣资料。在基于内容的推荐系统中，项目或对象是通过相关的特征的属性来定义，系统基于用户评价对象的特征，学习用户的兴趣，考察用户资料与待预测项目的相匹配程度。用户的资料模型取决于所用学习方法，常用的有决策树、神经网络和基于向量的表示方法等。基于内容的用户资料是需要有用户的历史数据，用户资料模型可能随着用户的偏好改变而发生变化。</p>
<p>基于内容推荐方法的优点是：<br />
1）不需要其它用户的数据，没有冷开始问题和稀疏问题。<br />
2）能为具有特殊兴趣爱好的用户进行推荐。<br />
3）能推荐新的或不是很流行的项目，没有新项目问题。<br />
4）通过列出推荐项目的内容特征，可以解释为什么推荐那些项目。<br />
5）已有比较好的技术，如关于分类学习方面的技术已相当成熟。</p>
<p>缺点是要求内容能容易抽取成有意义的特征，要求特征内容有良好的结构性，并且用户的口味必须能够用内容特征形式来表达，不能显式地得到其它用户的判断情况。</p>
<p>要实现内容推荐系统总体来说要经过4个大的步骤：<br />
1 搜集数据，即搜集用户的行为资料，其中也包括很多方法，根据我找到的资料与以往的经验来看，web日志可以作为我们的切入点，即我们的数据来源。</p>
<p>2 过滤数据，web日志中有很多无用的信息，我们要把这些无用的信息排除掉，而且要区分出用户和日志数据之间的联系。</p>
<p>3 分析数据，利用分类聚类技术分析出这些日志数据之间的关联性，以及这些日志数据和用户之间的关联性，这也是最重要的一步。</p>
<p>4 输出结果。</p>
<p>有了这个思路之后，我们可以着手做第一步，即日志数据的收集<br />
我们知道，大多数的web服务器都是有自己的日志记录的，比如说apache安装之后有一个logs目录，其中就有它的日志文件，一般说来它有自己的一个格式，比如说：<br />
1浏览器所在主机的 IP 地址(ip)； 2访问日期和时间(date-time)；3客户机与服务器通信所用的方法(methed，get or post)； 4客户机请求访问页面的 URL； 5服务器返回的状态(status)； 6客户端浏览器的类型；</p>
<p>但是这个日志文件有一些不能克服的问题，或者我不知道如何克服，那么我先说说我的疑问，首先，这个日志文件中记录的是ip地址，据了解，网络中有很多计算机的ip地址是相同的，因为他们在一个统一的路由后面，这个比例可能达到25%。那么我们就无法根据ip地址来唯一确定一个用户。其次，一般的web服务器中都会用多个应用，那么其他应用的访问信息对我们来说有可能是多余的。再者，web服务器的日志形式比较单一，灵活性不大，可定制的余地很小，在日志数据中有效数据所占的比例较小。还有，一些静态文件的请求也会被web服务器记录下来，比如说js文件，css文件，还有图片文件，等等这些东西对内容推荐来说都是无用的资源。</p>
<p>基于上面3点原因，我认为可以自定义日志数据。为了解决用户唯一性，我们让应用为每一个浏览器生成一个clientId保存在对应的浏览器上，这样该浏览器只要访问网站，我们就可以确定这个浏览器的唯一性，当然我们仍然不能确定浏览器使用者的唯一性，但是我们可以更进一步，如果浏览器的使用者登陆网站的话，我们就可以使用用户id来确定用户的唯一性，不过大多数网站用户可能在使用网站的时候并不会登陆，我也是这样，没有关系，即使使用clientId问题也不会太大，随着社会的发展，计算机的拥有量逐渐增加，一般来说一个人只会使用一台固定的电脑，在公司里尤其是这样。所以我认为clientId的方案是可行的，也许有人要问，别人的浏览器禁止了cookie怎么办，那么我只能说没有办法，不过还好事实是绝大多数人都没有这样做。</p>
<p>接下来我们可以定义一下我们所需要的日志数据的格式，比如这样，<br />
ip，clientId，userId，url，datetime，get or post等等。<br />
这样数据有效性会大大提高。</p>
<p>在得到较为有效的数据之后，我们还需要对这些数据进行再次过滤：<br />
1 去掉一些非内容的url，这些数据也是无效数据，这些非内容的url需要我们自己手工的统计出来，然后和日志数据中的数据进行比对，将这些非内容数据从日志数据中清除出去。<br />
2 同时我们也需要把post请求从日志数据中清除出去，或者我们在记录日志的时候根本不应该把post请求记录下来。</p>
<p>经过以上步骤之后我们就可以开始第3个阶段了，统计每个用户的访问的url，对这些url进行访问，得到对应的html中所包含的数据，这些数据都是文本，将有用的文本提取出来，然后对这些有用的文本进行聚类。这样就可以得到每个用户喜欢的几个类别。</p>
<p>聚类完成之后我们就可以开始分类了，即把最新的文章或者内容和对应的类别进行匹配，匹配成功之后，我们可以认为这个新文章或者内容可以推荐给对应的用户。</p>
<p>问题：以上的流程只适用于没有使用缓存的系统，但是一般大型的网站都会使用varnish，squid等等，使用它们之后我们就无法得到用户访问的日志数据了，所以如果使用了varnish或者squid，我们不得不再次面对web服务器的日志数据。</p>
<p>在不考虑varnish或者squid的情况下，使用lucene+jamon+htmlparse基本就可以实现以上推荐系统。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sphinxsearch.org/archives/374/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL联表查询及联表删除的方法</title>
		<link>http://www.sphinxsearch.org/archives/370</link>
		<comments>http://www.sphinxsearch.org/archives/370#comments</comments>
		<pubDate>Tue, 27 Dec 2011 16:34:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.sphinxsearch.org/?p=370</guid>
		<description><![CDATA[MySQL联表查询及联表删除都是经常需要用到的操作，下面对MySQL联表查询和联表删除都作了详细的介绍分析，希望对您有所帮助。 MySQL联表查询： reference mysql manul: 3.2.7. SELECT语法13.2.7.1. JOIN语法 13.2.7.2. UNION语法 eg1:·mysql&#62; SELECT t1.name, t2.salary FROM employee AS t1, info AS t2·-&#62;    WHERE t1.name = t2.name;eg2:·mysql&#62; SELECT table1.* FROM table1·-&#62;        LEFT JOIN table2 ON table1.id=table2.id·-&#62;        WHERE table2.id IS NULL; 联表删除： 1、从数据表t1 中把那些id值在数据表t2 里有匹配的记录全删除掉 DELETE t1 FROM t1,t2 WHERE t1.id=t2.id    或DELETE  FROM t1 USING t1,t2 WHERE t1.id=t2.id [...]]]></description>
			<content:encoded><![CDATA[<p>MySQL联表查询及联表删除都是经常需要用到的操作，下面对<a href="http://database.51cto.com/art/201010/229528.htm">MySQL</a>联表查询和联表删除都作了详细的介绍分析，希望对您有所帮助。</p>
<p>MySQL联表查询：</p>
<p>reference mysql manul:<br />
3.2.7. SELECT语法13.2.7.1. JOIN语法<br />
13.2.7.2.  UNION语法<br />
eg1:·mysql&gt; SELECT t1.name, t2.salary FROM employee AS t1, info AS  t2·-&gt;    WHERE t1.name = t2.name;eg2:·mysql&gt; SELECT table1.* FROM  table1·-&gt;        LEFT JOIN table2 ON table1.id=table2.id·-&gt;        WHERE  table2.id IS NULL;</p>
<p>联表删除：</p>
<p>1、从数据表t1 中把那些id值在数据表t2 里有匹配的记录全删除掉</p>
<p>DELETE t1 FROM t1,t2 WHERE t1.id=t2.id    或DELETE  FROM t1 USING t1,t2 WHERE  t1.id=t2.id</p>
<p>2、从数据表t1里在数据表t2里没有匹配的记录查找出来并删除掉</p>
<p>DELETE t1 FROM t1 LEFT JOIN T2 ON t1.id=t2.id WHERE t2.id IS NULL 或</p>
<p>DELETE  FROM t1,USING t1 LEFT JOIN T2 ON t1.id=t2.id WHERE t2.id IS NULL</p>
<p>3、从两个表中找出相同记录的数据并把两个表中的数据都删除掉</p>
<p>DELETE t1,t2 from t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t1.id=25</p>
<p>注意此处的delete t1,t2 from 中的t1,t2不能是别名</p>
<p>如：delete t1,t2 from table_name as t1 left join table2_name as t2 on  t1.id=t2.id where table_name.id=25 在数据里面执行是错误的（MYSQL 版本不小于5.0在5.0中是可以的）</p>
<p>上述语句改写成</p>
<p>delete table_name,table2_name from table_name as t1 left join table2_name as  t2 on t1.id=t2.id where table_name.id=25 在数据里面执行是错误的（MYSQL 版本小于5.0在5.0中是可以的）</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sphinxsearch.org/archives/370/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>十大数据挖掘算法及各自优势</title>
		<link>http://www.sphinxsearch.org/archives/367</link>
		<comments>http://www.sphinxsearch.org/archives/367#comments</comments>
		<pubDate>Thu, 22 Sep 2011 04:26:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[数据挖掘]]></category>

		<guid isPermaLink="false">http://www.sphinxsearch.org/?p=367</guid>
		<description><![CDATA[收藏一篇不错的 数据挖掘算法介绍的文章]]></description>
			<content:encoded><![CDATA[<p>国际权威的学术组织the IEEE International Conference on Data Mining (ICDM) 2006年12月评选出了数据挖掘领域的十大经典算法：C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naive Bayes, and CART.</p>
<p>不仅仅是选中的十大算法，其实参加评选的18种算法，实际上随便拿出一种来都可以称得上是经典算法，它们在数据挖掘领域都产生了极为深远的影响。</p>
<p>1. C4.5</p>
<p>C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3算法. C4.5算法继承了ID3算法的优点，并在以下几方面对ID3算法进行了改进：</p>
<p>1) 用信息增益率来选择属性，克服了用信息增益选择属性时偏向选择取值多的属性的不足；</p>
<p>2) 在树构造过程中进行剪枝；</p>
<p>3) 能够完成对连续属性的离散化处理；</p>
<p>4) 能够对不完整数据进行处理。</p>
<p>C4.5算法有如下优点：产生的分类规则易于理解，准确率较高。其缺点是：在构造树的过程中，需要对数据集进行多次的顺序扫描和排序，因而导致算法的低效。</p>
<p>2. The k-means algorithm 即K-Means算法</p>
<p>k-means algorithm算法是一个聚类算法，把n的对象根据他们的属性分为k个分割，k &lt; n。它与处理混合正态分布的最大期望算法很相似，因为他们都试图找到数据中自然聚类的中心。它假设对象属性来自于空间向量，并且目标是使各个群组内部的均方误差总和最小。</p>
<p>3. Support vector machines</p>
<p>支持向量机，英文为Support Vector Machine，简称SV机（论文中一般简称SVM）。它是一种監督式學習的方法，它广泛的应用于统计分类以及回归分析中。支持向量机将向量映射到一个更高维的空间里，在这个空间里建立有一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面。分隔超平面使两个平行超平面的距离最大化。假定平行超平面间的距离或差距越大，分类器的总误差越小。一个极好的指南是C.J.C Burges的《模式识别支持向量机指南》。van der Walt 和 Barnard 将支持向量机和其他分类器进行了比较。</p>
<p>4. The Apriori algorithm</p>
<p>Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法。其核心是基于两阶段频集思想的递推算法。该关联规则在分类上属于单维、单层、布尔关联规则。在这里，所有支持度大于最小支持度的项集称为频繁项集，简称频集。</p>
<p>5. 最大期望(EM)算法</p>
<p>在统计计算中，最大期望（EM，Expectation–Maximization）算法是在概率（probabilistic）模型中寻找参数最大似然估计的算法，其中概率模型依赖于无法观测的隐藏变量（Latent Variabl）。最大期望经常用在机器学习和计算机视觉的数据集聚（Data Clustering）领域。</p>
<p>6. PageRank</p>
<p>PageRank是Google算法的重要内容。2001年9月被授予美国专利，专利人是Google创始人之一拉里·佩奇（Larry Page）。因此，PageRank里的page不是指网页，而是指佩奇，即这个等级方法是以佩奇来命名的。</p>
<p>PageRank根据网站的外部链接和内部链接的数量和质量俩衡量网站的价值。PageRank背后的概念是，每个到页面的链接都是对该页面的一次投票，被链接的越多，就意味着被其他网站投票越多。这个就是所谓的“链接流行度”——衡量多少人愿意将他们的网站和你的网站挂钩。PageRank这个概念引自学术中一篇论文的被引述的频度——即被别人引述的次数越多，一般判断这篇论文的权威性就越高。</p>
<p>7. AdaBoost</p>
<p>Adaboost是一种迭代算法，其核心思想是针对同一个训练集训练不同的分类器(弱分类器)，然后把这些弱分类器集合起来，构成一个更强的最终分类器 (强分类器)。其算法本身是通过改变数据分布来实现的，它根据每次训练集之中每个样本的分类是否正确，以及上次的总体分类的准确率，来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练，最后将每次训练得到的分类器最后融合起来，作为最后的决策分类器。</p>
<p>8. kNN: k-nearest neighbor classification</p>
<p>K最近邻(k-Nearest Neighbor，KNN)分类算法，是一个理论上比较成熟的方法，也是最简单的机器学习算法之一。该方法的思路是：如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别，则该样本也属于这个类别。</p>
<p>9. Naive Bayes</p>
<p>在众多的分类模型中，应用最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型（Naive Bayesian Model，NBC）。 朴素贝叶斯模型发源于古典数学理论，有着坚实的数学基础，以及稳定的分类效率。同时，NBC模型所需估计的参数很少，对缺失数据不太敏感，算法也比较简单。理论上，NBC模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此，这是因为NBC模型假设属性之间相互独立，这个假设在实际应用中往往是不成立的，这给NBC模型的正确分类带来了一定影响。在属性个数比较多或者属性之间相关性较大时，NBC模型的分类效率比不上决策树模型。而在属性相关性较小时，NBC模型的性能最为良好。</p>
<p>10. CART: 分类与回归树</p>
<p>CART, Classification and Regression Trees。 在分类树下面有两个关键的思想。第一个是关于递归地划分自变量空间的想法；第二个想法是用验证数据进行剪枝。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sphinxsearch.org/archives/367/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>libphp5.so: cannot restore segment prot after reloc: Permission denied</title>
		<link>http://www.sphinxsearch.org/archives/364</link>
		<comments>http://www.sphinxsearch.org/archives/364#comments</comments>
		<pubDate>Wed, 21 Sep 2011 10:19:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[lamp]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.sphinxsearch.org/?p=364</guid>
		<description><![CDATA[php5 apache2.2 安装时出现 libphp5.so: cannot restore segment prot after reloc: Permission denied 的原因及解决办法]]></description>
			<content:encoded><![CDATA[<div>
<ul><strong>libphp5.so: cannot restore segment prot after reloc: Permission denied</strong></ul>
</div>
<div id="blog_content">
<div>转自：http://hudeyong926.iteye.com/blog/1063470</div>
<div>如果在启动或者重启apache时候，出现以下信息：<br />
[root@miix htdocs]# apachectl -k  restart<br />
httpd: Syntax error on line 53 of /usr/local/apache2/conf/httpd.conf:  Cannot load /usr/local/apache2/modules/libphp5.so into server:  /usr/local/apache2/modules/libphp5.so: cannot restore segment prot after reloc:  Permission denied</div>
<div>这是由于selinux引起的，使用 chcon 指令改 libphp（4 | 5）.so  預設的安全性政策。所以需要这样一下：<br />
[root@GR00 root]# <span style="color: #ff0000;">chcon -t  texrel_shlib_t /usr/local/webserver/apache2/modules/libphp5.so</span></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.sphinxsearch.org/archives/364/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>frameset 框架当模板时显示空白的解决办法</title>
		<link>http://www.sphinxsearch.org/archives/359</link>
		<comments>http://www.sphinxsearch.org/archives/359#comments</comments>
		<pubDate>Mon, 19 Sep 2011 10:48:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.sphinxsearch.org/?p=359</guid>
		<description><![CDATA[问题：后台如下，直接查看后台，源代码存在，但是就是显示不出来。

解决办法：这是因为utf-8 编码的html 文件里面包含BOM造成的，可以使用专门的程序去掉bom，查看这里，也可以把这个html文件删除了，重新建立。注意可以把源代码先复制在其他utf8编辑器里，比如 editplus，然后重新建立]]></description>
			<content:encoded><![CDATA[<p>问题：后台如下，直接查看后台，源代码存在，但是就是显示不出来。</p>
<p>解决办法：<span style="color: #ff0000;">这是因为utf-8 编码的html 文件里面包含BOM造成的，可以使用专门的程序去掉bom，查看这里，也可以把这个html文件删除了，重新建立。注意可以把源代码先复制在其他utf8编辑器里，比如 editplus，然后重新建立</span></p>
<div id="_mcePaste">&lt;html xmlns=&#8221;http://www.w3.org/1999/xhtml&#8221;&gt;&lt;head&gt;</div>
<div id="_mcePaste">&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html;charset=utf-8&#8243;&gt;</div>
<div id="_mcePaste">&lt;title&gt;管理中心&lt;/title&gt;</div>
<div id="_mcePaste">&lt;/head&gt;</div>
<div id="_mcePaste">&lt;frameset rows=&#8221;59,*&#8221; frameborder=&#8221;no&#8221; border=&#8221;0&#8243; framespacing=&#8221;0&#8243;&gt;</div>
<div id="_mcePaste">&lt;frame src=&#8221;k_top.php&#8221; noresize=&#8221;noresize&#8221; frameborder=&#8221;0&#8243; name=&#8221;topFrame&#8221; marginwidth=&#8221;0&#8243; marginheight=&#8221;0&#8243; scrolling=&#8221;no&#8221;&gt;</div>
<div id="_mcePaste">&lt;frameset rows=&#8221;*&#8221; cols=&#8221;195,*&#8221; id=&#8221;frame&#8221;&gt;</div>
<div id="_mcePaste">&lt;frame src=&#8221;k_left.php&#8221; name=&#8221;leftFrame&#8221; noresize=&#8221;noresize&#8221; marginwidth=&#8221;0&#8243; marginheight=&#8221;0&#8243; frameborder=&#8221;0&#8243; scrolling=&#8221;auto&#8221;&gt;</div>
<div id="_mcePaste">&lt;frame src=&#8221;k_right.php&#8221; name=&#8221;main&#8221; marginwidth=&#8221;0&#8243; marginheight=&#8221;0&#8243; frameborder=&#8221;0&#8243; scrolling=&#8221;yes&#8221;&gt;</div>
<div id="_mcePaste">&lt;/frameset&gt;</div>
<div id="_mcePaste">&lt;frame src=&#8221;UntitledFrame-1&#8243; noresize=&#8221;noresize&#8221; frameborder=&#8221;0&#8243; name=&#8221;bottomFrame&#8221; marginwidth=&#8221;0&#8243; marginheight=&#8221;0&#8243; scrolling=&#8221;no&#8221;&gt;</div>
<div id="_mcePaste">&lt;/frameset&gt;</div>
<div id="_mcePaste">&lt;/html&gt;</div>
<div>#############附带 php 去除 bom的程序 文章 #################</div>
<div>
<div id="article">
<p><span style="font-family: 'Times New Roman';">BOM信息是文件开头的一串隐藏的字符，用于让某些编辑器识别这是个UTF-8编码的文件。但PHP在读取文件时会把这些字符读出，从而形成了文件开头含有一些无法识别的字符的问题。 </span></p>
<p><span style="font-family: 'Times New Roman';">比如用UTF-8格式保存的生成图片的PHP文件，因为文件头隐藏的BOM信息也被下发，导致生成的图片数据不对，浏览器无法识别。 </span></p>
<p><span style="font-family: 'Times New Roman';">要检测一个UTF-8文件是否含有BOM信息，就是检测文件开头的字三个符，是否为0xEF,  0xBB, 0xBF。下面这个小程序，用户遍历某个目录下所有文件，并检测是否加了BOM。<br />
&lt;? php<br />
//此文件用于快速测试UTF8编码的文件是不是加了BOM，并可自动移除<br />
//By Bob Shen<br />
$basedir=&#8221;.&#8221;;  //修改此行为需要检测的目录，点表示当前目录<br />
$auto=1; //是否自动移除发现的BOM信息。1为是，0为否。<br />
//此文件用于快速测试UTF8编码的文件是不是加了BOM，并可自动移除<br />
//By Bob Shen<br />
$basedir=&#8221;.&#8221;;  //修改此行为需要检测的目录，点表示当前目录<br />
$auto=1; //是否自动移除发现的BOM信息。1为是，0为否。<br />
//以下不用改动<br />
if ($dh = opendir($basedir)) {<br />
while (($file = readdir($dh)) !== false)  {<br />
if ($file!=&#8217;.&#8217; &amp;&amp; $file!=&#8217;..&#8217; &amp;&amp;  !is_dir($basedir.&#8221;/&#8221;.$file)) echo &#8220;filename: $file  &#8220;.checkBOM(&#8220;$basedir/$file&#8221;).&#8221; &lt;br&gt;&#8221;;<br />
}<br />
closedir($dh);<br />
}<br />
function checkBOM ($filename) {<br />
global $auto;<br />
$contents=file_get_contents($filename);<br />
$charset[1]=substr($contents, 0,  1);<br />
$charset[2]=substr($contents, 1, 1);<br />
$charset[3]=substr($contents,  2, 1);<br />
if (ord($charset[1])==239 &amp;&amp; ord($charset[2])==187 &amp;&amp;  ord($charset[3])==191) {<br />
if ($auto==1) {<br />
$rest=substr($contents, 3);<br />
rewrite ($filename, $rest);<br />
return (&#8220;&lt;font color=red&gt;BOM found,  automatically removed.&lt;/font&gt;&#8221;);<br />
} else {<br />
return (&#8220;&lt;font  color=red&gt;BOM found.&lt;/font&gt;&#8221;);<br />
}<br />
}<br />
else return (&#8220;BOM Not  Found.&#8221;);<br />
}<br />
function rewrite ($filename, $data) {<br />
$filenum=fopen($filename,&#8221;w&#8221;);<br />
flock($filenum,LOCK_EX);<br />
fwrite($filenum,$data);<br />
fclose($filenum);<br />
}<br />
将以上代码另存为del_bom.php，修改需要检测的目录后运行。这样可能有助于检测是哪个文件带有了BOM信息导致所有页面开头都有那么一段空白。</span></p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.sphinxsearch.org/archives/359/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php-fpm中文文档</title>
		<link>http://www.sphinxsearch.org/archives/354</link>
		<comments>http://www.sphinxsearch.org/archives/354#comments</comments>
		<pubDate>Wed, 14 Sep 2011 08:20:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[lamp]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.sphinxsearch.org/?p=354</guid>
		<description><![CDATA[收藏一下php-fpm的中文文档，感谢原作者和翻译！]]></description>
			<content:encoded><![CDATA[<p>Copy from <a href="http://syre.blogbus.com/logs/20092011.html">http://syre.blogbus.com/logs/20092011.html</a></p>
<p><a href="http://www.php-fpm.com/" target="_blank">原文链接：http://php-fpm.anight.org/<br />
wiki：http://www.php-fpm.com/</a></p>
<ul>
<li><strong>什么是</strong><strong> FastCGI</strong></li>
</ul>
<p><strong>FastCGI</strong> 是一个可伸缩、高速的在web server和脚本语言间通迅的接口。关于FastCGI技术的更多信息可以在<a title="http://www.fastcgi.com/drupal/" href="http://www.fastcgi.com/drupal/">官方网站</a>和<a title="http://en.wikipedia.org/wiki/FastCGI" href="http://en.wikipedia.org/wiki/FastCGI">Wikipedia</a>看到。</p>
<p><strong>FastCGI</strong> 被许多脚本语言所支持，包括 <strong>php</strong>，如果用 <strong>&#8211;enable-fastcgi</strong> 选项编译的话。</p>
<p>多数流行的web server都支持 <strong>FastCGI</strong>。包括<a title="http://httpd.apache.org" href="http://httpd.apache.org/">Apache</a>（mod_fastcgi和mod_fcgid），<a title="http://www.zeus.com" href="http://www.zeus.com/">Zeus</a>，<a title="http://nginx.net/" href="http://nginx.net/">nginx</a>和<a title="http://www.lighttpd.net/" href="http://www.lighttpd.net/">lighttpd</a>。</p>
<p><strong>FastCGI</strong> 的主要优点是把动态语言和 web server 分离开来。这种技术允许 web server 和动态语言运行在不同的主机上。这可以改进可扩展性和安全性而没有大的效率损失。</p>
<p>php-fpm 可以和任何支持外部 <strong>FastCGI</strong> 技术的 web server 一起使用。</p>
<p><strong>php-fpm</strong><strong>是做啥用的</strong><strong> </strong></p>
<p>很不幸，官方网站 <a title="http://php.net" href="http://php.net/">php.net</a> 上的 php 在将 FastCGI SAPI 用于生产环境方面有许多已知的问题。</p>
<p>下面是关于启用 FastCGI SAPI 时的问题和 php-fpm 是如何解决他们的对比列表。</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><strong>描述</strong><strong></strong></td>
<td><strong>php</strong><strong>自带的</strong><strong></strong></td>
<td><strong>spawn-fcgi + spawn-php.sh + daemontools</strong><strong></strong></td>
<td><strong>php-fpm</strong><strong></strong></td>
</tr>
<tr>
<td>php守护进程化： pid file, log file, setsid(), setuid(), setgid(), chroot()</td>
<td>(-)</td>
<td>(+)</td>
<td>(+)</td>
</tr>
<tr>
<td>进程管理。可以用   &#8220;graceful&#8221; 来停止并启动 php worker 进程而不会丢失请求。能够平滑地升级配置和二进制程序而不丢失任何请求。</td>
<td>php4 (-), php5 (只有 graceful)</td>
<td>(-)</td>
<td>(+)</td>
</tr>
<tr>
<td>严格限制来源请求的   web server 的 ip 地址</td>
<td>php4 (-) php5 (+) (从 5.2.2 开始)</td>
<td>(-)</td>
<td>(+)</td>
</tr>
<tr>
<td>根据负载动态调整进程数</td>
<td>(-)</td>
<td>(-)</td>
<td>Todo</td>
</tr>
<tr>
<td>用不同的 uid/gid/chroot/environment   和不同的 php.ini 选项启动 worder 进程。你不需要   safe mode 了！</td>
<td>(-)</td>
<td>(-)</td>
<td>(+)</td>
</tr>
<tr>
<td>记录 worker 进程 stdout 和 stderr 日志</td>
<td>(-)</td>
<td>(-)</td>
<td>(+)</td>
</tr>
<tr>
<td>如果使用优化器，在共享内存意外破坏的情况下紧急重启所有的进程</td>
<td>(-)</td>
<td>(-)</td>
<td>(+)</td>
</tr>
<tr>
<td>如果 set_time_limit() 失败，确保进程会结束</td>
<td>(-)</td>
<td>(-)</td>
<td>(+)</td>
</tr>
<tr>
<td colspan="4">特色功能 Error header、优化的上传支持、fastcgi_finish_request()</td>
</tr>
</tbody>
</table>
<p><strong>特色功能</strong><strong></strong></p>
<p>所有这些特性都是“不打断”的方式实现的。也就是说，如果你不使用它们，它们的存在不会影响php的功能性——他们都是“透明”的。</p>
<h4>Error header</h4>
<p>范围：php.ini 选项<br />
分类：便利性</p>
<p>默认情况下，如果被访问的php脚本包含语法错误，用户会收到一个空的“200 ok”页。这是不方便的。Error header 这个 php.ini 选项允许在这种情况下产生一个 HTTP 错误码，比如“HTTP/1.0 550 Server Made Big Boo”，从而中断web server请求并显示一个正确的错误页。</p>
<p>如果要实现这样的功能，需要在 php.ini 中添加一条 <code>fastcgi.error_header = "HTTP/1.0 550 Server Made Big Boo"</code></p>
<p>在 php-5.2.4 中添加了类似，但不相同的功能：如果被访问的php脚本包含语法错误，并且 <code>display_errors = off</code>，会立刻返回“HTTP/1.0 500 Internal Server Error”。</p>
<p>如果你需要设定一个 503 错误，或者想要使这个行为独立于 display_errors 的设置，那么可以使用<code>fastcgi.error_header</code>。如果你在 php-5.2.5 或以上版本上启用 php-fpm，那么 <code>fastcgi.error_header</code>的优先级更高。</p>
<h4>优化的上传支持</h4>
<p>实质：web server 支持<br />
类型：优化</p>
<p>这个特性正如名字那样，可以加速对大 POST 请求的处理速度，包括文件上传。优化是通过将请求体已写入一个临时文件，然后 fastcgi 协议传递文件名而不是请求体到来实现的。目前就我所知，只有 nginx0.5.9 以上才支持这个功能。显然，这种模式只在 php 和 web server 在一台机器上的时候才能用。</p>
<p>nginx 样例配置：</p>
<p>location ~ \.php$ {<br />
fastcgi_pass_request_body off;<br />
client_body_in_file_only clean;<br />
fastcgi_param  REQUEST_BODY_FILE  $request_body_file;<br />
&#8230;<br />
fastcgi_pass &#8230;;<br />
}</p>
<p>在php中不需要配置任何东西。如果php收到了参数REQUEST_BODY_FILE，就读取其中的请求体，如果没有，就自行从fastcgi协议中读取请求体。</p>
<p>结合这个特性，可以考虑对临时文件使用内存文件系统，例如tmpfs(linux)：</p>
<p>client_body_temp_path /dev/shm/client_body_temp;</p>
<h4>fastcgi_finish_request()</h4>
<p>范围：php 函数<br />
类型：优化</p>
<p>这个特性可以提高一些 php 请求的处理速度。如果有些处理可以在页面生成完后进行，就可以使用这种优化。比如，在 memcached 中保存 session 就可以在页面交给 web server 后进行。fastcgi_finisth_request() ，这一特性可以结束响应输出，web server 可以立即开始交给等不及的客户端，而此刻，php 可以在请求的上下文环境中处理许多事情。比如保存session，转换上传的视频，处理统计等等。</p>
<p>fastcgi_finisth_request() 会触发 shutdown 函数运行。</p>
<h4>request_slowlog_timeout</h4>
<p>范围: php-fpm.conf 选项<br />
分类: 方便</p>
<p>这个选项能让你跟踪执行缓慢的脚本并把他们连同调用栈一起记录再日志文件中。例如如下设置：</p>
<p>&lt;value name=&#8221;request_slowlog_timeout&#8221;&gt;5s&lt;/value&gt;<br />
&lt;value&gt;logs/slow.log&lt;/value&gt;</p>
<p>记录的 slow.log 可能是这个样子：</p>
<p>Sep 21 16:22:19.399162 pid 29715 (pool default)<br />
script_filename = /local/www/stable/www/catalogue.php<br />
[0x00007fff23618120] mysql_query() /srv/stable/common/Database/class.MySQLRequest.php:20<br />
[0x00007fff23618560] getResult() /srv/stable/common/Database/class.Facade.php:106<br />
[0x00007fff23618aa0] query() /srv/stable/common/mysite.com/ORM/class.UsersMapper.php:99<br />
[0x00007fff23618d60] resolveByID() /srv/stable/common/mysite.com/ORM/class.User.php:629<br />
[0x00007fff236193b0] getData() /srv/stable/common/class.DataEntity.php:90<br />
[0x00007fff236195d0] load() /srv/stable/common/mysite.com/ORM/class.User.php:587<br />
[0x00007fff23619a00] getIsHidden() /srv/stable/common/mysite.com/class.User.php:42<br />
[0x00007fff2361a470] getName() /local/www/stable/www/catalogue.php:41</p>
<p>同时，在 error.log 中保存了如下记录：</p>
<p>Sep 21 16:22:19.399031 [WARNING] fpm_request_check_timed_out(), line 135: child 29715, script &#8216;/local/www/stable/www/catalogue.php&#8217; (pool default) executing too slow (5.018002 sec), logging</p>
<p>正如你再例子中看到的，脚本运行了 5 秒以上，并很可能是由于 mysql 响应慢造成的（top backtrace）。</p>
<p><strong>FAQ</strong></p>
<p>Q：php-fpm 可以和 ZendOptimize 一起用吗？<br />
A：完全可以。</p>
<p>Q：php-fpm 可以和 ZendPlatform、xcache、eAccelerator、APC 等的优化器一起用吗？<br />
A：是的。php-fpm 的架构和任何一种用于高速 opcode 缓存的共享内存都适用。唯一的限制是：所有的 worker 进程只能适用一个缓存，即使它们用不同的 uid/gid 运行</p>
<p>Q：为什么我要给 php 打补丁呢？spawn-fcgi 不需要这样！<br />
A：php-fpm 的创建是为了增强方便管理。没有打过补丁的 php 不能做到：</p>
<p>平滑重启 php 而不丢失请求，包括升级 php 二进制文件 以及/或者 扩展。<br />
用不同的 uid / gid / chroot 环境运行 worker 进程<br />
所有的设置只有一个配置文件<br />
根据负载动态请求 （TODO）<br />
对 php 请求实时统计性能 （TODO）</p>
<p>Q：为什么要用 root 运行 php-fpm 呢？这安全吗？<br />
A：用 root 启动 php-fpm 只有在你打算用不同 uid/gid 的 php 来处理请求时才有意义。比如，在共享主机上的不同站点。因为只有在 master 进程用 root 运行的时候，才可以建立不同 uid/gid 的子进程。这是相当安全的。master 进程自己从来不会去处理请求。<br />
在任何情况下，php-fpm 都不会用 root 身份来处理请求。</p>
<p>Q：php-fpm 可以加速 php 脚本处理速度吗？<br />
A：不，它不会影响处理速度。不过，如果你使用一些特殊特性，对于一些特定的请求还是可以有性能提升的。</p>
<p>Q：如果我把我的网站从 mod_php 迁移到 php-fpm ，我会得到性能提升吗？<br />
A：通常，当有服务器上有大量空闲内存可用时，能从迁移到 php-fpm 中得到的性能提升可能不大。但是如果内存并不充裕，性能提升还是很可观的，在某些情况下可以达到 300-500%。这可能是由于 nginx + php-fpm 一般会比 Apache + mod_php 使用更少的内存。而且 VFS 缓存会由于更多的空余内存而更有效地工作。</p>
<p>Q：php-fpm 将来会被官方的 php 包含吗？<br />
A：我希望如此。目前，php-fpm 代码的协议是 GPL 。所以现在 php-fpm 的代码与 php 协议（类似 bsd）并不匹配。这是临时性措施。这样的选择是为了简化开发过程。一旦代码的功能完备，比如自适应生成子进程和其他一些东西，协议会改为一个相匹配的。之后，php-fpm 会正式发布给 php 开发团队，并被建议包含。</p>
<p><strong>邮件列表</strong><strong></strong></p>
<p>如果你有问题的话，请不要犹豫在邮件组里写邮件。</p>
<p>English: <a title="http://groups.google.com/group/highload-php-en" href="http://groups.google.com/group/highload-php-en">highload-php-en</a> Russian: <a title="http://groups.google.com/group/highload-php-ru" href="http://groups.google.com/group/highload-php-ru">highload-php-ru</a></p>
<p><strong>文档</strong><strong></strong></p>
<p>php-fpm 已经在 Linux、MacOSX、Solaris 和 FreeBSD 上测试通过。</p>
<p>确信 libxml2（在某些系统上叫做libxml2-devel）已经安装。</p>
<p>下载最小的 <a title="http://php.net/download/" href="http://php.net/download/">php</a> 和 <a title="http://php-fpm.anight.org/download.html" href="http://php-fpm.anight.org/download.html">php-fpm</a></p>
<pre>$ bzip2 -cd php-5.2.5.tar.bz2 | tar xf -
$ gzip -cd php-5.2.5-fpm-0.5.7.diff.gz | patch -d php-5.2.5 -p1
$ cd php-5.2.5 &amp;&amp; ./configure --enable-fastcgi --enable-fpm
$ make all install</pre>
<p>编辑 <code>$prefix/etc/php-fpm.conf</code></p>
<p>运行 <code>$prefix/bin/php-cgi --fpm</code></p>
<p>仔细检查 <code>$prefix/logs/php-fpm.log</code></p>
<p>运行 phpinfo() 检查你的网站是否还正常运行</p>
<p>master 进程的 pid 被存放在 <code>$prefix/logs/php-fpm.pid</code></p>
<p>master进程可以理解以下信号：</p>
<table border="1" cellpadding="0">
<tbody>
<tr>
<td>SIGINT, SIGTERM</td>
<td>立刻终止</td>
</tr>
<tr>
<td>SIGQUIT</td>
<td>平滑终止</td>
</tr>
<tr>
<td>SIGUSR1</td>
<td>重新打开日志文件</td>
</tr>
<tr>
<td>SIGUSR2</td>
<td>平滑重载所有worker进程并重新载入配置和二进制模</td>
</tr>
</tbody>
</table>
<p><strong>关于</strong><strong></strong></p>
<p>嗨，我的名字叫 Andrei Nigmatulin， 我是 php-fpm 的作者。</p>
<p>从 2004 年开始，我就在等有什么人让 PHP FastCGI 能满足产品环境，但我等不下去了。</p>
<p>php-fpm 是在数个项目种使用 PHP 的 FastCGI SAPI 中的知识、经验和想法的产物。</p>
<p>php-fpm 可以在 <a title="http://www.gnu.org/licenses/gpl.txt" href="http://www.gnu.org/licenses/gpl.txt">GPL</a> 协议下用在公共用途。和 php-fpm 绑定的修改版的 <a title="http://monkey.org/~provos/libevent/" href="http://monkey.org/~provos/libevent/">libevent</a> 是在 BSD 协议下发布的。</p>
<p>我需要得到您的反馈——新的想法和建议——来改进和优化 php FastCGI SAPI。 如果您有什么想法、意见、补充和建议，我会很高兴，很原意听取，也许还会实现他们。给给我发邮件吧。（地址在本页的末尾）。</p>
<p>如果你想支持 php-fpm 的开发，可以作一些捐赠： Paypal Yandex.Money</p>
<p>15/05/2007 &#8211; 第一次提交到 php-fpm.</p>
<p>andrei dot nigmatulin at gmail dot com</p>
<p>译注：<br />
php-fpm还带有一个更方便的脚本，在$prefix/sbin/php-fpm。可以用php-fpm start|graceful|restart|stop来维护。稍编辑一下就可以让它使用配置文件。</p>
<p>后记：</p>
<p>最开始，php-fpm 只有俄文文档，弄的我很郁闷，于是我先用 google 翻译先弄成英文，然后再人工翻成中文。这当中会难免会在我自己的英文水平引起的错误之外，再多些错误出来。后来终于有了一个英文的 wiki，并邀请我提供中文翻译。同时，距上一次翻译（2008年5月）以后，原来的文档也已经有了更新。于是我就根据英文 wiki ，重新翻译了一遍。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sphinxsearch.org/archives/354/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>由php nginx 出现 500错误的启示</title>
		<link>http://www.sphinxsearch.org/archives/350</link>
		<comments>http://www.sphinxsearch.org/archives/350#comments</comments>
		<pubDate>Wed, 14 Sep 2011 07:53:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[lamp]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.sphinxsearch.org/?p=350</guid>
		<description><![CDATA[由php nginx 出现 500错误的启示]]></description>
			<content:encoded><![CDATA[<p>今在一程序里，传递某个session_id后竟然返回 nginx 500错误。而传递另外一个session_id则不会出现错误，打开调试模式后才知道。是因为php出现语法错误，且在php.ini中关闭了display_error，并在程序中关闭了错误信息，所以直接返回 500错误给nginx。</p>
<p>php-fpm 文档中有这样解析：</p>
<p><span style="color: #339966;"><span style="color: #800000;"><strong><span style="color: #993300;">如果被访问的php脚本包含语法错误，并且display_errors设为false，且没有进一步的设置，会立刻返回&#8221;HTTP/1.0 500 Internal  Server  Error&#8221;。如果你需要设定一个不同于500的错误码（已经在许多情况下被使用）。或者想要使这个行为独立于display_errors的设置，那么可以使用fastcgi.error_header。如果你同时使用php-5.2.5或以上版本和php-fpm，那么  fastcgi.error_header的优先级更高。</span></strong></span></span></p>
<p>开启调试模式后遂查找到该问题，即解决了此问题。</p>
<p>由此得到一些启示：一些问题看起来发生在某个模块，其发生根源可能会在该模块的相关模块。遇此问题，定要顺藤摸瓜 ，溯源而破之！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sphinxsearch.org/archives/350/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>phpcms V9首页默认幻灯焦点，不显示&#8212;解决方法</title>
		<link>http://www.sphinxsearch.org/archives/346</link>
		<comments>http://www.sphinxsearch.org/archives/346#comments</comments>
		<pubDate>Sat, 10 Sep 2011 18:06:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[phpcms]]></category>

		<guid isPermaLink="false">http://www.sphinxsearch.org/?p=346</guid>
		<description><![CDATA[首页幻灯片焦点图，在本地环境(windows)可以显示，在服务器(linux)上面不显示 原因： linux文件名大小写原因造成的，， 解决方法： 文件夹中的 sGallery.js 把其中的大写G 改成 小写g 具体位置： \statics\js\jquery.sGallery.js 修改jquery.sgallery.js]]></description>
			<content:encoded><![CDATA[<p>首页幻灯片焦点图，在本地环境(windows)可以显示，在服务器(linux)上面不显示</p>
<p>原因：</p>
<p>linux文件名大小写原因造成的，，</p>
<p>解决方法：</p>
<p>文件夹中的 sGallery.js 把其中的大写G 改成 小写g</p>
<p>具体位置：</p>
<p>\statics\js\jquery.sGallery.js   修改jquery.sgallery.js</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sphinxsearch.org/archives/346/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Centos 下查看服务器CPU的核数</title>
		<link>http://www.sphinxsearch.org/archives/342</link>
		<comments>http://www.sphinxsearch.org/archives/342#comments</comments>
		<pubDate>Thu, 08 Sep 2011 03:47:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.sphinxsearch.org/?p=342</guid>
		<description><![CDATA[实时查看CPU每核的线程利用率 top 后按 1，如下图所示，我们可以看到有8个CPU，每行显示的就是该CPU的使用率： 查看当前操作系统内核信息 # uname -a Linux db1.xxx.com 2.6.18-194.el5xen #1 SMP Fri Apr 2 15:34:40 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux 依次是 •操作系统名称： Linux uname -s 可以单独看到这个信息 •计算机名： db1.xxx.com uname -n 可以单独看到这个信息 •操作系统发行编号： 2.6.18-194.el5xen uname -r 可以单独看到这个信息 •操作系统发行时间： #1 SMP Fri Apr 2 15:34:40 EDT 2010 uname -v 可以单独看到这个信息 •计算机类型，进程类型，硬件平台：x86_64 uname –m,uname –p,uname [...]]]></description>
			<content:encoded><![CDATA[<p>实时查看CPU每核的线程利用率</p>
<p>top 后按 1，如下图所示，我们可以看到有8个CPU，每行显示的就是该CPU的使用率：</p>
<p>查看当前操作系统内核信息</p>
<p># uname -a<br />
Linux db1.xxx.com 2.6.18-194.el5xen #1 SMP Fri Apr 2 15:34:40 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux</p>
<p>依次是 </p>
<p>•操作系统名称： Linux   uname -s 可以单独看到这个信息<br />
•计算机名： db1.xxx.com  uname -n 可以单独看到这个信息<br />
•操作系统发行编号： 2.6.18-194.el5xen  uname -r 可以单独看到这个信息<br />
•操作系统发行时间： #1 SMP Fri Apr 2 15:34:40 EDT 2010  uname -v 可以单独看到这个信息<br />
•计算机类型，进程类型，硬件平台：x86_64    uname –m,uname –p,uname -i 可以单独看到这个信息<br />
•操作系统信息：GNU/Linux  uname -o 可以单独看到这个信息<br />
参数说明：<br />
-a或—all          显示全部的信息。<br />
-m或—machine 显示电脑类型。<br />
-n或-nodename 显示在网络上的主机名称。<br />
-r或—release    显示操作系统的发行编号。<br />
-s或—sysname 显示操作系统名称。<br />
-v 显示操作系统的版本。<br />
&#8211;help 显示帮助。<br />
&#8211;version 显示版本信息。</p>
<p>参看：http://www.lx138.com/page.php?ID=100</p>
<p>查看当前操作系统发行版信息</p>
<p># lsb_release -a<br />
LSB Version:    :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch<br />
Distributor ID: CentOS<br />
Description:    CentOS release 5.5 (Final)<br />
Release:        5.5<br />
Codename:       Final</p>
<p>查看有几个逻辑CPU，以及CPU型号</p>
<p># cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c<br />
      8  Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz</p>
<p>上面可以看到有8个逻辑CPU。 型号是 Intel(R) Xeon(R) CPU的 E5620  ，主频是 2.40GHz</p>
<p>实际是有几个CPU</p>
<p># cat /proc/cpuinfo | grep physical | uniq -c<br />
      1 physical id     : 0<br />
      1 address sizes   : 40 bits physical, 48 bits virtual<br />
      1 physical id     : 1<br />
      1 address sizes   : 40 bits physical, 48 bits virtual<br />
      1 physical id     : 2<br />
      1 address sizes   : 40 bits physical, 48 bits virtual<br />
      1 physical id     : 3<br />
      1 address sizes   : 40 bits physical, 48 bits virtual<br />
      1 physical id     : 4<br />
      1 address sizes   : 40 bits physical, 48 bits virtual<br />
      1 physical id     : 5<br />
      1 address sizes   : 40 bits physical, 48 bits virtual<br />
      1 physical id     : 6<br />
      1 address sizes   : 40 bits physical, 48 bits virtual<br />
      1 physical id     : 7<br />
      1 address sizes   : 40 bits physical, 48 bits virtual </p>
<p>说明实际上是8颗1核的CPU，因为是多核CPU，所以这里有这个显示。其实这台机子是 1个Xeon 四核 E5620处理器</p>
<p>参看：</p>
<p>超线程技术的介绍 </p>
<p>http://wenwen.soso.com/z/q168813991.htm</p>
<p># more /proc/cpuinfo | grep &#8220;model name&#8221;<br />
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz</p>
<p># grep &#8220;model name&#8221; /proc/cpuinfo<br />
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz</p>
<p># grep &#8220;model name&#8221; /proc/cpuinfo | cut -f2 -d:<br />
Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz<br />
Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz</p>
<p>当前是32位还是64位工作模式</p>
<p># getconf LONG_BIT<br />
64</p>
<p>是否支持64bit计算</p>
<p>结果大于0, 说明支持64bit计算. lm指long mode, 支持lm则是64bit</p>
<p># cat /proc/cpuinfo | grep flags | grep &#8216; lm &#8216; | wc -l<br />
8</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sphinxsearch.org/archives/342/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>数据挖掘步骤小札</title>
		<link>http://www.sphinxsearch.org/archives/337</link>
		<comments>http://www.sphinxsearch.org/archives/337#comments</comments>
		<pubDate>Mon, 08 Aug 2011 03:59:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.sphinxsearch.org/?p=337</guid>
		<description><![CDATA[1. 理解业务与理解数据； 　　 2. 获取相关技术与知识； 　　 3. 整合与查询数据； 　　 4. 去除错误或不一致及不完整的数据； 　　 5. 由数据选取样本先行试验； 　　 6. 建立数据模型 　　 7. 实际Data Mining的分析工作； 　　 8. 测试与检验； 　　 9. 找出假设并提出解释； 　　 10. 持续应用于企业流程中。]]></description>
			<content:encoded><![CDATA[<p>1. 理解业务与理解数据； 　　</p>
<p>2. 获取相关技术与知识； 　　</p>
<p>3. 整合与查询数据； 　　</p>
<p>4. 去除错误或不一致及不完整的数据； 　　</p>
<p>5. 由数据选取样本先行试验； 　　</p>
<p>6. 建立数据模型 　　</p>
<p>7. 实际Data Mining的分析工作； 　　</p>
<p>8. 测试与检验； 　　</p>
<p>9. 找出假设并提出解释； 　　</p>
<p>10. 持续应用于企业流程中。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sphinxsearch.org/archives/337/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

