这是我的第一篇文章,我想提前道歉,如果它没有措辞或以最佳方式构建。
我正在使用Windows 7.5 Home Premium与IIS 7.5和PHP 5.3 我在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;
但是,如果我在exec调用之前没有进入网络路径,那么一切正常。似乎当php cwd被设置为网络路径时,从那时起启动的任何exec都会失败。
总而言之,我需要使用exec从PHP运行c:\ afolder \ win32 \ pdftotext.exe并从网络共享中读取它的输入文件并在Windows网络位置上写入其输出。
答案 0 :(得分:1)
我不确定我是否完全理解你的问题,但有些事情可能有所帮助。
iis运行的帐户(应用程序池标识和/或身份验证)是否可以访问网络共享?尝试使用真实用户而不是系统帐户。
你可以直接在exec调用中使用unc路径作为参数(你需要调用chdir())吗?
你的print_r($ reary)应该是print_r($ retary)
添加。“2>& 1”到shell上执行的命令的末尾,通常会得到一些输出,这对调试很有用。例如,这是我们用于在Windows命令行上执行的方法:
/**
* Execute the command - remember to provide path to the command if it is not in the system path
*
* @param string $command The command to execute through the Windows command line
* @param string &$output This is any output returned from the command line
* @return int The return code 0 normally indicates success.
*/
static public function Execute($command, &$output)
{
$out = array();
$ret = -1;
exec($command." 2>&1",$out,$ret);
foreach($out as $line)
{
$output.= $line;
}
return $ret;
}
使用如下:
$output = '';
if(WindowsUtiliy::Execute('shell command', $output) != 0)
{
die($output);
}
很抱歉,如果我错过了这一点!