Php 在web根文件夹之外提供文档。

Php 在web根文件夹之外提供文档。,php,pdf,Php,Pdf,我有一个名为“viewDoc”的函数,它应该转到web根目录之外的文件夹,并为我获取一个文件。图像(JPG等)可以正常工作,但PDF只输出一个空白的灰色页面,如下所示- 有人能看出我做错了什么吗?我已经为此挠头一天了 public function viewDoc($doc) { $path_parts = pathinfo($_SERVER['REQUEST_URI']); $file = $doc; $fileDir = '/var/uplo

我有一个名为“viewDoc”的函数,它应该转到web根目录之外的文件夹,并为我获取一个文件。图像(JPG等)可以正常工作,但PDF只输出一个空白的灰色页面,如下所示-

有人能看出我做错了什么吗?我已经为此挠头一天了

public function viewDoc($doc) {

        $path_parts = pathinfo($_SERVER['REQUEST_URI']);
        $file = $doc;
        $fileDir = '/var/uploads/';

        if (file_exists($fileDir . $file))
        {

            $contents = file_get_contents($fileDir . $file);
            //print_r($contents);
            header('Content-Type: ' . mime_content_type($fileDir . $file));
            header('Content-Length: ' . filesize($fileDir . $file));
            readfile($contents);
        }


}
与文件名参数(而不是文本)一起使用

两个可行的示例(文件获取内容):

或(读取文件):

我还为您添加了
$filePath
变量,因为没有理由多次压缩字符串

编辑

作为额外的安全性,对于Yazmat的评论,您可以使用
$file=str_replace(数组(“..”,“/”),“$doc”)
因为这将删除对其他目录的所有引用(但是,斜杠也会删除对子目录的访问,因此您可能希望跳过它,具体取决于您的代码和文件结构)。

与文件名参数一起使用,而不是文本

两个可行的示例(文件获取内容):

或(读取文件):

我还为您添加了
$filePath
变量,因为没有理由多次压缩字符串

编辑


作为额外的安全性,对于Yazmat的评论,您可以使用
$file=str_replace(数组(“..”,“/”),“$doc”)由于这将删除对其他目录的所有引用(但是,斜杠也会删除对子目录的访问,因此您可能希望跳过它,具体取决于您的代码和文件结构)。

您在这里遇到了一个很大的安全问题,任何人都可以使用您编写的功能访问服务器上的任何内容。我真的建议您不要使用它,只需将您的文件(应该可以访问)放在公共web目录上。

您这里有一个很大的安全问题,任何人都可以使用您编写的功能访问服务器上的任何内容。我真的建议您不要使用它,而是将您的文件(应该可以访问)放在公共web目录上。

hi h2oooooo,您如何添加$file=str_replace(数组(“…”,“/”),“,”,“,$doc);去功能区?我尝试用它来替换$file=$doc;但它只是为了打破文件。有什么想法吗?@chrishaddenland
$doc
的内容是什么?如果其中有斜杠,则需要使用
$file=str_replace('..','$doc)相反,否则将用零替换正斜杠。这意味着人们仍然可以进入
/var/uploads
的子文件夹,但不能进入任何其他目录(因为
。/
表示“返回一个目录”)。您好,您好,您如何添加$file=str_replace(数组(“…”,“/”),“$doc”);去功能区?我尝试用它来替换$file=$doc;但它只是为了打破文件。有什么想法吗?@chrishaddenland
$doc
的内容是什么?如果其中有斜杠,则需要使用
$file=str_replace('..','$doc)相反,否则将用零替换正斜杠。这意味着人们仍然可以进入
/var/uploads
的子文件夹,但不能进入任何其他目录(因为
。/
表示“返回一个目录”)。
public function viewDoc($doc) {

        $path_parts = pathinfo($_SERVER['REQUEST_URI']);
        $file = $doc;
        $fileDir = '/var/uploads/';
        $filePath = $fileDir . $file;

        if (file_exists($filePath))
        {
            $contents = file_get_contents($filePath);
            header('Content-Type: ' . mime_content_type($filePath));
            header('Content-Length: ' . filesize($filePath));
            echo $contents;
        }
}
public function viewDoc($doc) {
        $path_parts = pathinfo($_SERVER['REQUEST_URI']);
        $file = $doc;
        $fileDir = '/var/uploads/';
        $filePath = $fileDir . $file;

        if (file_exists($filePath))
        {
            header('Content-Type: ' . mime_content_type($filePath));
            header('Content-Length: ' . filesize($filePath));
            readfile($filePath);
        }
}