代码之家  ›  专栏  ›  技术社区  ›  S.G.

如果在URL中包含空格(%20),为什么PHP强制下载脚本不起作用?

  •  1
  • S.G.  · 技术社区  · 7 年前

    我使用的PHP强制下载脚本如下:-

    $file_Name = $_GET['name'];
    $file_Url = $_GET['file'];
    header("Cache-Control: public");
    header("Content-Description:     File Transfer");
    header("Content-Disposition: attachment; filename=$file_Name");
    header("Content-Type: application/octet-stream");
    header("Content-Transfer-Encoding: binary");
    readfile($file_Url);
    exit;
    

    如果我的链接的URL类似于:- 德国 ,所以它工作起来没有任何问题!

    如果我在URL中包含一个空格(%20)并尝试访问它,浏览器会显示“下载失败”!

    /图像。php?名称=图像。巴布亚新几内亚(&P);文件=https%3A%2F%2Fmaps。谷歌。com%2Fmaps%2Fapi%2Fstaticmap%3Fcenter%3D

    那么,为什么会这样?它怎么了?

    2 回复  |  直到 7 年前
        1
  •  1
  •   B. Desai    7 年前

    将空间替换为 - 然后尝试读取url

    $file_Name = $_GET['name'];
    $file_Url = $_GET['file'];
    header("Cache-Control: public");
    header("Content-Description:     File Transfer");
    header("Content-Disposition: attachment; filename=$file_Name");
    header("Content-Type: application/octet-stream");
    header("Content-Transfer-Encoding: binary");
    echo readfile(str_replace(" ","-",$file_Url));
    exit;
    
        2
  •  1
  •   Anton Malyshev    7 年前

    readfile(urlencode($file_Url));
    

    +1表示代码的一般不安全性