PHP ReadFile 空格问题

PHP ReadFile Issues with Spaces

我现在遇到了一个 PHP 的问题。我有一个名为 download.php 的文件,可以安全访问存储在服务器上的私人文件夹中的文件下载。即比 httpd 高 1 级。

代码如下所示。

        $Document = new Documents($DID);

        $file = $Document->getfilewithdir();

        header("Content-Description: File Transfer");
        header("Content-length: " . $Document->getfilesize());
        header("Content-type: " . $Document->getfiletype());
        header("Pragma: public");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Content-disposition: attachment; filename=\"" . basename($Document->getfilename()) . "\"");

        readfile($file);
        exit;

哪里

$Document->getfilewithdir() returns 类似于 /Applications/MAMP/htdocs/Portal_QCNW/private/portal_files/filename.docx

$Document->getfilename() returns 类似于 filename.docx.

包含额外代码:

    function setfilename($Val)
    {
        $this->c_Filename = $Val;
    }

    function getfilename()
    {
        return $this->c_Filename;
    }

    function getfilewithdir()
    {
        $path_parts = pathinfo($this->geturl());
        $file_name  = $path_parts['basename'];

        return FILELOC . $file_name;
    }

如果文件名中没有空格,这一切都很好,但如果文件名中有空格,即文件 name.docx 或文件名 (1).docx,则读取文件语句 returns "failed to open stream"。我该怎么做才能解决这个问题并处理文件名中的空格?

我使用 https://blueimp.github.io/jQuery-File-Upload/ 上传文件,在上传阶段我可能会删除空格。

任何想法和建议都会很棒。

亲切的问候

詹姆斯

感谢您的帮助。我检查了代码并对其进行了简化。因为我传递的是 URL 文件名,所以它被格式化为 url 而不是字符串。

全部排序完毕。

詹姆斯