猿问

文件名中带#的文件下载失败

背景


我有一个在 CentOS 服务器上运行的 PHP 应用程序。前端使用 ajax 调用来访问 PHP 脚本。该脚本从服务器返回一个文件并将其下载到客户端。


问题


如果文件#名中有 ,则文件下载失败。


例子


File#Name.pdf = 无法正确下载


FileName.pdf = 是否正确下载


这是用于检索文件的 PHP,


if( isset($_GET['path'])) {

    $path = $_GET['path'];

    if(!file_exists($path)) {

        die('file not found');

    } else {

        header('Content-Description: File Transfer');

        header('Content-Type: application/octet-stream');

        header('Content-Disposition: attachment; filename='.$path);

        header('Content-Length: '.filesize($path));

        readfile($path);

        ob_clean();

        flush();

        exit;

    }

}

问题


为什么在名称中时文件无法下载#?


斯蒂芬大帝
浏览 215回答 1
1回答

手掌心

啊,文件名是来自 GET 请求吗?如果是这样,# 可能会被重写为 %23。尝试$path = urldecode($_GET['path']);
随时随地看视频慕课网APP
我要回答