4

.exe ファイルを使用して計算を実行し、出力を PHP に渡そうとしています。C++ を使用して Hello World .exe ファイルを作成しましたが、PHP で実行できません。

CMD からこのコマンドを実行すると、正しい出力が得られます。

C:\path\file.exe

しかし、PHP でこれを行うと、出力は空の文字列になります。

exec('C:\path\file.exe',$out);
var_dump($out);

しかし、これは正しい出力を表示します:

exec('ipconfig',$out);
var_dump($out);

Windows 7 で WAMP を使用しています。

編集: C++ プログラムは次のとおりです。

#include <iostream>
using namespace std;

int main() {
    cout << "Hello World" << endl;
    return 0;
}
4

7 に答える 7

7

役立つかもしれないいくつかのアドバイス:

  1. 代わりに使用してください/。窓の下でも機能します。
  2. パスにスペースが含まれている場合は、二重引用符で囲みます$exec = '"C:/my path/file.exe"';
  3. パラメータは二重引用符の外側で渡す必要があります$exec = '"C:/my path/file.exe" /help';
  4. プログラムが実際に STDERR ではなく STDOUT に書き込むことを確認してください。
于 2013-07-03T21:58:01.273 に答える
6

一重引用符で囲まれた文字列では、バックスラッシュをエスケープする必要があるため、取得\するには次のものが必要です\\

exec('C:\\path\\file.exe',$out);
于 2013-07-03T21:47:24.780 に答える
2

config/php.ini ファイルを確認してください。exec 関数はdisable_functionsの下で無効になっている可能性があります。または、行open_basedirを確認してください。PHPは特定のディレクトリへのアクセスに制限されている可能性があります。

于 2013-07-15T09:08:00.133 に答える
1

I have copied your code to test it and:

The first time I get not output.

I added the file_exists test and get:

Warning: file_exists(): open_basedir restriction in effect. 
File(xxxxxxxxx) is not within the allowed path(s): (xxxxx:xxxx:xxxx:xxxx:xxx:xxx:) 
in xxxxxx/test.php on line 4 
Call Stack: 0.0004 645640 1. {main}() xxxx/test.php:0 0.0004 646016 2. 
file_exists() xxxxxx/test.php:4

I moved file.exe to the same directory of test.php and get:

array(1) { [0]=> string(11) "Hello World" }

PHP:

<?php
$file = 'xxxxx/file.exe';
if (!file_exists($file)) echo 'File does not exists';
exec($file, $out);
var_dump($out);
?>
于 2013-07-18T07:38:58.320 に答える
0

同じ問題がありました。test.batファイルを作成し、fwrite()その中にコマンドを入力することができます。exec('test.bat', $out, $ret)次に、そのbatファイルをexecute( )します。

test.bat内容:

C:\path\file.exe
于 2013-07-18T06:36:10.280 に答える