2010-11-29 15 views

答えて

2

実行しようとしているコマンドは何ですか?あなたが残したコメントからPHP自体を実行しようとしているように思えますか? (あなたはC:\xampp\php\php.exeproc_open()に渡しました)

実行ファイルを実行することなく、php.exe内で実行したいことは何でもできます。実行可能ファイルは、Webサーバーから.phpファイルを要求するときにApacheによって呼び出されます。したがって、PHPコードを実際に実行する必要がある場合は、コードを作成するだけです。 PHPインタプリタをロードするようにPHPに指示しません。これは愚かなことでしょう=)英会話のための英語通訳を持つように。

あなたが実行しようとしているコマンドを具体的に教えていただければ、それを達成するためのより良い説明を提供できる場合があります。 GPGを使用してファイルを暗号化するために、proc_open()を使用しなければならなかった私自身の経験から、私は一つの例を知っています。

$descriptors = array(
    0 => array("pipe", "r"), // STDIN. Used to feed input 
    1 => array("pipe", "r"), // STDOUT. We are writing to it, though 
    2 => array("pipe", "w"), // STDERR. Used to read errors 
); 
// Build the command line and start the process 
$cmd = '"C:/program files/gnu/gnupg/gpg.exe" --batch --no-verbose --passphrase-fd 1 --output decrypted.zip --decrypt encrypted.zip.gpg'; 
$gpg = proc_open($cmd, $descriptors, $pipes); 
if(is_resource($gpg)) { 
    // Push passphrase to custom pipe 
    fwrite($pipes[1], $passphrase); 
    fclose($pipes[1]); 
    proc_close($gpg); 
} 

STDOUTの場合、「私たちはそれを書いています」と言います。このコードは、実際にはWindows(VistaとXPの問題)に対する私の解決策でした。 Windowsでは3つのパイプをコマンドラインプログラムと通信することができますが、これはUNIXとは異なり、もっと多くのものを作成することができます(私は256などと思う)。一般にGPGは4本のパイプが必要です。 1つは入力データ(暗号化/復号化されるデータ)用、1つは出力データ用、もう1つはエラー用、もう1つはパイプ用のパイプ用です。

私はプログラムの出力を見る必要がないファイルを復号化していたので、エラーがあるかどうかを確認するだけでした。エラーは、ファイル内で出力が見つかりませんでした。したがって、私は出力パイプを無視し、それをパスワードの送信に使用しました。あなたの使い方によっては、このようなトリッキーな解決法は必要ありません。

1

exec()は、対話型プログラム用に設計されていません。サブプロセスと話すには、双方向通信が可能なproc_open()を使用することをお勧めします。

+0

それは確かにそれを行う方法のように見えますが、私はまだサンプルを動作させるのに苦労しており、あなたに戻ってきます。エラーファイルに "'php'が内部または外部コマンド、 操作可能なプログラムまたはバッチファイルとして認識されません。 php.exe * IS *は私のWindowsシステムのPATHにあります。 – Mawg

+0

私が例をとり、絶対パスをPHPインタプリタ "$ process = proc_open( 'c:/xampp/php/php.exe'、$ descriptorspec、$ pipes、$ cwd、$ env)に入れるように変更すると、 "警告:proc_open()[function.proc-open]:CreateProcess failed、error code-0"とエラーファイルが空です – Mawg

+0

だから、これを答えとして数えることはできません。ごめんなさい。しかし、私はあなたの手伝いに感謝します。 – Mawg

関連する問題