为什么可以’;PHP脚本通过命令行或任务调度器在Server2008上编写文件?

为什么可以’;PHP脚本通过命令行或任务调度器在Server2008上编写文件?,php,fastcgi,scheduled-tasks,fwrite,Php,Fastcgi,Scheduled Tasks,Fwrite,我在serverfault.com上创建了一个问题,建议我在这里提问 我有一个PHP脚本。当我使用浏览器时,它运行良好。它在同一目录中写入XML文件。脚本运行大约需要60秒,生成的XML文件约为16MB 我正在Windows Server Web edition SP1 64位上通过FastCGI运行PHP5.2.13 代码从SQLServer中提取清单,运行循环为第三方构建XML文件 我在TaskScheduler中创建了一个任务来运行c:\php5\php.exe“D:\inetpub\t

我在serverfault.com上创建了一个问题,建议我在这里提问

我有一个PHP脚本。当我使用浏览器时,它运行良好。它在同一目录中写入XML文件。脚本运行大约需要60秒,生成的XML文件约为16MB

我正在Windows Server Web edition SP1 64位上通过FastCGI运行PHP5.2.13

代码从SQLServer中提取清单,运行循环为第三方构建XML文件

我在TaskScheduler中创建了一个任务来运行c:\php5\php.exe“D:\inetpub\tools\build.php”

任务计划程序显示大约一分钟的时间间隔,即脚本在浏览器中运行所需的时间

没有返回错误,但没有创建文件

每次我更改计划任务属性时,都会出现一个用户密码框,并输入管理员帐户密码

如果在命令行中运行相同的路径和参数,则不会出错,也不会创建文件

当我以管理员身份右键单击“运行命令提示符”时,仍然没有创建该文件。我在文件创建之后得到echo语句“file published”,并且没有返回任何错误

我正在做一个简单的fopen-fwrite-fclose,将一个php变量的内容保存到一个.xml文件中,该文件仅在脚本通过浏览器运行时创建

以下是xml构建循环之后发生的情况:


$feedContent.=”

sqlsrv\u关闭($conn);
echo“构建的提要”

”; $feedFile=“feed.xml”; $handler=fopen($feedFile,'w'); fwrite($handler,$feedContent); fclose($handler); echo“文件已发布”

”;


谢谢

您很可能需要指定提要文件的绝对路径。不清楚您执行脚本的确切位置,但脚本的“工作目录”通常是从哪里开始的:

 c:\some\deeply\nested\directory> c:\php5\php.exe d:\inetpub\tools\build.php
将尝试将源文件写入:

 c:\some\deeply\nested\directory\feed.xml
而不是在c:\php5或d:\inetpub\tools中

我不知道任务调度器使用什么作为默认目录,但很可能不是您所期望的


还要检查您在任务计划程序中运行作业的帐户是否对输出目录具有写入权限。并始终检查调用的
fopen()
是否成功(失败时返回FALSE)。

您是正确的。我只是查找了feed.xml,在c:\users\administrator中找到了一个。我假设脚本将在它自己的目录中运行,无论我如何启动它的执行。谢谢你的帮助
 c:\some\deeply\nested\directory\feed.xml