2009-06-02 16 views
0

PHPがRTFファイルを取得し、OpenOfficeマクロを使用してPDFに変換するバッチファイルを呼び出そうとしています。私はコマンドラインでバッチファイルをテストしたところうまくいきましたが、PHPから同じバッチファイルを呼び出して使用することはありません。PHP execコマンドを使用してバッチファイルを実行する際の問題

私のマシンOSはXP professional SP 3です。私はIIS 6とPHPバージョン5.2.9を使用しています。 私はc:\ windows \ system32 \ cmd.exeのインターネットユーザーに実行権限を与えました。 実行するバッチファイルのフルパスと、変換するRTFファイルへのフルパスを指定しました。

PHPが$ argは変換するRTFある場合、次のようになりますのtry-catchの内側に、私はEXECコマンドを呼び出すその後

$arg = "C:\\web_root\\whatever\\tempOutput.rtf"; 
$command = "c:\\windows\\system32\\cmd.exe /c c:\\web_root\\whatever\\convert.bat $arg"; 

exec("$command 2>&1 && exit", $ret, $err); 

私は後に結果をエコーキャッチ:

echo "ret: "; 
print_r ($ret); 
print "<br>"; 
echo "err is "; 
echo $err; 
print "<br>"; 
echo "DONE!"; 

そして、これは私が見たものである。

ret: Array () 
err is 0 
DONE! 

RTFファイルが変換されず、エラーが表示されません。私が次に試すことができるものについてのアイデア?ありがとう!!!

+0

バッチファイルをリストできますか? – cdonner

+0

関連する[PHPから.batファイルをどのように実行するのですか?](http://stackoverflow.com/q/835941) – jww

答えて

0

PHPはセーフモードで動作していますか?その場合、シェルコマンドはescapeshellcmdでエスケープされます。多分これは問題ですか?

PHPスクリプトを実行しているサーバーを管理できますか?

1

私はこれが許可について賭けるつもりです。

典型的な設定では、PHPはApacheとして動作します。したがって、Apacheにバッチファイルを実行する権限があることを確認する必要があります。

でも、this relevant SO questionと、this google searchをチェックしてください。

1

出力配列が空であるように見えます。あなたのバッチスクリプトは出力を持っていますか?

また、escapeshellcmdとにescapeshellargは、あなたのWebサーバとしてIISを使用してい

1

を使用する必要がありますか?もしそうなら、PHPのexec関数はデフォルトでは動作しません。また、実行を妨げるセキュリティ対策を迂回してはいけません。

イベントビューアを確認すると、問題に関するいくつかのエラーが見つかるはずです。 Googleを使用してクエリを実行します。IIS PHP exec。これにより、問題に関する多くの情報を得ることができます。

基本的に、PHPのexec関数は、新しいcmd.exeインスタンスをforkしようとします。 IISは、システムにセキュリティホールを開く可能性があるため、これを禁止します。

私が思いついた最善の解決策は、実行するコマンドをフラットファイルに書き込むか、データベースエントリを作成することです。 Windowsスケジューラによって起動され、10分ごとに実行される別個のスクリプトを作成する必要があります。このスクリプトは、フラットファイルまたはデータベースを実行するコマンドをチェックします。新しいスクリプトはコマンドを実行し、Webアプリケーションが後でアクセスできるように結果または実行確認を配置します。

これは確かにクルーです。

関連する問題