Как сделать так, чтобы изображения отправлялись встраиваемыми, а любой другой файл отправлялся как вложение? - PullRequest
0 голосов
/ 27 августа 2011

У меня простой вопрос.Я искал функцию для загрузки файла.Я нашел один, но у меня небольшая проблема.

Во-первых, это несколько кодов функций:

header ('Content-type: ' . mime_content_type($file));
header ('Content-Disposition: attachment; filename="'.basename($file).'"');
header ('Expires: '.gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y"))).' GMT');
header ('Accept-Ranges: bytes');
header ('Cache-control: no-cache, must-revalidate');
header ('Pragma: private');

Для проверки функции я использую это:

$file = 'path/file.rar';
dowload_file($file);

Работает нормально, файл загружается.Но если я использую функцию для изображения, например:

$file = 'path/image.jpg';
download_file($file);

, тогда изображение также загружается.Но я хочу, чтобы он просматривался, а не загружался.

Если я удаляю эту строку:

header ('Content-Disposition: attachment; filename="'.basename($file).'"');

, изображение отображается немедленно, но файлы rar и zip перестают загружаться.

Так как сделать так, чтобы изображения отображались без загрузки, а с загрузкой любого другого файла?Я тестирую на localhost, может быть в этом проблема?

Ответы [ 4 ]

0 голосов
/ 27 августа 2011

Я тестирую на localhost, может в этом проблема?

Нет. Не localhost, а логика это ваша проблема.

Если вы хотите отобразить изображение, вам нужна функция, которая отображает изображение , а не загружает файл. Это разные задачи.

На самом деле, для отображения изображения требуется только один заголовок, соответствующий типу контента.

0 голосов
/ 27 августа 2011

Вы должны поставить условное заявление на файлы, которые можно просматривать в браузере и которые необходимо загрузить.Для изображений и XML-файлов вы можете указать условие не использовать удаление содержимого в качестве вложения.Для других, включите его.

0 голосов
/ 27 августа 2011

Вы можете попробовать переключение в зависимости от типа файла. Если вы берете расширение файла:

$ext = pathinfo($file, PATHINFO_EXTENSION);

Тогда вы можете добавить свои изображения в белый список следующим образом:

if($ext != 'gif' && $ext != 'jpg' && $ext != 'png' && $ext != 'jpeg')
{
    header ('Content-Disposition: attachment; filename="'.basename($file).'"');
}

Или, альтернативно, белый список ваших загрузок:

if($ext == 'rar')
{
    header ('Content-Disposition: attachment; filename="'.basename($file).'"');
}
0 голосов
/ 27 августа 2011

Если для заголовка Content-Disposition установлено значение attachment, загрузка будет выполняться независимо от типа файла.

Если вы хотите, чтобы ваши изображения обрабатывались по-другому, вы должны будете включить в заголовок Content-Disposition условие, например:

if (!preg_match('@\.(gif|jpe?g|png)$@', basename($file)) {
    // this is *not* an image, do C-D: attachment header
    header ('Content-Disposition: attachment; filename="'.basename($file).'"');
} // otherwise do nothing
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...