2015-01-28 5 views
2
$image_name = rawurldecode($name); 
    $image_path = 'http://' . rawurldecode($path) . '/resources/images/banner/' . $image_name; 
    $mime = explode('.', $image_name); 

    header("Pragma: public"); 
    header("Expires: 0"); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header("Content-Type: application/force-download"); 
    header("Content-Type: application/octet-stream"); 
    header("Content-Type: application/download"); 
    header('Content-Type: image/' . $mime[1]); 
    header("Content-Disposition: attachment; filename=$image_name"); 
    header('Content-Transfer-Encoding: binary'); 
    ob_clean(); 
    flush(); 
    readfile($image_path); 

У меня этот код выше, он работает нормально в моем локальном, но когда я загружаю его на свой сервер, я все еще могу его загрузить, но изображение сломано. вы можете видеть верхнюю часть изображения, а нижняя часть - серая.Загрузка изображения в PHP

+0

У вас есть ошибка? Можно ли загружать внешние URL-адреса в вашу установку PHP? Вы уверены, что адрес сервера существует? Вы просмотрели данные файла изображений, чтобы узнать, есть ли там что-нибудь полезное? Похоже, что это не полная загрузка изображения - может быть, размер, может быть, ваш буфер слишком быстро сбрасывается. Возможно, ваша длина контента неверна. – h2ooooooo

+2

Почему вы настраиваете контент-тип три раза? Почему вы не устанавливаете его для типа содержимого изображения в любое из этих времен? – Quentin

+0

@Quentin Последним вызовом 'content-type' является' header ('Content-Type: image /'. $ Mime [1]); '(что, если быть справедливым, все еще неверно.' Image/jpg' неверен - OP не может просто взять расширение и предположить, что он является допустимым типом mime. Это даже хорошо и ожидает, что URL-адрес всегда будет включать расширение). 'image.txt.png' также завершится с ошибкой и выведет mimetype' image/txt'. – h2ooooooo

ответ

0

Можете ли вы попробовать это.

$image_name = rawurldecode($name); 
$image_path = 'http://' . rawurldecode($path) . '/resources/images/banner/' . $image_name; 
$mime = explode('.', $image_name); 
header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename='.basename($image_path)); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate'); 
header('Pragma: public'); 
header('Content-Length: ' . filesize($image_path)); 
readfile($image_name); 
exit; 
Смежные вопросы