0

RTFファイルを取得し、OpenOfficeマクロを使用してPDFに変換するバッチファイルをPHPに呼び出させようとしています。コマンド ラインでバッチ ファイルをテストしたところ、正常に動作しましたが、PHP から同じバッチ ファイルを呼び出して使用することができませんでした。

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

PHP は次のようになります。$arg は変換する RTF です。

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

次に、try-catch 内で exec コマンドを呼び出します。

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 ファイルが変換されず、エラーが表示されません。次に試すことができるアイデアはありますか?ありがとう!!!

4

4 に答える 4

1

これはパーミッションに関するものだと思います。

通常のセットアップでは、PHPはApacheとして実行されるため、Apacheにバッチファイルを実行する権限があることを確認する必要があります。

また、この関連するSOの質問、およびこのgoogle検索を確認してください。

于 2009-06-02T17:27:36.680 に答える
1

出力配列が空のようです。バッチスクリプトに出力があるはずですか?

また、escapeshellcmdとescapeshellargを使用する必要があります

于 2009-06-02T17:29:42.607 に答える
1

IIS を Web サーバーとして使用していますか? その場合、PHP exec 関数はデフォルトでは機能しないため、実行を妨げるセキュリティ対策を回避するべきではありません。

イベント ビューアを確認すると、問題に関連するエラーがいくつか見つかるはずです。次のクエリを Google で実行します: IIS PHP exec. これにより、問題に関するさまざまな情報が得られます。

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

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

それは確かにクラッジです。

于 2009-06-02T17:37:02.470 に答える
0

PHPはセーフモードで実行されていますか?その場合、シェルコマンドはescapeshellcmdでエスケープされます。おそらくこれが問題ですか?

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

于 2009-06-02T17:27:07.273 に答える