为什么我的openfile.php不能在Safari或IE中正常工作



我有一个非常简单的文件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;
}
?>

你的标题是

Content-Disposition: attachment; filename=Pillow1.pdf

但应该是

Content-Disposition: attachment; filename="Pillow1.pdf"

不确定这是不是问题,因为我不使用windows

这个链接在Firefox中也不起作用,下载的内容是一些HTML页面。

查看您正在发送的标题(http://redbot.org/?uri=http%3A%2F%2Fhqinternetsolutions.com%2FWebsites%2FFabric%2520Traditions%2Fwp-content%2Fplugins%2Fwp-publication-archive%2Fincludes%2Fopenfile.php%3Ffile%3Dhttp|hqinternetsolutions.com%2FWebsites%2FFabric%2520Traditions%2Fwp-content%2Fuploads%2F2011%2F12%2FPillow1.pdf)我注意:

  • Expires报头被打破
  • HTTP中没有Content-Transfer-Encoding
  • Content-Type应为PDF
  • 的类型

(但这些都不能解释为什么发送了错误的内容)

这个PHP不能工作的原因是URL中的%20。不能有空格,否则会导致脚本中的分隔符查找器失败。

相关内容

  • 没有找到相关文章

最新更新