使用codeigniter 3.X访问public_html外部的文件

时间:2016-07-29 05:28:26

标签: php pdf filepath codeigniter-3

出于安全考虑,我将PDF文件放在名为let jsonData = try JSONSerialization.data(withJSONObject: dictionary, options: .prettyPrinted) 的文件夹中,位于Pdf之外。

我试图从位于应用程序文件夹内的控制器访问此文件。 我试过使用几条路径..

一个是:public_html。 另一个是:../../../../Pdf/{$name_hash}.pdf

我试图包含该文件并将其作为js.openwindow以及/home/xx/Pdf/{$name_hash}.pdf发送,但都无济于事!

文件是现有的,并且哈希函数也正确生成了名称,所以我确定它是设置问题的路径。

是否有一些CI规则我没有遵循设置路径?或者还有其他任何解决方案..请帮助!

1 个答案:

答案 0 :(得分:1)

事情是,您无法访问浏览器网址中public_html(或虚拟主机设置域的目录)后面的文件。您必须获取文件的内容并通过缓冲区将其发送到输出。您可以使用readfile($file) PHP内置函数:

public function pdf()
{
    // you would use it in your own method where $name_hash has generated value
    $file = "/home/xx/Pdf/{$name_hash}.pdf";

    if (file_exists($file)) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/pdf');
        // change inline to attachment if you want to download it instead
        header('Content-Disposition: inline; filename="'.basename($file).'"');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        readfile($file);
    }
    else "Can not read the file";
}

PHP docsexample