Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 名称中带有#的文件名无法下载_Javascript_Php_Centos7 - Fatal编程技术网

Javascript 名称中带有#的文件名无法下载

Javascript 名称中带有#的文件名无法下载,javascript,php,centos7,Javascript,Php,Centos7,背景 我有一个在CentOS服务器上运行的PHP应用程序。前端使用ajax调用生成PHP脚本。脚本从服务器返回一个文件并将其下载到客户端 问题 如果文件名中有#,则文件下载失败 示例 文件#Name.pdf=未正确下载 FileName.pdf=下载是否正确 这是用于检索文件的PHP if( isset($_GET['path'])) { $path = $_GET['path']; if(!file_exists($path)) { die('file not

背景

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

问题

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

示例

文件#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;
    }
}
问题


为什么文件名中包含
#
时无法下载?

啊,文件名是否来自GET请求?如果是这样的话#可能会被重写为%23。试一试

$path = urldecode($_GET['path']);

如果在URL中使用
文件%23Name.pdf
,它是否有效?在失败的情况下会发生什么?您的ajax调用是否得到响应?您可以使用浏览器探查器查看响应对象的标题或主体是什么吗?没有问题。一般来说,在php中,您可能会对客户端提供的任何文本值产生怀疑。我所说的可疑是指从安全/恶意用户的角度来看,以及从“这真的是我所认为的”的角度来看。