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编码,否则也会出现找不到文件的错误。
- <?php
- $file = '吴先成.jpg';
- header('Content-Type: image/jpeg');
- header('X-SendFile: D:\Downloads\\' . urlencode($file));
- ?>
复制代码 以上代码文件编码为UTF-8,如果文件编码为GBK/GB2312,可以将代码修改为
- <?php
- $file = '吴先成.jpg';
- $file = iconv('gbk', 'utf-8', $file);
- header('Content-Type: image/jpeg');
- header('X-SendFile: D:\Downloads\\' . urlencode($file));
- ?>
复制代码 |
|