对于我目前正在处理的一个项目,我使用PHP内置开发服务器为测试运行器的一部分提供文件。我注意到不一致的行为,经过一些调试后,我意识到由于proc_open()而启动的进程从未关闭,因此开发服务器继续运行到下一个测试。
我已经总结了这个问题,所以我可以用最简单的方式重现它。文件time.php只输出当前时间:
time.php
The time is <?php echo date("H:i:s");
然后,start.php将在端口8888上启动内置的PHP开发服务器(php -S),以便可以在http://localhost:8888/time.php上访问time.p
目前,我的网站采用了一个缓存系统,新请求的页面会被生成,然后动态缓存,以便将来更快地执行。总体格式是这样的伪代码:
See if cached page exists.
If cached page exists then
Load cached page
Exit
If cached page does not exist then
Generate page
Save output to cache file
Exit
每个新请求的页面需要250到500毫秒的加载时间,每个缓存的页面需要100到200
在我的服务器上,偶尔,脚本和由脚本创建的缓存文件会被PHP进程锁定。一旦锁定,它们既不能通过网络共享访问,也不能在服务器上本地访问或由PHP本身访问。刷新页面会导致访问被拒绝错误:
Warning: rmdir(C:\inetpub\wwwroot\mdblog\public\..\cache\posts\2012)
[function.rmdir]: Directory not empty in
C:\inetpub\wwwroot\mdblog\public\system\Filesystem.php on line 52
第52行是rmdir($dir);。
在进行大量的磁盘操作(连