Перейти к содержимому


open_file.php


Сообщений в теме: 19

#1 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 19 Март 2012 - 09:32

Cсделал вывод привьюшек при наведении на ссылку вложенных файлов, но если файл большого размера, особенно при мобильном интернете - ужасно медленно.
Есть ли возможность задавать размеры возвращаемого изображения средствами open_file.php. Если нет, не могли бы вы доработать, чтобы масштабирование происходило на серверной части. Это существенно бы снизило трафик.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 19 Март 2012 - 09:50

Для вывода "превьюшек" необходимо использовать не open_file.php, а прямую ссылку на эскиз картинки из кэша. Имя файла превью изображения выглядит как {table_id}_{field_id}_{line_id}_{имя_оригинального_файла}.png

#3 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 19 Март 2012 - 10:47

Речь идет о выводе превьюшки при наведении на ссылку вложенного файла:
в режиме таблицы Прикрепленное изображение: 16.jpg или просмотра записи Прикрепленное изображение: 17.jpg.
Тут кешом не получится.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 19 Март 2012 - 11:00

Это я понял из первого сообщения, но в чем тут проблема? Нет скэшированной картинки?

#5 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 19 Март 2012 - 11:35

откуда она будет, если файл не открывался
поле типа файл, а не изображение

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 19 Март 2012 - 14:07

Тогда создавайте эскиз через вычисление:
$fpath = get_file_path($field_id, $line_id, $file_name);
$content = file_get_contents($fpath);
list($w1, $h1) = getimagesize($fpath);
$w2 = 100; $h2 = 100; // здесь сами задаете нужные вам размеры превью
$preview_name = $table_id."_".$field_id."_".$line_id."_".utf2eng($file_name).".png";
if (!file_exists($config["site_path"]."/cache/".preview_name)) image_preview($content, $w1, $h1, $w2, $h2, $preview_name);
$table_id, $field_id, $line_id и $file_name заполняете сами.

Выводить превью из кэша в любом случае предпочтительнее, чем через open_file.php с параметрами, т.к. в первом случае вы нагружаете сервер и клиент один раз, затем браузер берет картинку из своего кэша. Во втором случае нагрузка постоянная, и не факт что вы что-то выиграете.

#7 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 19 Март 2012 - 14:50

Тем не менее браузер кэширует картинку и во втором случае.
Превьюшки формируются налету посредством jquery и qtip (этот плагин и кэширует по умолчанию):
$("[href*='/cb/open_file.php']").each(function(){
  var elem=$(this);
  var str=elem.attr("href");
  var reg = /.*\.(\S+)$/;
  var ext=str.replace(reg,'$1');
  var imgArr=new Array('jpg','jpeg','gif','png');
  if (inArray(ext, imgArr)) {
   elem.qtip({
	content: '<img style="max-width:150px;max-height:200px;" src="'+ str +'">'
   });
  }
});
Это не требует создания дополнительных вычисляемых полей, достаточно иметь в таблице поле типа Файл.
Единственный минус изображение грузится целиком без масштабирования. Наличие настраиваемых опций передаваемых вместе с open_file.php могло бы решить эту проблему.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#8 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 19 Март 2012 - 15:32

Просмотр сообщенияandibrag (19 Март 2012 - 14:50) писал:

Превьюшки формируются налету посредством jquery и qtip
Это у вас не создание превью, а принудительное кэширование php изображения в браузере, как я понял. Сами браузеры их не кэшируют обыкновенно, для чего мы и создали кэш в программе. Вы уверены что подобный трюк сработает с параметрами?

Просмотр сообщенияandibrag (19 Март 2012 - 14:50) писал:

Это не требует создания дополнительных вычисляемых полей, достаточно иметь в таблице поле типа Файл.
В моем случае тоже не нужно вычисляемых полей, можно поставить вычисление на сохранение записи. Добавить параметры в open_file теоретически можно, но на это тоже нужно время. Выигрыша в производительности все равно не будет по сравнению с вычислением.

#9 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 19 Март 2012 - 15:53

Просмотр сообщенияРазработчик (19 Март 2012 - 15:32) писал:

Вы уверены что подобный трюк сработает с параметрами?
Работает, qtip кэширует все содержимое контента подсказки, будь то текст или изображение

Просмотр сообщенияРазработчик (19 Март 2012 - 15:32) писал:

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

Просмотр сообщенияРазработчик (19 Март 2012 - 15:32) писал:

Выигрыша в производительности все равно не будет по сравнению с вычислением.
Отчего же? Если доработать open_file - картинка передается в уменьшенном виде и кешируется - трафик снижается.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#10 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 19 Март 2012 - 16:13

Дак вычисление тоже уменьшает картинку, для чего собственно то я его вам дал? Передается только превью из кэша.

В общем суть в том, что для вашей просьбы необходима доработка, ее нужно ставить в план, и т.д., т.е. дело это не быстрое. Предложенное вычисление решает проблему уже сегодня.

#11 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 19 Март 2012 - 17:49

Просмотр сообщенияРазработчик (19 Март 2012 - 16:13) писал:

В общем суть в том, что для вашей просьбы необходима доработка, ее нужно ставить в план, и т.д., т.е. дело это не быстрое. Предложенное вычисление решает проблему уже сегодня.
Это понятное дело. В любом случае, если такая доработка появится в перспективе - будет полезная штука. Тем более она не сложная.
С изображениями вообще много вопросов в КБ. Понимаю, что это не основное, но как-то неуютно с ними работать. Хотелось бы и настройку параметров отображения и динамическое масштабирование, и всплывающие окна, быть может галерея и т.д. У нас, в связи со спецификой работы, много графической информации.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#12 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 06 Сентябрь 2012 - 23:23

Вернулся к теме изображений из кеша. По аналогии с вашей функцией для php была сделана функция под js:
function str_replace(search, replace, subject)
{
  return subject.split(search).join(replace);
}
function utf2eng(str)
{
  utf = ["а", "б", "в", "г", "д", "е", "ё", "ж",  "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч",  "ш",  "щ",   "ъ", "ь", "ы", "э", "ю",  "я",  "А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж",  "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч",  "Ш",  "Щ",   "Ь", "Ъ", "Ы", "Э", "Ю",  "Я"];
  eng = ["a", "b", "v", "g", "d", "e", "e", "zh", "z", "i", "y", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "ch", "sh", "sch", "",  "",  "y", "e", "yu", "ya", "A", "B", "V", "G", "D", "E", "E", "Zh", "Z", "I", "Y", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "H", "C", "Ch", "Sh", "Sch", "",  "",  "Y", "E", "Yu", "Ya"];
  sim = ["`", "~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "+", "=", "[", "]", "{", "}", ":", ";", "\"", "'", "|", "\\", "/", "?", ",", ".", "<", ">", "№", " "];
  str = str_replace(utf, eng, str);
  str = str_replace(sim, "_", $str);
  str = str.replace(new RegExp("__",'g'), "_");
  return str;
}
Странно то, что русские заглавные буквы она преобразует в прописные английские. Как следствие эскиз изображения не выводится. Что не так?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#13 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 07 Сентябрь 2012 - 10:50

Причина оказалась в том, что у вас также присутствует функция utf2eng в файле explode.js, где есть строчка
str=str.replace(new RegExp(r_ch,'gi'),e_ch);
Здесь замены сделана регистронезависимой. Причем по непонятным причинам. Поскольку массивы для сопоставления содержат и строчные и прописные буквы.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#14 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 07 Сентябрь 2012 - 11:24

Вас не затруднит заменить gi на просто g, чтобы не плодить дубликаты функций? Или регистронезависимость сделана намерено по каким-то причинам?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#15 Analitic

    Активный участник

  • Пользователи
  • PipPipPip
  • 700 сообщений
  • Пол:Мужчина

Отправлено 07 Сентябрь 2012 - 13:09

Не намерено. Исправлено в новой ревизии.

#16 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 12 Сентябрь 2012 - 08:47

Использование image_preview для создания эскизов больших изображений в кеше, съедает много ресурсов процессора на стороне сервера. Даже при размере файла менее 1 Мб, можно превысить допустимый лимит нагрузки, выделяемый хостером. В результате, при наличии таких изображений в записи, страница просто не загружается. Возможно ли подключить модуль выгрузки изображений, для создания превьюшек на стороне клиента с последующей выгрузкой их в папку кеша на сервере?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#17 Analitic

    Активный участник

  • Пользователи
  • PipPipPip
  • 700 сообщений
  • Пол:Мужчина

Отправлено 13 Сентябрь 2012 - 07:03

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

#18 Analitic

    Активный участник

  • Пользователи
  • PipPipPip
  • 700 сообщений
  • Пол:Мужчина

Отправлено 13 Сентябрь 2012 - 07:06

Превью в программе генериуется один раз и складывается в папочку cache. Т.е. влияет только на первый просмотр.

#19 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 04 Июль 2015 - 02:11

Не силен в настройках сервера.
Как браузер заставить кэшировать динамические изображения, получаемые через "open_file.php?....." ?
Пробовал через директивы в htaccess
<FilesMatch "^(\/cb\/open_file\.php)">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
Варианты с регулярным выражением были разные. Не работает.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#20 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 04 Июль 2015 - 16:41

Я тоже не силен...





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных