-1

重複の可能性:
php外部プログラムの実行を開始するにはどうすればよいですか-システムと実行に問題があります

phpでexeを開く方法は?
私はこの考えを持っていて、数年間それを成功させるのに苦労しましたが、ついに失敗しました。誰かが仕事をするための成功方法を教えてくれますか?

<?php 
    if(isset($_POST['file_path'])){
        /* ------- 
            using "notepad++.exe" to open "test.php" file.
            or run a bat file which calling "notepad++.exe" to open "test.php" file.
            how to seting php.ini or firefox or any setting to do this job. 
            it is only for conveniently developing web page in my PC ,not for web servers
        ------- */
    }
?>

<form action="test.php" method="post">
    <input type="text" name="file_path" value="test.php"/>
    <button type="submit">open with notepad++</button>
</form>

これにより、次のようなものが作成されます。

レンダリングされた HTML スクリーンショット

4

4 に答える 4

5

ウェブサーバーを実行しているコンピューターでプログラムを起動するには:

<?php
exec('"C:\Program Files (x86)\Notepad++\notepad++.exe" "C:\foo.php"');

上記は、Web サーバーが Windows サービスとして実行されていない場合、vista/win7 で機能します。たとえば、apache を実行していて、コンピューターの起動時に自動的に起動する場合は、おそらくサービスとしてインストールされています。Windowsサービスタブ/thingyにApacheが表示されるかどうかを確認できます。

Web サーバーがサービスとして実行されている場合は、サービスの「デスクトップ操作を許可する」オプションを有効にすることを検討する必要があります。それ以外の場合:

PHP の新しい組み込み Web サーバー (php 5.4+) を使用した簡単なテスト。ここで重要なのは、サーバーをシェルから手動で起動することです。これにより、サーバーはサービスとしてではなくユーザーとして実行されます。

<?php
// C:\my\htdocs\script.php
exec('"C:\Program Files (x86)\Notepad++\notepad++.exe" "C:\foo.php"');

コマンド ウィンドウから Web サーバーを起動する

C:\path\to\php.exe -S localhost:8000 -t C:\my\htdocs

次に、ブラウザで http://localhost:8000/script.php

于 2012-12-27T19:27:51.373 に答える
3

リモートサーバーではなく、クライアントデバイスでNotepad ++を開くことを望んでいると思います。この場合、適切なファイル タイプ ヘッダーを使用してファイルを提供し、クライアントがそのようなファイルを開くためのデフォルト アプリケーションとして Notepad ++ を設定することをお勧めします。

このような何かがそれを行う必要があります:

header('Content-type: text/plain');
header('Content-Disposition: attachment; filename="' . $file_name . '"'); // forces file download
header('Content-length: ' . filesize($file_path));
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); // make sure file is re-validated each time it is requested

$fh = fopen($file_path, 'r');
while(!feof($fh)) {
    $buffer = fread($fh, 2048);
    echo $buffer;
}
fclose($fh);

はファイル$file_nameの名前 (完全なパスではありません) であり$file_path、ファイルへの完全なパスです。

于 2012-12-27T18:51:44.460 に答える
2

私がテストした最終的に成功した方法。
Charles に感謝します。php を参照してください 外部プログラムの実行を開始するにはどうすればよいですか - システムと実行に問題があります

  • Start->Run、「services.msc」と入力してサービスコントロールを表示します(そこに到達する他の方法、これが最も簡単なIMOです)
  • Apacheサービスを見つけます(私のものはWampServer 2.0を使用して「wampapache」と呼ばれていました)
  • サービスのプロパティを開きます (ダブルクリックまたは右クリック -> プロパティ)
  • ログオン アカウントに移動し、[デスクトップとの対話をサービスに許可する] というタイトルのチェックボックスがオンになっていることを確認します。
  • 一般タブに戻り、サービスを停止し、サービスを開始します

次に:phpで

pclose(popen("start /B \"d:\\green soft\\notepad++5.8.4\\notepad++.exe\" \"d:\\PHPnow-1.5.6\\htdocs\\laji\\a.php\"", "r"));

あなたのすべての善人に感謝します。私はついに自分の考えを真実にした。明けましておめでとう !

于 2012-12-27T20:18:49.580 に答える
1

そうする理由はありませんでしたが、 passthru() を試しましたか?

http://php.net/manual/en/function.passthru.php

編集:申し訳ありませんが、OPは一見しただけでは本当に不明確でした..

私がすることは、ファイルを文字列などに解析し、ブラウザにそれをダウンロードとして強制的に処理させることです.phpはサーバー側であるため、ブラウザにいくつかのことを要求することはできません..

$someText = 'some text here';

header('Content-type: text/plain');
header('Content-Disposition: attachment; filename="text.txt"');

echo $someText;
于 2012-12-27T18:47:45.557 に答える