Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод картинки в браузер, зная глобальный путь 
V
    Опции темы
The_Aleksey
Дата 27.12.2012, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


<?php
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 10.10.2007
Где: Москва

Репутация: 5
Всего: 6



Всем привет!

Начну издалека...
Есть сайт, где любой зашедший пользователь может загрузить файл, причем только графический. Структура сайта такая, что файлы грузятся в папку, которая лежит на одном уровне с public_html (папкой с файлами сайта). С загрузкой никаких проблем нет, но встает задача отображения загруженного файла в браузере, зная его абсолютный путь, и с тем именем, с которым оно было загружено.
Пока только нашел на php.net следующее решение
Код

<?php
$file = 'monkey.gif';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>

Тут все классно, но файл предлагается скачать, а мне нужно, чтобы выводился в браузере, с тем именем с которым загружен, т.е. код вида
Код

<img src="get_image.php?id=5" />

мне не подойдет.
Может быть у кого уже было такое, поделитесь мыслями
PM MAIL   Вверх
Fortop
Дата 27.12.2012, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



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

Вот это отвечает за то имя, под которым файл будет скачиваться


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
The_Aleksey
Дата 27.12.2012, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


<?php
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 10.10.2007
Где: Москва

Репутация: 5
Всего: 6



Это я понимаю, но мне не нужно, чтобы файл предлагалось скачать, а нужно, чтобы он просто вывелся в браузер, и если я правой кнопкой на него нажал, то там вывелось бы его реальное имя
PM MAIL   Вверх
ksnk
Дата 27.12.2012, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



The_Aleksey, Не пробовал, но, imho, может сработать.
Если сайт на юниксовом хостинге, то можно сохранять с тем именем, как пришло от пользователя. Нужно только убедиться, что имя файла в utf-8 и не содержит несовместимой с файловой системой грязи. Соответственно ссылка формируется как
src=".htmlentities(urlencode($filename), ENT_QUOTES)" или с каким подвывертом - можно посмотреть в примерах




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Fortop
Дата 27.12.2012, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



mod_rewrite или его аналоги
и вперед.

Под каким именно именем сохранен файл не имеет значения.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Aliance
Дата 28.12.2012, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Разве за призыв браузер к скачиванию не отвечает заголовок application/octet-stream и если заменить его на, скажем, image/png то будет выводится картинка.
PM MAIL WWW ICQ Skype   Вверх
The_Aleksey
Дата 28.12.2012, 10:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


<?php
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 10.10.2007
Где: Москва

Репутация: 5
Всего: 6



Спасибо всем за ответы! В общем сейчас получилось пока следующее

.htaccess
Код

RewriteBase /
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ image.php?filename=$1 [L,QSA]


image.php
Код

<?php
    $filename = substr($_GET['filename'], strrpos($_GET['filename'], "/")+1);
    $ext = substr($filename, strrpos($filename, "."));
    $file = '/home/tra-la-la/'.$filename;
    
    if (file_exists($file)) 
    {
        header('Content-Type: image/jpeg');
        header('Content-Disposition: inline; filename='.basename($file));
        header('Content-Length: ' . filesize($file));
        readfile($file);
    }
?>

content-type пока для тестирования задан жестко, в дальнейшем в зависимости от $ext, я его буду менять.

Т.е. если папки images и соответствующего файла в ней не существует (а это заведомо так, т.к. такой папки вообще нет), то передаем имя файла в GET переменной, и там уже дальше его обрабатываем. И если в браузере вбить прямой адрес картинки, то все OK, но если вставить адрес в тег img
Код

<img src="/images/filename.jpg" />

то HTTP/1.1 404 Not Found...
PM MAIL   Вверх
The_Aleksey
Дата 28.12.2012, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


<?php
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 10.10.2007
Где: Москва

Репутация: 5
Всего: 6



тестировал в denwer на винде, загрузил на unix-хостинг, там все отлично работает, видимо какие-то особенности, которые в общем уже не так важны)
Еще раз всем спасибо!

Это сообщение отредактировал(а) The_Aleksey - 28.12.2012, 15:27
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0779 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.