PHP中fopen()与fwrite()函数在任务计划中运行异常问题
解决PHP脚本在Windows任务计划中无法写入文件的问题
我之前也碰到过一模一样的情况——浏览器里跑脚本完全正常,放到任务计划里就掉链子,大概率是工作目录不匹配或者权限不足搞的鬼,咱们一步步来排查解决:
1. 先搞定工作目录问题
浏览器运行PHP时,默认工作目录是你的网站根目录,但任务计划执行bat脚本时,默认工作目录可能是C:\Windows\System32或者任务计划的默认路径,这时候你用相对路径写的testnew.txt,根本不会写到你预期的脚本所在文件夹里。
解决办法二选一:
- 在PHP脚本里直接用绝对路径指定文件位置:
<?php $prefixnew = "testnew"; // 替换成你脚本所在的实际绝对路径 $file1 = fopen("C:\your\script\folder\testnew.txt","w"); $content_wr_g = "Test sitest"; fwrite($file1,$content_wr_g); fclose($file1); ?> - 或者在bat脚本里先切换到脚本所在目录,再执行PHP命令:
@ECHO off // 替换成你脚本所在的文件夹路径 cd /d "C:\your\script\folder\" C:\wamp\bin\php\php5.3.13\php.exe -f "test.php" popd
2. 排查权限问题
任务计划的执行用户权限,和浏览器运行时的Apache用户权限完全不是一回事,很可能没有写入目标文件夹的权限:
- 找到
testnew.txt要写入的文件夹,右键→属性→安全,给任务计划的执行用户(比如你当前登录用户或者系统账户)添加写入、修改权限 - 打开任务计划,找到你的任务,在「常规」选项卡勾选「使用最高权限运行」,同时可以选择「不管用户是否登录都要运行」(这个需要管理员权限)
3. 检查PHP配置差异
浏览器用的是WAMP集成的PHP配置,而直接调用php.exe可能加载的是系统默认配置,比如open_basedir限制了可写入的路径。你可以在bat里指定使用WAMP的php.ini:
@ECHO off cd /d "C:\your\script\folder\" C:\wamp\bin\php\php5.3.13\php.exe -c "C:\wamp\bin\php\php5.3.13\php.ini" -f "test.php" popd
测试小技巧
先双击运行你的bat脚本,如果双击能正常生成文件,那问题肯定出在任务计划的配置上(比如权限、运行用户);如果双击也不行,那就是脚本或bat的路径配置有问题,先把这个解决了再去设置任务计划。
内容的提问来源于stack exchange,提问作者KMS
相关产品推荐
相关产品推荐

