2009-09-10 7 views
10

私は制御されたxpイントラネット環境で動作しており、PHPアプリケーションから外部プロセスを開始する必要があります。 (バックアップ、レポートなど)php外部プログラムの起動方法 - システムとexecに問題がある

私は、システムまたはexecにサイレントモードで動作するプロセスを起動させることができます。ここに簡単な例があります

<?php exec ("echo hello > hello.txt");?> 

出力が見えないbatファイルを実行するには、これを得ることができます。

私は、このようなレポートジェネレータやメモ帳として実行するには、画面を持っている任意のプログラムを取得することはできません

...

<?php exec ("explorer");?> 

は何もしません。システムの場合は

答えて

4

あなたはどのような行動を期待していますか? system('notepad')を呼び出すとうまくいきます。GUIは表示されません。それはバックグラウンドで実行され、PHPはメモ帳が閉じるのを待っています(そして、プロセスリストからメモ帳を削除すると続行されます)。

もしあなたがGUIをポップアップさせることを期待しているなら、私はそれができないことをかなり確信しています。 ;)バッチスクリプト(file_put_contents('runme.bat', 'notepad hello.txt'))を書き出し、そのバッチスクリプトを(WindowsスケジューラまたはWindows上のcronに相当するものであれ)待ち行列に入れて、非同期で実行し(最後にそれ自身をクリアする)ことができます。

+0

私はあなたが何を意味するかを見ます。あなたは右のメモ帳はGUIなしで実行されています。 (私の設定は60秒後にタイムアウトしました。)PHPからGUIベースのプログラムを起動することはできず、OSベースのソリューションに頼らざるを得ません。それは知って良いです。ありがとう! – sdfor

17

非常に遅い回答でしたが、私はこれを自分で開発していましたが、Windows XP上のApacheサーバーでPHPからGUIプログラムを実行することが実際に可能であることがわかりました。

  • スタート - >ファイル名を指定して実行、タイプ「services.mscと」サービスコントロールを起動するには鉱山はWampServerを使用して「wampapache」と呼ばれていました(
  • は、Apacheのサービスを見つけて(そこに到達する他の方法を、これはIMO最も簡単です) 2.0)
  • オープンサービスのプロパティ(ダブルクリックするか、右クリック - >プロパティ)
  • アカウントのログオンにフリップと「デスクトップとの対話をサービスに許可」というタイトルのチェックボックスを確保
  • フリップをチェックされています[全般]タブに戻り、サービスを停止します。アートサービス

ここで、以下のコードを使用して、PHPからUIプロセスを起動できます。最初のコードスニペットでは、スクリプトはアプリケーションが終了するのを待機しません。 2番目のスニペットはプログラムが終了するのを待ってから、続行(ブロック)します。

アプリケーションを待ってはいけない:アプリケーションの

pclose(popen("start /B notepad.exe", "r"));

待ち:

system('start notepad.exe');

これは、Windows XP上でテストされています。他のWindows版で試したことはありません。

サイドノート 私の特定の設置で、私は、サービスのタブ内のログ内の他のオプションを使用していた - それはドメインユーザー権限で、いくつかのネットワーク共有にアクセスできるように、Apacheはドメインユーザーとして実行されていました。そのオプションがサービスをローカルシステムとして実行している場合にのみ、このチェックボックスは使用できません。大規模な調査の結果、私は、単一のサービスが現在のデスクトップとやり取りし、特定のユーザーの資格情報を利用する方法がないことを発見しました。それは、あなたのサービスを2つのコンポーネント、つまりユーザーアカウントのprivを使用するサービスとデスクトップとやりとりするサービスの2つに分割することを提案する、1つまたは複数の提案です。あなたが話しているサービスがWebサーバーの場合はあまり実用的ではありません。このメモはおそらく私のユースケースに特有のものですが、将来別の人に別の人を救うことができるようにするために、ここに入れたいと思っていました。

+2

これは10のアップフォートがどのようにして得られたのか不思議です。私はセットアップのためのバックグラウンドプロセスとしてノートパッドを実行しますが、それは「デスクトップと対話」しています。私はWindows 7を使用しています。 – user24601

+0

@ user24601これはWindows XPのみでテストされています。私はその答えを書き留めておきます。 upvotesについては...誰が気に? –

+0

Windows 7でうまく動作する – mpyw

12

別のスーパー後半の答えが、「PHPの実行GUIプログラム」を検索する際に、これはGoogleの上に付属しています...

私は、作る実行して削除して、Windows 8.1でGUIアプリを起動することができましたスケジュールされたタスク:

shell_exec('SCHTASKS /F /Create /TN _notepad /TR "notepad.exe" /SC DAILY /RU INTERACTIVE'); 
shell_exec('SCHTASKS /RUN /TN "_notepad"'); 
shell_exec('SCHTASKS /DELETE /TN "_notepad" /F'); 
+0

私は窓7を持っていて、他の回答を試してみましたが、guiを起動できませんでしたが、これは完璧に動作しています。 –

+0

も、どのソリューションも使用していないWin10と戦っています。これはouttheboxの100%+1で動作します。 – l0ft13

+0

ローカルフォルダ、つまりファイルシステムを開く方法は? –

関連する問題