这是我的第一篇文章,我想提前道歉,如果它的措辞或结构不是最好的方式。在Windows上的PHP exec - php cwd是一个Windows网络共享
我正在使用IIS7.5和PHP 5.3的Windows7家庭高级版 我在php中执行以下代码,它不起作用。 exec命令返回1和一个空数组。
$path = "\\\\somecomputer\\somepath\\afolder";
chdir($path);
$cmd = "pushd $path";
exec("echo off & $cmd & \"c:/bfolder/somexecutable.exe\" -flag1 -flag2 \"$inputfile\" > outputfile.log", $retary, $retval);
print_r($reary);
print $retval;
但是,如果我没有chdir到exec调用之前的网络路径,那么一切正常。看起来,当php cwd被设置为网络路径时,从此开始的任何执行失败。总结一下,我需要c:\ afolder \ win32 \ pdftotext.exe使用exec从PHP运行,并从网络共享中读取输入文件并将其输出写入Windows网络位置。
似乎当PHP cwd指向一个UNC路径,然后任何对exec()函数的调用(如果我没有弄错的话)将启动一个新的进程,并在同一用户下使用“cmd.exe/C” PHP,失败。我最初以为这是我逃跑的角色,当时我试图使我的命令对路径和/或文件名中的可能空格强健。只有当我在exec()中尝试了一些简单的命令(比如“%CD%”和“dir”)时,才意识到还有其他的东西。目前我有我自己的包装执行改变到本地驱动器 - chdir(“c:\\”); - 之前的exec(),很像你上面的 – tommizi
这当然只是一个工作,但我不知道还有什么要做。我相信这个问题的路线符合php传递它的cwd到cmd.exe/C的方式,以及如果它是UNC路径,后者不能改变它。这只是一个猜测..但我想象一下,当cmd.exe进程启动时,php会执行一些初始cd $ phpcwd。 cd和UNC路径不会混合,只会推送将临时路径映射到驱动器的作品:\ somepath \文件夹 – tommizi
您刚才所说的所有内容我都试过了,exec将unc路径硬编码到命令中。如果php cwd在unc上失败了,如果之前那个exec改为c:\它就起作用了。错误或功能只有时间才会显示:-) – tommizi