访问&在Webroot上提供XML文件

时间:2017-10-13 20:55:43

标签: php xml

我正在尝试从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之外)

1 个答案:

答案 0 :(得分:0)

首先,您的示例中的一个是尝试访问相对于当前目录的文件夹...

$filename = "./home/myaccountusername/folder1/folder2/appcast.xml";

无论如何,第一个点不应该存在。

如果要访问与目录相关的文件,可以使用__DIR__,它会显示您当前所在脚本的目录。这取决于您尝试访问的文件的相对位置到当前脚本。所以

$filename = __DIR__."/../appcast.xml";

是包含此脚本的目录上方的文件。您必须根据您的特定要求进行调整。