<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[[实践Ok]php popen调用系统的方法,及调用PHP或其它语言有while（1）的特别注意点。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Wed, 25 Jun 2008 08:38:04 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	<textarea name="code" class="php" rows="15" cols="100">
&lt;?php
error_reporting(E_ALL);
$handle = popen(&#039;ls -lart&#039;, &#039;r&#039;);
echo &quot;&#039;$handle&#039;; &quot; . gettype($handle) . &quot;&#92;n&quot;;
$read = fread($handle, 2096);
echo $read;
pclose($handle);
?&gt;
</textarea><br/>实践时发现：<br/>在做shell执行：ls /data/htdocs/pro/logs/*<br/>出现多个文件时，最好是对返回串进行：rtrim($returnStr,&quot;&#92;n&quot;);<br/>再:explode($returnStr,&quot;&#92;n&quot;); 这样就不会有空数组了。<br/><br/>Example:<br/><br/>&lt;?php<br/>error_reporting(E_ALL);<br/>while(1)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$handle=popen(&quot;more video_user_20080626_190223.txt&#124;grep @docid:&#124;wc&quot;,&quot;r&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$read = fread($handle, 2096);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $read;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pclose($handle);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(1);<br/>&#125;<br/><br/>?&gt;<br/><br/><br/><br/><br/><br/>二、调用PHP或其它语言有while（1）的特别注意点：<br/>特别是调用串口的一直监控代码，尽可能要用到，读取返回值，否则就会启动不起来那个while的程序：<br/><textarea name="code" class="php" rows="15" cols="100">
do &#123;
$excuteResult = fread($handle, 1024);
if (strlen($excuteResult) == 0) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;break;
&#125;
$excuteResultAll .= $excuteResult;
&#125; while (true);
/codes]

层层都要有do while，否则一直循环的程序会死掉，查了好久，这样干就不会出错了：
这个C转成Root的也要有do while读取返回，/data/htdocs/t.jackxiang.com/cgi-bin/brainpowertempsrv killifcallingautoanswer killbyProName，而这个调用的PHP程序也是需要do while，一层层的调用也就对了。
 startAutoAnserSer.php&nbsp;&nbsp; brainpowertempsrv.c -》brainpowertempsrv.php&nbsp;&nbsp;都要有返回就对了：


brainpowertempsrv.php 
[codes=php]
if ($argv[1] == &quot;killifcallingautoanswer&quot;) &#123; //杀掉自动接电话进程
&nbsp;&nbsp;&nbsp;&nbsp;$command = &quot;sudo ps aux&#124;grep ifCallingComesAnswer&#124;grep -v &#92;&quot;grep&#92;&quot;&#124;awk &#039;&#123;print &#92;&quot;kill -9 &#92;&quot;$2&#125;&#039;&#124;sh&quot;;//杀掉进程
&nbsp;&nbsp;&nbsp;&nbsp;$handle&nbsp;&nbsp;= popen($command, &quot;r&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;do &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$excuteResult = fread($handle, 1024);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (strlen($excuteResult) == 0) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$excuteResultAll .= $excuteResult;
&nbsp;&nbsp;&nbsp;&nbsp;&#125; while (true);
&#125;

if ($argv[1] == &quot;startifcallingautoanswer&quot;) &#123; //启动自动接电话进程
&nbsp;&nbsp;&nbsp;&nbsp;echo $command = &quot;sudo /usr/bin/php /data/htdocs/t.jackxiang.com/ifCallingComesAnswer.php &amp;&quot;;//启动进程
&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;&#92;n&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;$handle&nbsp;&nbsp;= popen($command, &quot;r&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;do &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$excuteResult = fread($handle, 1024);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (strlen($excuteResult) == 0) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$excuteResultAll .= $excuteResult;
&nbsp;&nbsp;&nbsp;&nbsp;&#125; while (true);
&nbsp;&nbsp;&nbsp;&nbsp;//echo $excuteResultAll;
&#125;
</textarea><br/><br/>C:<br/><textarea name="code" class="C" rows="15" cols="100">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;snprintf(command,sizeof(command),&quot;sudo /usr/bin/php /data/htdocs/t.jackxiang.com/cgi-bin/brainpowertempsrv.php %s %s&quot;,opt,path);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;command=%s&quot;,command);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( (pPipe = popen( command, &quot;r&quot; )) == NULL )&#123;//执行脚本
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Excute Command Faild :%s&quot;,command);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit( 1 );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!feof(pPipe))/* Read pipe until end of file. */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(fgets(psBuffer, sizeof(psBuffer), pPipe) != NULL)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;%s&quot;,psBuffer);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* Close pipe and print return value of pPipe. */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//printf( &quot;&#92;nProcess returned: %d&#92;n&quot;, pclose( pPipe ) );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pclose(pPipe);
</textarea><br/>vi&nbsp;&nbsp;startAutoAnserSer.php <br/><textarea name="code" class="php" rows="15" cols="100">
&lt;?php
$excuteResult = &quot;&quot;;
$excuteResultAll = &quot;&quot;;
$command = &quot;/data/htdocs/t.jackxiang.com/cgi-bin/brainpowertempsrv killifcallingautoanswer killbyProName&quot;;
$handle&nbsp;&nbsp;= popen($command, &quot;r&quot;);
do &#123;
$excuteResult = fread($handle, 1024);
if (strlen($excuteResult) == 0) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;break;
&#125;
$excuteResultAll .= $excuteResult;
&#125; while (true);

$command = &quot;/data/htdocs/t.jackxiang.com/cgi-bin/brainpowertempsrv startifcallingautoanswer startAutoAnserSer&quot;;
$handle&nbsp;&nbsp;= popen($command, &quot;r&quot;);
do &#123;
$excuteResult = fread($handle, 1024);
if (strlen($excuteResult) == 0) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;break;
&#125;
$excuteResultAll .= $excuteResult;
&#125; while (true);
</textarea>
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践Ok]php popen调用系统的方法,及调用PHP或其它语言有while（1）的特别注意点。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>