Почему мой openfile.php не работает должным образом в Safari или IE? - PullRequest
0 голосов
/ 29 декабря 2011

У меня есть очень простой файл 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;
}
?>

Ответы [ 3 ]

1 голос
/ 29 декабря 2011

Ваш заголовок -

Content-Disposition: attachment; filename=Pillow1.pdf

но должно быть

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

Не уверен, что это проблема, так как я не использую windows.

0 голосов
/ 30 декабря 2011

Причина, по которой этот PHP не будет работать, заключается в %20 в URL. Вы не можете иметь пробелы, или это приводит к сбою искателя разделителя в скрипте.

0 голосов
/ 29 декабря 2011

Ссылка не работает для меня даже в 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-Type должен быть типом для PDF

(но ни один из них не объясняет, почему отправляется неправильный контент)

...