我正在尝试从php文件加载appcast xml文件,xml包含用于显示changelog.html&的文件路径。给出文件的下载路径。通常情况下,我不希望浏览器能够访问这些东西,因此,xml文件,更改日志&该文件全部位于Web根目录上方的文件夹中。 php文件位于webroot内。
这是我的PHP代码:
$filename = "./home/myaccountusername/folder1/folder2/appcast.xml";
if (!file_exists ($filename)) throw new Exception("File not found");
// Set the content type to xml
header('Content-Type: text/xml');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
header('Content-Length: ' . filesize($filename));
// Tell the user-agent (Stacks) not to cache the file
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
// Flush the output buffer
ob_clean();
flush();
// Read the data and send the file
//throw new Exception("FileName: " . $filename);
readfile($filename);
exit;
它抛出异常:找不到文件
如何编写路径以查看webroot&当传递到我的最终显示界面时,允许打开changelog.html&要下载的文件?
注意:我已尝试将路径开始为/ home ...和home ...&甚至../../../folder1/ ...
这可以在php中设置吗?无法理解。
UPDATE1: 这是服务器树:
- public_html
- appcastsecure
- productfolder
- appcast.xml
- changelog.html
- productzipfile.zip
- company_folder
- secureappcast
- appcastfile.php (start here for pathing)
我在appcastfile.php中使用 DIR ,它提供了appcast.xml的路径:
$filename = /home/userdir/public_html/company_folder/secureappcast/../../appcastsecure/productfolder/appcast.xml
我的问题是appcast.xml被推送到他们服务器上的客户端,所以我无法弄清楚如何在appcast.xml中设置路径,因此它将指向changelog&我的服务器上的productzip文件(都在public_html之外)
答案 0 :(得分:0)
首先,您的示例中的一个是尝试访问相对于当前目录的文件夹...
$filename = "./home/myaccountusername/folder1/folder2/appcast.xml";
无论如何,第一个点不应该存在。
如果要访问与目录相关的文件,可以使用__DIR__
,它会显示您当前所在脚本的目录。这取决于您尝试访问的文件的相对位置到当前脚本。所以
$filename = __DIR__."/../appcast.xml";
是包含此脚本的目录上方的文件。您必须根据您的特定要求进行调整。