我有行
xmlhttp.open("GET","file.php?id=4",true);
这不起作用,因为file.php不在同一个文件夹中,而是在另一个对公众不可见的私人文件夹中。
有没有办法使用打开功能打开其他文件夹中的文件?
这根本不可能。
如果要向它发送HTTP请求,它必须通过HTTP对公众可见。
您只能从公共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
。有关详细信息,请参阅本手册。上述方法实际上与目前使用的大多数框架相同。您有一个单独的脚本作为应用程序的网关(有点像Front Controller模式)。该脚本接受对应用程序的任何和所有请求(想想mod_rewrite),并且是唯一可公开访问的PHP文件。它将引导您的应用程序,然后根据URL(或您认为合适的任何内容)确定应该实例化和调用私有空间中的哪个文件(使用MVC时通常是控制器)。