2

我有线

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

这不起作用,因为 file.php 不在同一个文件夹中,而是在公众不可见的不同私人文件夹中。

有没有办法使用打开功能打开不同文件夹中的文件?

4

2 回答 2

2

这是根本不可能的。

如果要向它发送 HTTP 请求,它必须通过 HTTP 对公众可见。

于 2012-09-16T17:51:01.253 回答
1

您只能从公共网络空间中请求文件。要访问公共网络空间之外的文件,您需要公共网络空间中的一个脚本,该脚本可以从私人文件夹中获取内容,例如

<?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 回答