我试图使用PHP来运行一个批处理文件:php为什么我不能运行批处理文件?
$script = "\\\MAFINFWWWPV02\D$\WebContent\\engsys.corp.ftr.com\BatchFiles\CopyFiles.bat";
exec($script,$ReturnArray,$ReturnValue);
//shell_exec($script);
//system('cmd /c $script');
//system($script,$ReturnValue);
没有这些工作!我试过
var_dump($ReturnValue); echo "<br>";
var_dump($ReturnArray); echo "<br>";
试试,看看是怎么回事,但我得到什么似乎是这样的正常输出:
INT(1)
阵列(0) {}
但是,我试图用我的bat文件复制的文件,在手动运行时工作正常,不会被复制!
编辑额外的问题
执行\
需要在文件地址进行转义?
EDIT 2
这是我从运行icacls
得到:
CopyFiles.bat NT AUTHORITY \ IUSR:(I)(RX)
NT AUTHORITY\SYSTEM:(I)(F) NT AUTHORITY\NETWORK:(I)(RX) CORP\ibb601:(I)(F) CORP\taw330:(I)(F) CORP\mmm976:(I)(F) BUILTIN\Administrators:(I)(F) BUILTIN\Users:(I)(RX,W)
我有完全的控制权,其他人至少有读/执行权。
编辑3
我已经把范围缩小。这不是说这些命令不起作用,而是许可被拒绝。我不明白,因为每个人都有写入和读取/执行整个文件夹的权限。
EDIT 4
我从上面的努力得到它的工作运行的命令。我正在使用功能(var_export(my_exec("shell_exec($script)"));
)将错误信息打印到我的屏幕上。我总是这样的:
'\'shell_exec \'不被识别为内部或外部命令,可操作程序或批处理文件。
我得到一个不同的每个shell_exec
,system
和exec
。它只是一直说这个命令不被识别。这是在Windows Server 2012 R2 Standard 64位上执行的。有什么我做错了命令?
功能,我使用打印错误(我发现它在另一篇文章):
function my_exec($cmd, $input='')
{
$proc=proc_open($cmd, array(0=>array('pipe', 'r'), 1=>array('pipe', 'w'), 2=>array('pipe', 'w')), $pipes);
fwrite($pipes[0], $input);fclose($pipes[0]);
$stdout=stream_get_contents($pipes[1]);fclose($pipes[1]);
$stderr=stream_get_contents($pipes[2]);fclose($pipes[2]);
$rtn=proc_close($proc);
return array('stdout'=>$stdout,'stderr'=>$stderr,'return'=>$rtn);
}
运行Web服务可能没有权限访问该服务器,位置或BAT文件和/或没有按用户没有权限访问文件或复制目的地。 – AbraCadaver
@AbraCadaver我已确保用户确实可以读取/写入这两个文件位置以及.bat文件的位置。 – Mike
@AbraCadaver有没有一种方法可以确切地查看哪个用户正在使用?或者强迫它使用某个用户? – Mike