|
发表于 2007-5-13 08:43:58
|
显示全部楼层
Post by yanglei1979
关于PHP程序会把服务器搞死机的问题,我还有一个疑问?
一,如果PHP程序可以把服务器搞死机的话,那么我以前写采集网站的内容的程序的时候,都是每次循环5000至一万次的,甚至更多,每次循环几万次采集内容,那么这些提次为什么被采集的网站不受丝毫影响呢?我试过了,在采集的程序运行的时候,打开被采集的网站,速度没有任何影响,照常运行.
二,就按网站每天1000IP算,每个IP平均三个网页计算,那么每天打开的网页也就几千个而已,而打开这些网页的数量,在采集程序里面十几到几十分钟就做到了,那为什么后者又频繁网页又多却对服务器没任何影响,而前者又不太频繁网页又少,服务器却会死机呢?
三,我在自己电脑上做测试好下,我的电脑是赛扬三1100的CPU,256M内存,应该是比较老的机器了,硬盘5400转的普通硬盘,在我用JS每秒两次不停地刷新页面的时候,运行了十几分钟也打开了上千次网页吧,但对我自己电脑的性能却丝毫不受影响, 而服务器是双至强的CPU,2G内存,SCSC硬盘,和我自己的电脑比,简直一个天上,一个地下,服务器怎么会死机呢?
如果程序有问题的话,在我的配置很低的电脑上面应该会很快挂掉的,但却没有?难道要提高压力测试的强度?
实在是搞不明白.
和include没有关系。
1.这是一定是因为你include文件后,关了它的connect,所以出错。因为:
include和直接写代码是一样的。所有,如果有两个$Con=mysql_Connect1,和$Con=mysql_Connect2,则第一个connect丢失,你关了第二个connect,再使用$Con时,会发生连接已关闭错误。
2.如果没有内存泻漏等错误,正常的程序是不会死机的。死机一般也是Web Server死掉。你的程序消耗完了所有系统资源,做PHP程序本很产生非法操(一般是内存错误),所有死了...
3.如果没有逻辑错误,用include是不会产生你所说的问题的。坚持每次connect和close的原因是,减少你所说的此类错误的机率。用include时要小心。如下:
$con=Connect();
...include (File1);
$res2=query(..,$con);
$close($con);
时,如果File1在也有一个$con变量,系统会认为这个$con和上一个$con是相同的变量。比如
$cat File1
$con=connect();
$res=runsqlquery("SqlStation",$con);
......
$close($con);
$
现在,inluce后变成:
$con=connect(); ##Connect 1
...
#######File1 was included#################
$con=connect(); #第一个$con丢失,产生资源程序泻漏。
$res=runsqlquery("SqlStation",$con);
......
$close($con); #因为加上了这一句,$res2的query将出错
#######File1 end here ###################
$res2=query();
close($con);
所以说,用include时要小心,很容易出错的。因为变量会打架。特别是在大的程序中,像$i(很多程序员都有C的经验吧)这样的变量...
所以,我又坚持另一个原则:变量先声明,再使用(像Perl和Basic这类语言我也就比较反感,一个变量被声明两次,一般在编译时就会报错,用include时也一样)。此外,上面贴子也说了另一个原则,明确写出完整的条件。比如perl中的
print;
和
print $_;
语句是一样的。我一定写print $_; #因为要增加原代码长度,以显得我能写很长的程序#
此外,只是include $username和$psw而不是conect语句,那是因为,这样的话,我在程序中发现了一个"("(也就是connect),就一定会找到另一个和它对应的")"(也就是close), 这样我比较放心,#我比较胆小,哈; |
|