ホームページ > バックエンド開発 > PHPチュートリアル > 制御された環境で PHP を使用して外部プログラムを実行する際の問題を解決するにはどうすればよいですか?

制御された環境で PHP を使用して外部プログラムを実行する際の問題を解決するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-21 08:17:02
オリジナル
576 人が閲覧しました

How to Resolve Difficulties When Executing External Programs with PHP in a Controlled Environment?

PHP を使用した外部プログラムの実行: システムと exec のトラブルシューティング

制御された XP イントラネット環境で PHP アプリケーションから外部プログラムを開始しようとすると、問題が発生する可能性があります。以下に、一般的な問題とその解決方法をいくつか示します。

問題 1: 表示された画面でプログラムを実行できない

system() や exec() などの PHP 関数は、次のような場合があります。レポート ジェネレーターやメモ帳など、グラフィカル ユーザー インターフェイス (GUI) を必要とするプログラムの起動に失敗します。

解決策:

この問題を解決するには、サービスに移動します。コントロール パネル (services.msc)。 Apache サービスを見つけてそのプロパティを開き、[ログオン アカウント] タブの [サービスにデスクトップとの対話を許可する] チェックボックスがオンになっていることを確認します。 Apache サービスを再起動して、変更を適用します。

問題 2: 同期実行と非同期実行

デフォルトでは、システムはプログラムを同期的に実行し、完了するまで PHP スクリプトをブロックします。 。必要に応じて、pclose(popen()) を使用してプログラムを非同期に実行すると、PHP スクリプトが終了を待たずに続行できるようになります。

例:

<code class="php">// Do not wait for Notepad to close
pclose(popen("start /B notepad.exe", "r"));

// Wait for Notepad to close before continuing
system('start notepad.exe');</code>
ログイン後にコピー

注:

これらのソリューションは Windows XP でテストされています。他の Windows バージョンでは動作が異なる場合があります。また、ローカル システムではなくドメイン ユーザー アカウントでサービスを実行したい場合は、同じサービスを使用してデスクトップとの対話とネットワーク共有へのアクセスの両方を行うことができない場合があります。このような場合、サービスを 2 つのコンポーネントに分割することが必要になる場合があります。

以上が制御された環境で PHP を使用して外部プログラムを実行する際の問題を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート