终于发现了php的一个毛病!

istrue 2004-03-02 04:49:21
用php编写代码编了一年多,从没有发现它有什么问题。
今天突然发现,一个程序运行出现异常,注意不是出错,是系统提示应用程序异常!
聪明的人会发现以下这个程序是用来使php程序格式自动规范化的,子程序调用了自身。运行结果:浏览器弹出了apache系统(即php)发生异常!
<?
$basedir = "e:/web/test";
$outdir="e:/web/lin";
//echo "请先修改目录参数,并删除本行";exit;
$hotelword=0;
$hotelline=0;

$outfile=in_dir($basedir,$outdir);

echo "系统共".$hotelline."行<br>计".$hotelword."字";

function in_dir($basedir,$outdir)
{
global $hotelword,$hotelline;
$file_in=array();
$file_out=array();
chdir($basedir);
$handle=opendir(".");
while ($file = readdir($handle))
{
if(is_file($file) and substr($file,-3)=="php")
{
$file_in=file($file);
$file_out=array();
$num=count($file_in);//行数

$hotelline=$hotelline+$num;

$blanks=0;//空格数
$quohaos=0;//括号
$cc=0;//当前输出行号
$yinghao=0;//引号标志
$zhuxi=0;//注释标志
$bigin=0;

for ($i=0;$i<$num;$i++)
{
$row=chop(ltrim($file_in[$i]));//去除首尾空格
$len=strlen($row);

$hotelword=$hotelword+$len;

for ($j=0;$j<$len;$j++)
{
$row_char=substr($row,$j,1);

if (substr($row,$j,2)=="<?")
{
$file_out[$cc]=$file_out[$cc]."<?";
$cc++;
$file_out[$cc]=add_blanks($blanks);
$bigin=1;
$j++;
continue;
}
elseif (substr($row,$j,2)=="?>")
{
$file_out[$cc]=$file_out[$cc]."?>";
$bigin=0;
$j++;
continue;
}
elseif ($bigin==0)
{
//非处理部份,不需任何操作
}
elseif (substr($row,$j,2)=="/*" and $zhuxi==0)
{
$cc++;//另起一起
$file_out[$cc]="/*";
$cc++;//另起一起
$file_out[$cc]="";
$zhuxi=1;
$j++;
continue;
}
elseif(substr($row,$j,2)=="*/" and $zhuxi==1)
{
$cc++;//另起一起
$file_out[$cc]="*/";
$cc++;//另起一起
$file_out[$cc]=add_blanks($blanks);
$zhuxi=0;
$j++;
continue;
}
elseif($zhuxi==1)
{
//注释,跳过后检查
}
elseif (substr($row,$j,2)=="//")
{
$file_out[$cc]=$file_out[$cc].substr($row,$j);
$cc++;//另起一起
$file_out[$cc]=add_blanks($blanks);
break;//尾部注释,直接输出,本行不再检查
}
elseif ($row_char=="\"" and substr($row,$j-1,1)!="\\" and $j>1)
{
if ($yinghao==0)
{
$yinghao=1;
$blanks+=2;
}
else
{
$yinghao=0;
$blanks-=2;
}
}
elseif($yinghao==1)
{
//引号中,跳过后检查
}
elseif ($row_char=="{")
{
$cc++;//另起一起
$file_out[$cc]=add_blanks($blanks)."{";
$blanks+=2;
$cc++;//另起一起
$file_out[$cc]=add_blanks($blanks);
continue;
}
elseif ($row_char=="}")
{
// $cc++;//另起一起
$blanks-=2;
$file_out[$cc]=add_blanks($blanks)."}";
$cc++;//另起一起
$file_out[$cc]=add_blanks($blanks);
continue;
}
elseif ($row_char=="(")$quohaos++;
elseif ($row_char==")")$quohaos--;
elseif($quohaos!=0)
{
//括号中,跳过后检查
}
elseif ($row_char==";")
{
$file_out[$cc]=$file_out[$cc].";";
$cc++;//另起一起
$file_out[$cc]=add_blanks($blanks);
continue;
}

$file_out[$cc]=$file_out[$cc].$row_char;
}
if ($bigin==0)
{
$cc++;
$file_out[$cc]=add_blanks($blanks);
}
elseif ($zhuxi==1)
{
$cc++;
}
elseif (chop(ltrim($file_out[$cc]))!="")
{
$cc++;
$file_out[$cc]=add_blanks($blanks);
}
}
out_dir($outdir,$file,$file_out);
}
elseif(is_dir($file))
{
closedir($handle);
$lin1=$basedir."/".$file;
$lin2=$outdir."/".$file;
in_dir($lin1,$lin2);
}
else
{
closedir($handle);
$lin1=$basedir."/".$file;
$lin2=$outdir."/".$file;
copy($lin1,$lin2);
}
}
closedir($handle);
//首先存放子目录
}

function add_blanks($num)
{
$outs="";
for ($i=0;$i<$num;$i++)
{
$outs=$outs." ";
}
return $outs;
}

function out_dir($outdir,$finename,$outfile)
{
$file=$outdir."/".$finename;
$fp=fopen($file,"w");

while ($rows=each($outfile))
{
if (ltrim(chop($rows[1]))!="")
{
fwrite($fp,$rows[1]);
fwrite($fp,"\r\n");
}
}
fclose($fp);
}
?>
...全文
40 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧