在Windows上的PHP exec – php cwd是一个Windowsnetworking共享

这是我的第一篇文章,如果不是最好的方式,我想提前道歉。

我正在使用IIS 7.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; 

但是,如果我不在exec调用之前的networkingpathchdir然后一切正常。 似乎当php cwd被设置为一个networkingpath,从那时开始的任何执行失败。

总而言之,我需要c:\ afolder \ win32 \ pdftotext.exe使用exec从PHP运行,并从networking共享中读取input文件,然后将其输出写入Windowsnetworking位置。

我不确定我是否完全理解你的问题,但有些事情可能会有所帮助。

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); } 

对不起,如果我错过了点!