2009-07-10 84 views
1

我想編寫一個自定義url_rewriter爲魷魚。 &也使用一些其他url_rewriter程序,如squidGuard 所以必須使用包裝才能使用兩個或任何其他程序。PHP cli內存使用優化

當我嘗試循環與PHP。 (就是這樣魷魚如何與外部程序進行通信。 標準輸入/輸出。它給你一個網址&你要發送新的或舊的一回。)

它具有毀滅性的內存使用情況,甚至什麼都不做。 我已經改變了與另一個bash腳本包裝它只有幾行。 &它循環而不是PHP。調用PHP外部。當php腳本完成與url返回它&退出。 這種方式比替代循環php腳本要好得多。

在php腳本里幾乎沒有什麼了。 (因爲我仍在開發它。) 它只是將video.yahoo.com替換爲youtube.com。 和幾個變量和爆炸()來解析輸入字符串這一切...... 但腳本仍在使用的內存量巨大


這裏是頂部輸出:

PID USER VIRT RES SHR S %CPU %MEM TIME+ COMMAND 

32059 squid 19720 7432 4396 R 0.9 2.9 0:00.02 php  
32063 squid 19720 7436 4396 R 0.9 2.9 0:00.02 php  
32066 squid 19720 7436 4396 R 0.9 2.9 0:00.02 php  
32068 squid 19460 6188 3472 R 0.9 2.4 0:00.02 php  
32070 squid 19720 7432 4396 R 0.9 2.9 0:00.02 php  
32074 squid 19588 6792 3924 R 0.9 2.6 0:00.02 php  
32077 squid 19720 7436 4396 R 0.9 2.9 0:00.02 php 

這裏是PHP腳本

#!/opt/lampp/bin/php -q 
<php 
ini_set('html_errors',false); 
ini_set('implicit_flush',true); 
ini_set('max_execution_time',0); 
ini_set('register_argc_argv',true); 

$nl="\n"; $tab="\t"; 
$ds=DIRECTORY_SEPARATOR; 
$lamppdir='/opt/lampp/'; 
$htdocsdir='/opt/lampp/htdocs/'; 
$wdir='/opt/lampp/htdocs/bin/'; 
$incdir=$htdocsdir.'inc/'; 
$logfile=$wdir.'log.txt'; 

if ($argc>1){ 
    $return=$argv[1]; 
    $return=explode(' ',trim($return)); 
    $url=$return[0]; 
    $sourceip=$return[1]; 
    $user=$return[2]; 
    $method=$return[3]; 
    $urlgroup=$return[4]; 
    $myip=$return[5]; 
    $myport=$return[6]; 

    $logdata=$argv[1]; 

    // if(strlen($logdata)>50){ file_put_contents($logfile,$logdata.$nl,FILE_APPEND); } 

    fwrite(STDOUT,$return[0]."\r\n"); 
} 

exit(0); 

這裏是bash腳本

#!/bin/bash 
lamppdir=/opt/lampp/ 
phpexecpath=/opt/lampp/bin/php 
phpredirectorpath=/opt/lampp/htdocs/bin/redir.php 
logdfile=/opt/lampp/htdocs/bin/log.txt 
forcedexit=false 

while [ "${forcedexit}" != "true" ] 
do 
    read squidinput 
    phpout=`"${phpexecpath}" "${phpredirectorpath}" "${squidinput}"` 
    echo "${phpout}" 
done 

echo "\r\n" 

exit 0 

我已經用Google搜索來查找有關PHP CLI &源的使用,但沒有運氣任何有用的文檔。

您有任何建議可以減少源使用情況嗎?

+0

對於代碼視圖問題感到抱歉。 我無法修復通過不同的粘貼方法:( – risyasin 2009-07-10 01:21:24

回答

0

我敢打賭你會笑話這個。我在看錯地方。

經過長時間追蹤魷魚的stdin/stdout。 我剛剛在循環中添加了一條if語句。以字符串的形式控制字符串的長度。

while [ "${forcedexit}" != "true" ] 
do 
    read squidinput 
    if [ -n squidinput ] 
     then 
     phpout=`"${phpexecpath}" "${phpredirectorpath}" "${squidinput}"` 
     echo "${phpout}" 
    fi 
done 

結果:沒有在後臺等待php進程了。 ,因爲它處理&僅以毫秒爲單位退出。

沒有IF語句魷魚發送空格和換行符到腳本,所以它永遠不會停止。我正在修剪輸入字符串與PHP,這就是爲什麼我不能得到早期魷魚怪異的stdins。修剪$ argv只是一個習慣。 魷魚版本是2.6stable7可能它在早期版本中都是一樣的。 我剛剛失去了半天:( 謝謝大家閱讀。