这是我的第一篇文章,如果不是最好的方式,我想提前道歉。
我正在使用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); }
对不起,如果我错过了点!