<?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>易客CRM官方博客 &#187; php</title>
	<atom:link href="http://blog.c3crm.com/node/category/%e6%8a%80%e6%9c%af/php/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.c3crm.com</link>
	<description>易客CRM，中小企业最忠实的合作伙伴</description>
	<lastBuildDate>Mon, 10 Oct 2016 09:53:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>web服务器目录权限设置原则</title>
		<link>http://blog.c3crm.com/node/1189</link>
		<comments>http://blog.c3crm.com/node/1189#comments</comments>
		<pubDate>Tue, 24 Sep 2013 08:22:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.c3crm.com/?p=1189</guid>
		<description><![CDATA[第一个原则：有写入权限的目录，不给动态脚本的执行权限。脚本的执行权限可以通过chmod设置，但是有一个问题，如果设置这个目录下的文件没有执行权限，这个目录的php文件将不能被include和引用，所以这个会有问题。脚本执行权限可以这样处理，通过nginx服务器的location规则来限制某个目录是否具有脚本的执行权限，这样就可以实现，既可以include这个目录下的php文件，也可以禁止这个目录下的脚本文件被执行，防止注入木马和webshell攻击。如果使用apache，也有类似location的设置项。 第二个原则：有执行权限的目录，不给写入权限。这个就比较容易实现，直接通过chmod把目录设置成可以执行脚本，但不可以写入，不管什么样的用户都不能对有执行权限的目录写入任何东西，防止注入木马和webshell攻击。 还有一个原则，php-fpm/nginx 进程所使用的用户，不能是网站文件所有者。 凡是违背这个原则，则不符合最小权限原则。 我觉得，如果前2个原则满足的情况下，这个原则可以不考虑，但为了以防万一，遵守这个原则也没错。 转载请注明：易客CRM官方博客 &#187; web服务器目录权限设置原则]]></description>
			<content:encoded><![CDATA[<p>第一个原则：有写入权限的目录，不给动态脚本的执行权限。脚本的执行权限可以通过chmod设置，但是有一个问题，如果设置这个目录下的文件没有执行权限，这个目录的php文件将不能被include和引用，所以这个会有问题。脚本执行权限可以这样处理，通过nginx服务器的location规则来限制某个目录是否具有脚本的执行权限，这样就可以实现，既可以include这个目录下的php文件，也可以禁止这个目录下的脚本文件被执行，防止注入木马和webshell攻击。如果使用apache，也有类似location的设置项。</p>
<p>第二个原则：有执行权限的目录，不给写入权限。这个就比较容易实现，直接通过chmod把目录设置成可以执行脚本，但不可以写入，不管什么样的用户都不能对有执行权限的目录写入任何东西，防止注入木马和webshell攻击。</p>
<p>还有一个原则，php-fpm/nginx 进程所使用的用户，不能是网站文件所有者。 凡是违背这个原则，则不符合最小权限原则。 我觉得，如果前2个原则满足的情况下，这个原则可以不考虑，但为了以防万一，遵守这个原则也没错。</p>
<p>转载请注明：<a href="http://blog.c3crm.com">易客CRM官方博客</a> &raquo; <a href="http://blog.c3crm.com/node/1189">web服务器目录权限设置原则</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.c3crm.com/node/1189/feed</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>web服务器目录权限设置原则</title>
		<link>http://blog.c3crm.com/node/1182</link>
		<comments>http://blog.c3crm.com/node/1182#comments</comments>
		<pubDate>Tue, 17 Sep 2013 07:36:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.c3crm.com/?p=1182</guid>
		<description><![CDATA[第一个原则：有写入权限的目录，不给动态脚本的执行权限。脚本的执行权限可以通过chmod设置，但是有一个问题，如果设置这个目录下的文件没有执行权限，这个目录的php文件将不能被include和引用，所以这个会有问题。脚本执行权限可以这样处理，通过nginx服务器的location规则来限制某个目录是否具有脚本的执行权限，这样就可以实现，既可以include这个目录下的php文件，也可以禁止这个目录下的脚本文件被执行，防止注入木马和webshell攻击。如果使用apache，也有类似location的设置项。 第二个原则：有执行权限的目录，不给写入权限。这个就比较容易实现，直接通过chmod把目录设置成可以执行脚本，但不可以写入，不管什么样的用户都不能对有执行权限的目录写入任何东西，防止注入木马和webshell攻击。 还有一个原则，php-fpm/nginx 进程所使用的用户，不能是网站文件所有者。 凡是违背这个原则，则不符合最小权限原则。 我觉得，如果前2个原则满足的情况下，这个原则可以不考虑，但为了以防万一，遵守这个原则也没错。 转载请注明：易客CRM官方博客 &#187; web服务器目录权限设置原则]]></description>
			<content:encoded><![CDATA[<p>第一个原则：有写入权限的目录，不给动态脚本的执行权限。脚本的执行权限可以通过chmod设置，但是有一个问题，如果设置这个目录下的文件没有执行权限，这个目录的php文件将不能被include和引用，所以这个会有问题。脚本执行权限可以这样处理，通过nginx服务器的location规则来限制某个目录是否具有脚本的执行权限，这样就可以实现，既可以include这个目录下的php文件，也可以禁止这个目录下的脚本文件被执行，防止注入木马和webshell攻击。如果使用apache，也有类似location的设置项。</p>
<p>第二个原则：有执行权限的目录，不给写入权限。这个就比较容易实现，直接通过chmod把目录设置成可以执行脚本，但不可以写入，不管什么样的用户都不能对有执行权限的目录写入任何东西，防止注入木马和webshell攻击。</p>
<p>还有一个原则，php-fpm/nginx 进程所使用的用户，不能是网站文件所有者。 凡是违背这个原则，则不符合最小权限原则。 我觉得，如果前2个原则满足的情况下，这个原则可以不考虑，但为了以防万一，遵守这个原则也没错。</p>
<p>转载请注明：<a href="http://blog.c3crm.com">易客CRM官方博客</a> &raquo; <a href="http://blog.c3crm.com/node/1182">web服务器目录权限设置原则</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.c3crm.com/node/1182/feed</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>易客CRM免费版已支持PHP标准环境</title>
		<link>http://blog.c3crm.com/node/1164</link>
		<comments>http://blog.c3crm.com/node/1164#comments</comments>
		<pubDate>Sat, 15 Dec 2012 16:07:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CRM]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[云计算]]></category>
		<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.c3crm.com/?p=1164</guid>
		<description><![CDATA[易客CRM免费版是基于新浪SAE云平台开发，之前只能在SAE和新浪云商店上运行，经过开发人员的努力，易客CRM免费版已经可以在标准的PHP环境下正常运行了,在易客CRM网站的下载中心已经提供下载地址了，喜欢免费版的用户可以到下载中心下载，如果不想安装环境，可以直接在新浪云商店上一键安装，功能都是一样的。 安装需要注意以下几点： 1）易客CRM免费版支持PHP5.2和Zend Optimizer3.3.0以上版本，以后也许不再需要安装Zend Optimizer，免费版成熟后代码将全部开放。 2）PHP环境需要开启PDO，群发邮件需要PDO支持才能正常运行。 3）安装完成后需要配置cron(linux)和任务计划(windows)，可以参考cron目录下的readme.txt，群发邮件需要后台自动发送才能发出。 4）如果需要群发短信功能，可以在后台设置短信通道账号，注册和充值都可以自动操作，无需人工处理，一般的价格是每条1毛，量大充值时自动打折，易客CRM采用的是新浪的短信服务，到达率比较高，所以比其他短信通道要贵一些。 5）易客CRM免费版的相关问题建议到论坛里提交和回答，我们会有专人提供技术支持，尽量不要骚扰易客CRM顾问，更何况免费版的功能都比较简单，不明白的可以自己研究一下，希望能理解。 6）如果您觉得易客CRM免费版的功能不够用，您可以升级到易客CRM收费版，收费版的功能更强，技术支持更有保证，升级频率更高。 7）如果您想基于免费版做二次开发，暂时还不支持，您可以等免费版开放代码或开放接口。 其他的就没有了，您赶紧下载使用吧！ 转载请注明：易客CRM官方博客 &#187; 易客CRM免费版已支持PHP标准环境]]></description>
			<content:encoded><![CDATA[<p>易客CRM免费版是基于新浪SAE云平台开发，之前只能在SAE和新浪云商店上运行，经过开发人员的努力，易客CRM免费版已经可以在标准的PHP环境下正常运行了,在易客CRM网站的下载中心已经提供下载地址了，喜欢免费版的用户可以到<a title="易客CRM下载中心" href="http://www.c3crm.com/xzsy/" target="_blank">下载中心</a>下载，如果不想安装环境，可以直接在新浪云商店上一键安装，功能都是一样的。<br />
安装需要注意以下几点：<br />
1）易客CRM免费版支持PHP5.2和Zend Optimizer3.3.0以上版本，以后也许不再需要安装Zend Optimizer，免费版成熟后代码将全部开放。<br />
2）PHP环境需要开启PDO，群发邮件需要PDO支持才能正常运行。<br />
3）安装完成后需要配置cron(linux)和任务计划(windows)，可以参考cron目录下的readme.txt，群发邮件需要后台自动发送才能发出。<br />
4）如果需要群发短信功能，可以在后台设置短信通道账号，注册和充值都可以自动操作，无需人工处理，一般的价格是每条1毛，量大充值时自动打折，易客CRM采用的是新浪的短信服务，到达率比较高，所以比其他短信通道要贵一些。<br />
5）易客CRM免费版的相关问题建议到论坛里提交和回答，我们会有专人提供技术支持，尽量不要骚扰易客CRM顾问，更何况免费版的功能都比较简单，不明白的可以自己研究一下，希望能理解。<br />
6）如果您觉得易客CRM免费版的功能不够用，您可以升级到易客CRM收费版，收费版的功能更强，技术支持更有保证，升级频率更高。<br />
7）如果您想基于免费版做二次开发，暂时还不支持，您可以等免费版开放代码或开放接口。<br />
其他的就没有了，您赶紧下载使用吧！</p>
<p>转载请注明：<a href="http://blog.c3crm.com">易客CRM官方博客</a> &raquo; <a href="http://blog.c3crm.com/node/1164">易客CRM免费版已支持PHP标准环境</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.c3crm.com/node/1164/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>易客CRM5.1群发邮件采用队列机制</title>
		<link>http://blog.c3crm.com/node/1123</link>
		<comments>http://blog.c3crm.com/node/1123#comments</comments>
		<pubDate>Mon, 08 Oct 2012 07:45:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.c3crm.com/?p=1123</guid>
		<description><![CDATA[新浪微博发微博时之前采用直接发送的机制，由于移动网络在国内还不稳定，经常发生发布失败的现象，在新版本中新浪微博采用队列的机制，发布微博后先把内容放在队列里，然后再逐条发布。 在易客CRM5.1.0新版本中，群发邮件也采用队列机制，群发邮件发送后，发送邮件将保存在队列中，CRM系统后台通过任务计划(windows)和crontab(Linux)逐条发送。由于国内的smtp服务器均有反垃圾邮件的功能，如果一个邮件账号在一定时间内频繁发送邮件，邮件系统将视为这个账号在发垃圾邮件。为了避免被SMTP服务器视为垃圾邮件，在易客CRM中设置smtp账号时可以设置间隔时间，一般都要超过5s，群发邮件时系统将每隔一定时间发一封邮件，这个时间就是设置smtp账号时所设置的间隔时间。 什么是队列？ 队列（Queue）是运算受到限制的一种线性表。只允许在表的一端进行插入，而在另一端进行删除元素的线性表。队尾（rear）是允许插入的一端。队头（front）是允许删除的一端。空队列是不含元素的空表。假设有个队列Q=（a1，a2，…，an），则a1为队头元素，an为队尾元素。元素入队的次序为a1，a2，…，an，而出队的次序为a1，a2，…，an。可见队列的操作是按照先进先出的原则进行的。队列可以很好地异步处理数据传送和存储，当你频繁地向数据库中插入数据、频繁地向搜索引擎提交数据，就可采取队列来异步插入。另外，还可以将较慢的处理逻辑、有并发数量限制的处理逻辑，通过消息队列放在后台处理，例如FLV视频转换、发送手机短信、发送电子邮件等。 PHP的队列 在PHP中队列以数组的形式表现。数组中的第一个元素作为队头，最后一个元素作为队尾，这样就可以操作这个队列了。 PHP自带的函数中有很多封装好的数组函数，可以直接使用。 array_push：将一个或多个单元压入数组的末尾（入栈） array_unshift：在数组开头插入一个或多个单元 array_pop：将数组最后一个单元弹出（出栈） array_shift：将数组开头的单元移出数组 Ruby Starling Starling是一个支持MemCache协议的轻量级持久化服务器。Starling是让创建网络访问队列或者多个队列异常简单，也就是说多点和多台机器间的异步工作进程。它是着名微博客网站Twitter开发用来处理大量的队列消息，以及保持服务的响应。Starling已经在生产环境中使用，不仅是Twitter在使用，FiveRuns同样在使用。FiveRuns甚至还根据自己的应用做了改进。 张宴作品HTTPSQS HTTPSQS（HTTP Simple Queue Service）是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务，使用 Tokyo Cabinet 的 B+Tree Key/Value 数据库来做数据的持久化存储。 有兴趣的可以看看网址：http://blog.s135.com/httpsqs_1_2/ Zend FrameWork的队列 Zend Framework内置了ActiveMQ和JobQueue第三方队列服务程序，另外自身还实现数据库DB和数组Array这两种方式。易客CRM采用的就是数据库DB方式，只需要两个表，就可以通过Zend Framework实现多队列服务。 CREATE TABLE IF NOT EXISTS ec_queuemessage ( message_id bigint(20) unsigned NOT NULL auto_increment, queue_id int(10) unsigned NOT NULL, handle char(32) default [...]]]></description>
			<content:encoded><![CDATA[<p>新浪微博发微博时之前采用直接发送的机制，由于移动网络在国内还不稳定，经常发生发布失败的现象，在新版本中新浪微博采用队列的机制，发布微博后先把内容放在队列里，然后再逐条发布。</p>
<p>在易客CRM5.1.0新版本中，群发邮件也采用队列机制，群发邮件发送后，发送邮件将保存在队列中，CRM系统后台通过任务计划(windows)和crontab(Linux)逐条发送。由于国内的smtp服务器均有反垃圾邮件的功能，如果一个邮件账号在一定时间内频繁发送邮件，邮件系统将视为这个账号在发垃圾邮件。为了避免被SMTP服务器视为垃圾邮件，在易客CRM中设置smtp账号时可以设置间隔时间，一般都要超过5s，群发邮件时系统将每隔一定时间发一封邮件，这个时间就是设置smtp账号时所设置的间隔时间。</p>
<p><strong>什么是队列？</strong><br />
队列（Queue）是运算受到限制的一种线性表。只允许在表的一端进行插入，而在另一端进行删除元素的线性表。队尾（rear）是允许插入的一端。队头（front）是允许删除的一端。空队列是不含元素的空表。假设有个队列Q=（a1，a2，…，an），则a1为队头元素，an为队尾元素。元素入队的次序为a1，a2，…，an，而出队的次序为a1，a2，…，an。可见队列的操作是按照先进先出的原则进行的。队列可以很好地异步处理数据传送和存储，当你频繁地向数据库中插入数据、频繁地向搜索引擎提交数据，就可采取队列来异步插入。另外，还可以将较慢的处理逻辑、有并发数量限制的处理逻辑，通过消息队列放在后台处理，例如FLV视频转换、发送手机短信、发送电子邮件等。<br />
<strong>PHP的队列</strong><br />
在PHP中队列以数组的形式表现。数组中的第一个元素作为队头，最后一个元素作为队尾，这样就可以操作这个队列了。<br />
PHP自带的函数中有很多封装好的数组函数，可以直接使用。<br />
array_push：将一个或多个单元压入数组的末尾（入栈）<br />
array_unshift：在数组开头插入一个或多个单元<br />
array_pop：将数组最后一个单元弹出（出栈）<br />
array_shift：将数组开头的单元移出数组</p>
<p><strong>Ruby Starling</strong><br />
Starling是一个支持MemCache协议的轻量级持久化服务器。Starling是让创建网络访问队列或者多个队列异常简单，也就是说多点和多台机器间的异步工作进程。它是着名微博客网站Twitter开发用来处理大量的队列消息，以及保持服务的响应。Starling已经在生产环境中使用，不仅是Twitter在使用，FiveRuns同样在使用。FiveRuns甚至还根据自己的应用做了改进。</p>
<p><strong>张宴作品HTTPSQS</strong><br />
HTTPSQS（HTTP Simple Queue Service）是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务，使用 Tokyo Cabinet 的 B+Tree Key/Value 数据库来做数据的持久化存储。<br />
有兴趣的可以看看网址：http://blog.s135.com/httpsqs_1_2/</p>
<p><strong>Zend FrameWork的队列</strong><br />
Zend Framework内置了ActiveMQ和JobQueue第三方队列服务程序，另外自身还实现数据库DB和数组Array这两种方式。<a href="http://www.c3crm.com/" title="易客CRM" target="_blank">易客CRM</a>采用的就是数据库DB方式，只需要两个表，就可以通过Zend Framework实现多队列服务。<br />
<code>CREATE TABLE IF NOT EXISTS ec_queuemessage (<br />
  message_id bigint(20) unsigned NOT NULL auto_increment,<br />
  queue_id int(10) unsigned NOT NULL,<br />
  handle char(32) default NULL,<br />
  body longtext NOT NULL,<br />
  md5 char(32) NOT NULL,<br />
  timeout decimal(14,4) unsigned default NULL,<br />
  created int(10) unsigned NOT NULL,<br />
  PRIMARY KEY  (message_id),<br />
  UNIQUE KEY message_handle (handle),<br />
  KEY message_queueid (queue_id)<br />
)<br />
CREATE TABLE IF NOT EXISTS ec_queue (<br />
  queue_id int(10) unsigned NOT NULL auto_increment,<br />
  queue_name varchar(100) NOT NULL,<br />
  timeout smallint(5) unsigned NOT NULL default '30',<br />
  PRIMARY KEY  (queue_id)<br />
)</code><br />
通过Zend_Queue的send方法发送群发邮件任务，通过receive方法获取群发邮件任务信息执行发送邮件。<br />
<code>$queue = new Zend_Queue('Db', $options);<br />
$queue->send('postdata=1&#038;name=1');<br />
$messages = $queue->receive(100);</code></p>
<p>转载请注明：<a href="http://blog.c3crm.com">易客CRM官方博客</a> &raquo; <a href="http://blog.c3crm.com/node/1123">易客CRM5.1群发邮件采用队列机制</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.c3crm.com/node/1123/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
