外部php文件的xmlhttp.open()

时间:2012-09-16 17:48:29

标签: php javascript ajax

我有一行

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

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

有没有办法使用open函数打开不同文件夹中的文件?

2 个答案:

答案 0 :(得分:2)

这根本不可能。

如果要向其发送HTTP请求,则必须通过HTTP向公众显示该请求。

答案 1 :(得分: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时通常是控制器的文件应该被实例化并调用。