我有一个名为openfile.php的非常简单的文件,用于设置内容处理并强制浏览器下载指定的文件。
它在FF中工作正常,但在Safari中,它会下载一个奇怪的.xhtml文件,经过仔细检查,似乎是可能出现的默认错误页面。
在IE中,您只是被引导到此错误页面。
任何人都可以推断出这里发生了什么吗?
这是一个链接:http://hqinternetsolutions.com/Websites/Fabric%20Traditions/?page_id=215
这是打开文件的代码
<?php
if ( ! isset($_GET['file']) )
die();
if ( strpos( $_GET['file'], (isset($_SERVER['HTTPS']) ? 'https|' : 'http|') . $_SERVER['SERVER_NAME'] ) === false )
die();
require_once('../lib/class.mimetype.php');
$mime = new mimetype();
$fPath = str_replace('http|', 'http://', $_GET['file']);
$fPath = str_replace('https|', 'https://', $fPath);
$fType = $mime->getType( $fPath );
$fName = basename($fPath);
$origname = preg_replace('/_#_#\d*/','',$fName);
$fContent = fetch_content( $fPath );
output_content( $fContent, $origname );
function fetch_content( $url ) {
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_HEADER, 0 );
ob_start();
curl_exec( $ch );
curl_close( $ch );
$fContent = ob_get_contents();
ob_end_clean();
return $fContent;
}
function output_content( $content, $name ) {
header( "Expires: Wed, 9 Nov 1983 05:00:00 GMT" );
header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" );
header( "Content-Disposition: attachment; filename=" . $name );
header( "Content-type: application/octet-stream" );
header( "Content-Transfer-Encoding: binary" );
echo $content;
}
?>
答案 0 :(得分:1)
您的标题是
Content-Disposition: attachment; filename=Pillow1.pdf
但它应该是
Content-Disposition: attachment; filename="Pillow1.pdf"
不确定这是否是问题,因为我不使用Windows。
答案 1 :(得分:0)
即使在Firefox中,该链接也不适合我,获取的内容是一些HTML页面。
(但这些都没有解释为什么发送了错误的内容)
答案 2 :(得分:0)
此PHP不起作用的原因是因为URL中的%20
。您不能有空格,否则会导致脚本中的分隔符查找器失败。