启动作业PHP脚本在Powershell中不起作用?

时间:2014-12-29 16:12:03

标签: php powershell

我有一个看起来像这样的PHP脚本:

if(file_exists("temp.txt")){
    $myfile = fopen("temp.txt", "a") or die("Unable to open file!");
}
else{
    $myfile = fopen("temp.txt", "w") or die("Unable to open file!");
}
date_default_timezone_set("America/New_York");
$date = date('m/d/Y h:i:s a', time());
$text = $date . PHP_EOL;
fwrite($myfile, $text);
fclose($myfile);

当我使用

在Powershell中运行上述脚本时
php myscript.php

创建并写入文本文件。

如果我尝试使用

运行相同的文件
Start-Job ScriptBlock {php myscript.php} 

我会得到像

这样的回复

enter image description here

但我的文本文件从未写入。似乎Start-Job永远不会启动我的PHP脚本。

如何让Start-Job开始运行PHP脚本?

1 个答案:

答案 0 :(得分:0)

好的,我会写一个关于所有这些的答案:

从测试开始(以脚本为原点)我添加了一些echo来获取powershell中的Receive-Job。

很明显,脚本按预期运行,但不在预期目录中。

所以我在echo中添加了一个getcwd(),这告诉我作业(或scriptblock)的工作目录是我的文档目录)然后我在那里找到了我的文件目录。

这里是我最后的剧本:

echo "I'm running in ".getcwd()." !\n";

if(file_exists("temp.txt")){
    $myfile = fopen("temp.txt", "a") or die("Unable to open file!");
}
else{
    $myfile = fopen("temp.txt", "w") or die("Unable to open file!");
}
echo "Ok, file was opened: \n".print_r(fstat($myfile),1)."\n";
date_default_timezone_set("America/New_York");
$date = date('m/d/Y h:i:s a', time());
$text = $date . PHP_EOL;
$r=fwrite($myfile, $text);
echo "Write in file returned $r \n";
fclose($myfile);
echo "File closed\n";

这就是Powershell的输出:

Start-Job -ScriptBlock { D:\wamp\bin\php\php5.4.3\php.exe D:\wamp\bin\php\php5.4.3\test.php }

Id              Name            State      HasMoreData     Location             Command
--              ----            -----      -----------     --------             -------
51              Job51           Running    True            localhost             D:\wamp\bin\php\php5....

检索输出:

Receive-Job 51
I'm running in C:\Users\my_name\Documents !
Ok, file was opened:
Write in file returned 24
File closed

希望它会有所帮助。