找回密码
 注册

Apache X-SendFile 404 找不到文件 UTF-8 GBK 编码兼容

php 发表于 2018/3/30 12:47 | 显示全部楼层 |阅读模式
Apache配合X-SendFile可以更高效地输出文件,只需要一个X-SendFile头信息就可以将文件输出到客户端。
使用X-SendFile需要特别注意脚本文件的编码方式,X-SendFile只支持UTF-8编码的文件路径,如果文件路径包含非ASCII字符,GBK/GB2312等编码会导致找不到目标文件,从而出现HTTP 404 Not Found错误。另外还需要注意一点,如果文件路径中包含非ASCII字符,可以对文件路径进行URL编码(urlencode),但不能对盘符后面的冒号(如D:\中的冒号)和目录分隔符(/和\)进行编码,需要原样保留,当XSendFileUnescape配置为默认值on时,X-SendFile在处理文件时会自动对X-SendFile头中的文件路径进行URL解码(urldecode),XSendFileUnescape配置为off时不能对文件路径进行URL编码,否则也会出现找不到文件的错误。
  1. <?php
  2.         $file = '吴先成.jpg';
  3.         header('Content-Type: image/jpeg');
  4.         header('X-SendFile: D:\Downloads\\' . urlencode($file));
  5. ?>
复制代码
以上代码文件编码为UTF-8,如果文件编码为GBK/GB2312,可以将代码修改为
  1. <?php
  2.         $file = '吴先成.jpg';
  3.         $file = iconv('gbk', 'utf-8', $file);
  4.         header('Content-Type: image/jpeg');
  5.         header('X-SendFile: D:\Downloads\\' . urlencode($file));
  6. ?>
复制代码

手机版|轻松E站

轻松E站

快速回复 返回顶部 返回列表