2012-09-17 132 views
2

这是我的第一篇文章,我想提前道歉,如果它的措辞或结构不是最好的方式。在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网络位置。

回答

1

我不知道我完全理解你的问题,但有些事情可以跳到脑海,可能会有所帮助。

iis正在运行的帐户(应用程序池身份和/或身份验证)是否可以访问网络共享?尝试一个真实的用户而不是系统帐户。

你可以直接在exec调用中使用unc路径作为参数吗(你是否需要调用chdir())?

你的print_r($ reary)应的print_r($ retary)

增加。” 2> & 1" 到外壳上执行的命令的结束,通常会得到你一些输出回这可能是有用的进行调试。例如,这是我们使用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); 
} 

很抱歉,如果我错了!

+0

似乎当PHP cwd指向一个UNC路径,然后任何对exec()函数的调用(如果我没有弄错的话)将启动一个新的进程,并在同一用户下使用“cmd.exe/C” PHP,失败。我最初以为这是我逃跑的角色,当时我试图使我的命令对路径和/或文件名中的可能空格强健。只有当我在exec()中尝试了一些简单的命令(比如“%CD%”和“dir”)时,才意识到还有其他的东西。目前我有我自己的包装执行改变到本地驱动器 - chdir(“c:\\”); - 之前的exec(),很像你上面的 – tommizi

+0

这当然只是一个工作,但我不知道还有什么要做。我相信这个问题的路线符合php传递它的cwd到cmd.exe/C的方式,以及如果它是UNC路径,后者不能改变它。这只是一个猜测..但我想象一下,当cmd.exe进程启动时,php会执行一些初始cd $ phpcwd。 cd和UNC路径不会混合,只会推送将临时路径映射到驱动器的作品:\ somepath \文件夹 – tommizi

+0

您刚才所说的所有内容我都试过了,exec将unc路径硬编码到命令中。如果php cwd在unc上失败了,如果之前那个exec改为c:\它就起作用了。错误或功能只有时间才会显示:-) – tommizi

相关问题