我正在为Squid编写一个自定义的URL重写器。
&还可以使用其他URL重写程序(如Squidguard)
所以必须使用包装器才能同时使用这两个程序或任何其他程序。
当我尝试用PHP循环时。
(这就是Squid与外部程序通信的方式。
STDIN/STDUT。它为您提供了一个URL,您必须将新的或旧的URL发回。)
它有一个破坏性的内存使用,甚至什么都不做。
我已经改为用另一个bash脚本包装它,它只有几行。
&它循环而不是PHP。从外部调用PHP。当php脚本处理完url后,返回&exits。
这种方法比循环PHP脚本要好得多。
在PHP脚本中,现在几乎什么都没有了。(因为我还在开发它。)
它只是将video.yahoo.com替换为youtube.com。
还有几个变量和explode()来解析输入字符串…
但脚本仍在使用大量内存
下面是最高的输出:
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
我已经在谷歌上找到了任何关于php cli和源代码使用的有用文档,但没有运气。
你有什么建议来减少源代码的使用吗?