2

私はラインを持っています

xmlhttp.open("GET","file.php?id=4",true);

file.phpは同じフォルダーではなく、一般に公開されていない別のプライベートフォルダーにあるため、これは機能しません。

open関数を使用して別のフォルダーにあるファイルを開く方法はありますか?

4

2 に答える 2

2

それは基本的に不可能です。

HTTPリクエストを送信する場合は、HTTPを介して一般に公開されている必要があります。

于 2012-09-16T17:51:01.253 に答える
1

公開ウェブスペース内からのみファイルをリクエストできます。パブリックWebスペース外のファイルにアクセスするには、プライベートフォルダーからコンテンツをフェッチできるパブリックWebスペース内のスクリプトが必要です。

<?php // file.php in the public webspace

    $allowedFiles = array(
        1 => '/path/to/private/space/on/server/file1.txt',
        2 => '/path/to/private/space/on/server/file2.txt',
        3 => '/path/to/private/space/on/server/file3.txt',
        4 => '/path/to/private/space/on/server/file4.txt',
    );

    $id = filter_var($_GET['id'], FILTER_VALIDATE_INT);

    if (isset($allowedFiles[$id])) {
        readfile($allowedFiles[$id]);
    }

今あなたがするとき

xmlhttp.open("GET","file.php?id=4",true);

スクリプトはのコンテンツを送信します

/path/to/private/space/on/server/file4.txt

クライアントに。

いくつかのコメントに関する編集:

  • readfileファイルの内容は実行されないことに注意してください。PHPスクリプトの結果を送信する必要がある場合は、のinclude代わりにを使用する必要がありreadfileます。詳細については、マニュアルを参照してください。

  • 上記のアプローチは、現在使用されているほとんどのフレームワークと実質的に同じです。アプリケーションへのゲートウェイとして機能する単一のスクリプトがあります(フロントコントローラーパターンのようなものです)。このスクリプトは、アプリケーションへのすべての要求(mod_rewriteを考えてください)を受け入れ、公的にアクセス可能な唯一のPHPファイルです。アプリケーションをブートストラップし、URL(または適切と思われるもの)から、プライベートスペース内のどのファイル(通常はMVCを使用する場合はコントローラー)をインスタンス化して呼び出すかを決定します。

于 2012-09-16T17:54:01.100 に答える