<?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>呼叫中心系统◆开发者随笔 &#187; php</title>
	<atom:link href="http://www.cn-cti.com/tag/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.cn-cti.com</link>
	<description>软件&#124;论坛&#124;CTI&#124;呼叫中心系统解决方案&#124;呼叫中心运营&#124;技术</description>
	<lastBuildDate>Thu, 22 Dec 2011 05:19:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ASP?JSP?PHP?</title>
		<link>http://www.cn-cti.com/253.html</link>
		<comments>http://www.cn-cti.com/253.html#comments</comments>
		<pubDate>Mon, 08 Dec 2008 00:02:22 +0000</pubDate>
		<dc:creator>呆子</dc:creator>
				<category><![CDATA[呼叫中心开发技术]]></category>
		<category><![CDATA[asp]]></category>
		<category><![CDATA[CTI]]></category>
		<category><![CDATA[jsp]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[呼叫中心]]></category>

		<guid isPermaLink="false">http://www.cn-cti.com/?p=253</guid>
		<description><![CDATA[最近承接一个呼叫中心项目，属于那种转包的。也就是说，别人承接的单子，将呼叫中心这部分转包给我。
因为要和用户原有的系统衔接，我只做了呼叫中心的CTI部分。在与合作方工程师一起工作时，他问我用什么开发工具，我告诉他我只会用editplus，语言就是C（不是C++）。他很惊讶，以为像我这样的老家伙，应该采用业内“尖端”的编程语言 。不用JAVA，也要  至少用上VC或者C#。
他又问我，我的B/S架构的B用什么语言，我告诉他我用PHP。他更惊讶，想不到有人用PHP。他更看不起我了。
其实，CTI部分，涉及到对硬件的控制，尤其是通信部分，每通电话每个按键，处理起来，都要以毫秒来计时的，恐怕只有C来处理才能保证。况且，我用的操作系统是LINUX，根本不是windows。至于为什么不用windows，除了linux效率高、可靠、稳定之外，还有一个原因就是免费。
在linux之上，要么用C要么用C++，或者用JAVA。对于实时性要求很高的系统来讲，C是不二之选。java保证不了实时性以及高可靠性。
至于为什么要用PHP，也没其他原因，PHP能满足需要，php稳定可靠，我熟悉PHP。这三条理由足够让我不用其他语言。
至于ASP，那一向是我看不起的，J2EE，也不是我喜欢的。至少，我这个老家伙不喜欢JSP。因为很难调试，大多数JSP的东西，过几天就要重新启动系统。尽管很花，但不实用，而且运行速度很慢。
不过，如今的年轻程序员，C仅仅是听说过而已，刚毕业，都是大谈特谈J2EE，数据库都是只知道sql server。在他们眼里，我们这些人都是古董。
其实，无论什么语言，无论是否先进，能写出稳定、可靠、满足用户需要的语言就是好语言。
关联阅读呼叫中心系统的价格（报价）一个做呼叫中心的同行的2010年平安E家送水行业呼叫中心解决方案物联网技术在居家养老信息系统的应用如何对付盗版者（自曝反盗版措施）居家养老系统项目操作文档汇编居家养老的电子保姆模式《我国城市居家养老服务研究》新闻发布稿关于全面推进居家养老服务工作的意见 ]]></description>
			<content:encoded><![CDATA[<p>最近承接一个呼叫中心项目，属于那种转包的。也就是说，别人承接的单子，将呼叫中心这部分转包给我。</p>
<p>因为要和用户原有的系统衔接，我只做了呼叫中心的CTI部分。在与合作方工程师一起工作时，他问我用什么开发工具，我告诉他我只会用editplus，语言就是C（不是C++）。他很惊讶，以为像我这样的老家伙，应该采用业内“尖端”的编程语言 。不用JAVA，也要  至少用上VC或者C#。</p>
<p>他又问我，我的B/S架构的B用什么语言，我告诉他我用PHP。他更惊讶，想不到有人用PHP。他更看不起我了。</p>
<p>其实，CTI部分，涉及到对硬件的控制，尤其是通信部分，每通电话每个按键，处理起来，都要以毫秒来计时的，恐怕只有C来处理才能保证。况且，我用的操作系统是LINUX，根本不是windows。至于为什么不用windows，除了linux效率高、可靠、稳定之外，还有一个原因就是免费。</p>
<p>在linux之上，要么用C要么用C++，或者用JAVA。对于实时性要求很高的系统来讲，C是不二之选。java保证不了实时性以及高可靠性。</p>
<p>至于为什么要用PHP，也没其他原因，PHP能满足需要，php稳定可靠，我熟悉PHP。这三条理由足够让我不用其他语言。</p>
<p>至于ASP，那一向是我看不起的，J2EE，也不是我喜欢的。至少，我这个老家伙不喜欢JSP。因为很难调试，大多数JSP的东西，过几天就要重新启动系统。尽管很花，但不实用，而且运行速度很慢。</p>
<p>不过，如今的年轻程序员，C仅仅是听说过而已，刚毕业，都是大谈特谈J2EE，数据库都是只知道sql server。在他们眼里，我们这些人都是古董。</p>
<p>其实，无论什么语言，无论是否先进，能写出稳定、可靠、满足用户需要的语言就是好语言。</p>
<h3  class="related_post_title">关联阅读</h3><ul class="related_post"><li><a href="http://www.cn-cti.com/315.html" title="呼叫中心系统的价格（报价）">呼叫中心系统的价格（报价）</a></li><li><a href="http://www.cn-cti.com/1757.html" title="一个做呼叫中心的同行的2010年">一个做呼叫中心的同行的2010年</a></li><li><a href="http://www.cn-cti.com/1756.html" title="平安E家">平安E家</a></li><li><a href="http://www.cn-cti.com/1754.html" title="送水行业呼叫中心解决方案">送水行业呼叫中心解决方案</a></li><li><a href="http://www.cn-cti.com/1714.html" title="物联网技术在居家养老信息系统的应用">物联网技术在居家养老信息系统的应用</a></li><li><a href="http://www.cn-cti.com/1707.html" title="如何对付盗版者（自曝反盗版措施）">如何对付盗版者（自曝反盗版措施）</a></li><li><a href="http://www.cn-cti.com/1657.html" title="居家养老系统项目操作文档汇编">居家养老系统项目操作文档汇编</a></li><li><a href="http://www.cn-cti.com/1650.html" title="居家养老的电子保姆模式">居家养老的电子保姆模式</a></li><li><a href="http://www.cn-cti.com/1601.html" title="《我国城市居家养老服务研究》新闻发布稿">《我国城市居家养老服务研究》新闻发布稿</a></li><li><a href="http://www.cn-cti.com/1600.html" title="关于全面推进居家养老服务工作的意见 ">关于全面推进居家养老服务工作的意见 </a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.cn-cti.com/253.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php的效率</title>
		<link>http://www.cn-cti.com/82.html</link>
		<comments>http://www.cn-cti.com/82.html#comments</comments>
		<pubDate>Mon, 17 Nov 2008 02:39:20 +0000</pubDate>
		<dc:creator>呆子</dc:creator>
				<category><![CDATA[呼叫中心开发技术]]></category>
		<category><![CDATA[apc]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://www.cn-cti.com/?p=82</guid>
		<description><![CDATA[php的执行效率高，逐渐被程序员认可，很多的网站已经开始用PHP构建，尤其是正在风头上的SNS系统，几乎清一色都是PHP。
影响PHP效率的一个重要因素，就是从磁盘读取PHP文件，然后在内存编译，再去运行。所有的操作中，读磁盘最耗费资源。
幸运的是，apc解决了这个问题。
静态调用的成员一定要定义成 static   (PHP5 ONLY)
贴士：PHP 5 引入了静态成员的概念，作用和 PHP 4 的函数内部静态变量一致，但前者是作为类的成员来使用。静态变量和 Ruby 的类变量(class variable)差不多，所有类的实例共享同一个静态变量。
以下为引用的内容：
QUOTE:
// PHP CODE Highliting for CU by dZ902
&#60;?php
class foo {
function bar() {
echo &#8216;foobar&#8217;;
}
}
$foo = new foo;
// instance way
$foo-&#62;bar();
// static way
foo::bar();
?&#62;
静态地调用非 static 成员，效率会比静态地调用 static 成员慢 50-60%。主要是因为前者会产生 E_STRICT 警告，内部也需要做转换。
使用类常量 (PHP5 ONLY)
贴士：PHP 5 新功能，类似于 C++ 的 const。
使用类常量的好处是：
- 编译时解析，没有额外开销
- 杂凑表更小，所以内部查找更快
- 类常量仅存在于特定「命名空间」，所以杂凑名更短
- 代码更干净，使除错更方便
(暂时)不要使用 require/include_once
require/include_once 每次被调用的时候都会打开目标文件！
- 如果用绝对路径的话，PHP 5.2/6.0 [...]]]></description>
			<content:encoded><![CDATA[<p>php的执行效率高，逐渐被程序员认可，很多的网站已经开始用PHP构建，尤其是正在风头上的SNS系统，几乎清一色都是PHP。<br />
影响PHP效率的一个重要因素，就是从磁盘读取PHP文件，然后在内存编译，再去运行。所有的操作中，读磁盘最耗费资源。<br />
幸运的是，apc解决了这个问题。</p>
<p><strong>静态调用的成员一定要定义成 static   (PHP5 ONLY)</strong></p>
<p>贴士：PHP 5 引入了静态成员的概念，作用和 PHP 4 的函数内部静态变量一致，但前者是作为类的成员来使用。静态变量和 Ruby 的类变量(class variable)差不多，所有类的实例共享同一个静态变量。<br />
以下为引用的内容：<br />
QUOTE:<br />
// PHP CODE Highliting for CU by dZ902</p>
<p>&lt;?php<br />
class foo {<br />
function bar() {<br />
echo &#8216;foobar&#8217;;<br />
}<br />
}</p>
<p>$foo = new foo;</p>
<p>// instance way</p>
<p>$foo-&gt;bar();</p>
<p>// static way</p>
<p>foo::bar();</p>
<p>?&gt;</p>
<p>静态地调用非 static 成员，效率会比静态地调用 static 成员慢 50-60%。主要是因为前者会产生 E_STRICT 警告，内部也需要做转换。</p>
<p><strong>使用类常量 (PHP5 ONLY)</strong></p>
<p>贴士：PHP 5 新功能，类似于 C++ 的 const。</p>
<p>使用类常量的好处是：</p>
<p>- 编译时解析，没有额外开销<br />
- 杂凑表更小，所以内部查找更快<br />
- 类常量仅存在于特定「命名空间」，所以杂凑名更短<br />
- 代码更干净，使除错更方便</p>
<p>(暂时)不要使用 require/include_once</p>
<p>require/include_once 每次被调用的时候都会打开目标文件！</p>
<p>- 如果用绝对路径的话，PHP 5.2/6.0 不存在这个问题<br />
- 新版的 APC 缓存系统已经解决这个问题</p>
<p>文件 I/O 增加 =&gt; 效率降低</p>
<p>如果需要，可以自行检查文件是否已被 require/include。</p>
<p><strong>不要调用毫无意义的函数</strong></p>
<p>有对应的常量的时候，不要使用函数。<br />
以下为引用的内容：<br />
QUOTE:<br />
// PHP CODE Highliting for CU by dZ902</p>
<p>&lt;?php<br />
php_uname(&#8217;s&#8217;) == PHP_OS;<br />
php_version() == PHP_VERSION;<br />
php_sapi_name() == PHP_SAPI;<br />
?&gt;</p>
<p>虽然使用不多，但是效率提升大概在 3500% 左右。</p>
<p><strong>最快的 Win32 检查</strong><br />
以下为引用的内容：<br />
QUOTE:<br />
// PHP CODE Highliting for CU by dZ902</p>
<p>&lt;?php<br />
$is_win = DIRECTORY_SEPARATOR == &#8216;\\&#8217;;<br />
?&gt;</p>
<p>- 不用函数<br />
- Win98/NT/2000/XP/Vista/Longhorn/Shorthorn/Whistler&#8230;通用<br />
- 一直可用</p>
<p><strong>时间问题 (PHP&gt;5.1.0 ONLY)</strong></p>
<p>你如何在你的软件中得知现在的时间？简单，「time() time() again, you ask me&#8230;」。</p>
<p>不过总归会调用函数，慢。</p>
<p>现在好了，用 $_SERVER['REQUEST_TIME']，不用调用函数，又省了。</p>
<p>[size=+2]加速 PCRE</p>
<p>- 对于不用保存的结果，不用 ()，一律用 (?</p>
<p>这样 PHP 不用为符合的内容分配内存，省。效率提升 15% 左右。</p>
<p>- 能不用正则，就不用正则，在分析的时候仔细阅读手册「字符串函数」部分。有没有你漏掉的好用的函数？</p>
<p>例如：<br />
以下为引用的内容：<br />
strpbrk()<br />
strncasecmp()<br />
strpos()/strrpos()/stripos()/strripos()</p>
<p><strong>加速 strtr</strong></p>
<p>如果需要转换的全是单个字符的时候，用字符串而不是数组来做 strtr：<br />
以下为引用的内容：<br />
QUOTE:<br />
// PHP CODE Highliting for CU by dZ902</p>
<p>&lt;?php<br />
$addr = strtr($addr, &#8220;abcd&#8221;, &#8220;efgh&#8221;); // good<br />
$addr = strtr($addr, array(&#8216;a&#8217; =&gt; &#8216;e&#8217;,<br />
// &#8230;<br />
)); // bad<br />
?&gt;</p>
<p>效率提升：10 倍。</p>
<p><strong>不要做无谓的替换</strong></p>
<p>即使没有替换，str_replace 也会为其参数分配内存。很慢！解决办法：</p>
<p>- 用 strpos 先查找(非常快)，看是否需要替换，如果需要，再替换</p>
<p>效率：</p>
<p>- 如果需要替换：效率几乎相等，差别在 0.1% 左右。<br />
- 如果不需要替换：用 strpos 快 200%。</p>
<p><strong>邪恶的 @ 操作符</strong></p>
<p>不要滥用 @ 操作符。虽然 @ 看上去很简单，但是实际上后台有很多操作。用 @ 比起不用 @，效率差距：3 倍。</p>
<p>特别不要在循环中使用 @，在 5 次循环的测试中，即使是先用 error_reporting(0) 关掉错误，在循环完成后再打开，都比用 @ 快。</p>
<p><strong>善用 strncmp</strong></p>
<p>当需要对比「前 n 个字符」是否一样的时候，用 strncmp/strncasecmp，而不是 substr/strtolower，更不是 PCRE，更千万别提 ereg。strncmp/strncasecmp 效率最高(虽然高得不多)。</p>
<p>[size=+2]慎用 substr_compare (PHP5 ONLY)</p>
<p>按照上面的道理，substr_compare 应该比先 substr 再比较快咯。答案是否定的，除非：</p>
<p>- 无视大小写的比较<br />
- 比较较大的字符串</p>
<p><strong>不要用常量代替字符串</strong></p>
<p>为什么：</p>
<p>- 需要查询杂凑表两次<br />
- 需要把常量名转换为小写(进行第二次查询的时候)<br />
- 生成 E_NOTICE 警告<br />
- 会建立临时字符串</p>
<p>效率差别：700%。</p>
<p><strong>不要把 count/strlen/sizeof 放到 for 循环的条件语句中</strong></p>
<p>贴士：我的个人做法<br />
以下为引用的内容：<br />
QUOTE:<br />
// PHP CODE Highliting for CU by dZ902</p>
<p>&lt;?php<br />
for ($i = 0, $max = count($array);$i &lt; $max; ++$i);<br />
?&gt;</p>
<p>效率提升</p>
<p>相对于：<br />
以下为引用的内容：</p>
<p>- count 50%<br />
- strlen 75%</p>
<p><strong>短的代码不一定快</strong></p>
<p>QUOTE:<br />
// PHP CODE Highliting for CU by dZ902</p>
<p>&lt;?php<br />
// longest<br />
if ($a == $b) {<br />
$str .= $a;<br />
} else {<br />
$str .= $b;<br />
}</p>
<p>// longer<br />
if ($a == $b) {<br />
$str .= $a;<br />
}<br />
$str .= $b;</p>
<p>// short<br />
$str .= ($a == $b ? $a : $b);<br />
?&gt;</p>
<p>你觉得哪个快？</p>
<p>效率比较：<br />
以下为引用的内容：<br />
- longest: 4.27<br />
- longer: 4.43<br />
- short: 4.76</p>
<p>不可思议？再来一个：<br />
以下为引用的内容：<br />
QUOTE:<br />
// PHP CODE Highliting for CU by dZ902</p>
<p>&lt;?php<br />
// original<br />
$d = dir(&#8216;.&#8217;);<br />
while (($entry = $d-&gt;read()) !== false) {<br />
if ($entry == &#8216;.&#8217; || $entry == &#8216;..&#8217;) {<br />
continue;<br />
}<br />
}</p>
<p>// versus<br />
glob(&#8216;./*&#8217;);</p>
<p>// versus (include . and ..)<br />
scandir(&#8216;.&#8217;);<br />
?&gt;</p>
<p>哪个快？</p>
<p>效率比较：<br />
以下为引用的内容：<br />
- original: 3.37<br />
- glob: 6.28<br />
- scandir: 3.42<br />
- original without OO: 3.14<br />
- SPL (PHP5): 3.95</p>
<p>画外音：从此也可以看出来 PHP5 的面向对象效率提高了很多，效率已经和纯函数差得不太多了。</p>
<p><strong>提高 PHP 文件访问效率</strong></p>
<p>需要包含其他 PHP 文件的时候，使用完整路径，或者容易转换的相对路径。<br />
以下为引用的内容：<br />
QUOTE:<br />
// PHP CODE Highliting for CU by dZ902</p>
<p>&lt;?php</p>
<p>include &#8216;file.php&#8217;; // bad approach</p>
<p>incldue &#8216;./file.php&#8217;; // good</p>
<p>include &#8216;/path/to/file.php&#8217;; // ideal</p>
<p>?&gt;</p>
<p><strong>物尽其用</strong></p>
<p>PHP 有很多扩展和函数可用，在实现一个功能的之前，应该看看 PHP 是否有了这个功能？是否有更简单的实现？<br />
以下为引用的内容：<br />
QUOTE:<br />
// PHP CODE Highliting for CU by dZ902</p>
<p>&lt;?php<br />
$filename = &#8220;./somepic.gif&#8221;;<br />
$handle = fopen($filename, &#8220;rb&#8221;);<br />
$contents = fread($handle, filesize($filename));<br />
fclose($handle);</p>
<p>// vs. much simpler</p>
<p>file_get_contents(&#8216;./somepic.gif&#8217;);<br />
?&gt;</p>
<p><strong>关于引用的技巧</strong></p>
<p>引用可以：</p>
<p>- 简化对复杂结构数据的访问<br />
- 优化内存使用<br />
以下为引用的内容：<br />
QUOTE:<br />
// PHP CODE Highliting for CU by dZ902</p>
<p>&lt;?php<br />
$a['b']['c'] = array();</p>
<p>// slow 2 extra hash lookups per access<br />
for ($i = 0; $i &lt; 5; ++$i)<br />
$a['b']['c'][$i] = $i;</p>
<p>// much faster reference based approach<br />
$ref =&amp; $a['b']['c'];<br />
for ($i = 0; $i &lt; 5; ++$i)<br />
$ref[$i] = $i;<br />
?&gt;</p>
<p>QUOTE:<br />
// PHP CODE Highliting for CU by dZ902</p>
<p>&lt;?php<br />
$a = &#8216;large string&#8217;;</p>
<p>// memory intensive approach<br />
function a($str)<br />
{<br />
return $str.&#8217;something&#8217;;<br />
}</p>
<p>// more efficient solution<br />
function a(&amp;$str)<br />
{<br />
$str .= &#8217;something&#8217;;<br />
}</p>
<p>?&gt;</p>
<h3  class="related_post_title">关联阅读</h3><ul class="related_post"><li><a href="http://www.cn-cti.com/253.html" title="ASP?JSP?PHP?">ASP?JSP?PHP?</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.cn-cti.com/82.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

