我有一行
xmlhttp.open("GET","file.php?id=4",true);
这不起作用,因为file.php不在同一个文件夹中,而是在公众不可见的不同私人文件夹中。
有没有办法使用open函数打开不同文件夹中的文件?
答案 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时通常是控制器的文件应该被实例化并调用。