2

これは私の最初の投稿であり、最善の方法で表現または構成されていない場合は、事前に謝罪したいと思います.

IIS 7.5 および PHP 5.3 で Windows7 Home Premium を使用しています。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 呼び出しの前にネットワーク パスに chdir しないと、すべて正常に動作します。php cwd がネットワーク パスに設定されている場合、それ以降に開始されたすべての exec が失敗するようです。

要約すると、execを使用してPHPから実行し、ネットワーク共有から入力ファイルを読み取り、その出力をWindowsネットワークの場所に書き込むには、 c:\afolder\win32\pdftotext.exe が必要です。

4

1 に答える 1

1

あなたの質問を完全に理解しているかどうかはわかりませんが、役立つかもしれないいくつかのことが頭に浮かびます。

iis が実行されているアカウント (アプリケーション プール ID および/または認証) は、ネットワーク共有にアクセスできますか? システム アカウントではなく、実際のユーザーを試してください。

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

的外れだったらごめんなさい!

于 2012-09-22T22:47:12.690 に答える