2009-07-10 5 views
1

Я пытаюсь закодировать пользовательский url_rewriter для squid. & также с использованием некоторых других программ url_rewriter, таких как squidGuard , поэтому вам необходимо использовать обертку, чтобы использовать обе или любую другую программу.PHP cli Оптимизация использования памяти

Когда я пытаюсь зацикливаться на php. (именно так, как кальмар обменивается данными с внешними программами. STDIN/STDOUT. Это дает вам URL & вы должны послать новый один или старый один назад.)

имеет разрушительное использование памяти даже ничего не делая. Я изменил, чтобы обернуть его другим скриптом bash, это всего лишь несколько строк. & это петли вместо php. вызывает php извне. когда php-скрипт выполняется с URL-адресом, возвращает его &. этот способ намного лучше, чем вместо того, чтобы зацикливать скрипт php.

В php-скрипте почти ничего нет. (coz я все еще разрабатываю его.) это только замена 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); 

А вот Баш скрипт

#!/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 

я уже гугле найти любую полезную документацию по PHP кли & использования источника, но не повезло.

У вас есть советы по уменьшению использования источника?

+0

Извините, что проблема связана с кодом. Я не мог исправить с помощью разных методов пасты :( – risyasin

+0

Простой способ вставить код: скопируйте и вставьте его, затем выберите код и нажмите кнопку 101010 на панели инструментов (или нажмите Ctrl-K). Это будет отформатировать его как код –

+0

Спасибо, Джон. :) Это сработало. Я имею в виду ctrl + K вместо того, чтобы вставлять выделенный текст. – risyasin

ответ

0

Я уверен, вы будете смеяться над этим. я смотрел на неправильное место.

после длинного трассировки stdin/stdout кальмара. Я только что добавил оператор if в цикле. для управления длиной строки в качестве URL-адреса.

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

результат: в фоновом режиме нет ожидающих php-процессов. потому что он обрабатывает &, выходящий всего за миллисекунды.

без оператора IF squid отправляет пустые места и символы новой строки в сценарий, чтобы он никогда не останавливался. Я обрезал входную строку с php, поэтому я не мог получить более странные stdins squid. обрезка $ argv - это просто привычка. версия для squid была 2.6stable7, вероятно, это все равно в более ранних версиях. Я только что потерял полдня :( Благодарю вас за всех прочитанных.

Смежные вопросы