Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / помогите найти где кешируется выполнение imagecopyresampled / 3 сообщений из 3, страница 1 из 1
03.06.2020, 20:56
    #39965890
vde69
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите найти где кешируется выполнение imagecopyresampled
есть код который вполне сносно работает, суть в том, что она берет большую картинку и делает превьюху маленького размера.

все работало хорошо, и тут я решил повернуть на 90 градусов один из оригиналов. Повернул и перезаписал через файловый менеджер.

после удалил все превьюхи, но при формировании страницы превьюха создалась старая (не повернутая на 90 градусов).

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

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

вот код
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
function sp_getprefile($global_dir, $local_dir, $filename, $height, $force = false) {
	/* получаем путь к уменьшенной копии файла и ее ширину из папки разбора
	при необходимости кешируем уменьшенную копию на диск
	возвращает массив с элементами filename, width
	*/

	$fulldir = $global_dir.$local_dir.$filename;
	$fulldir_cache = $global_dir.$local_dir.'.thumb/'.$height.'/'.$filename;	
		
 	//свойства исходного изображения
	$imagesize = getimagesize($fulldir); 
	$im_w = $imagesize[0]; 
	$im_h = $imagesize[1]; 

	$imagetype = exif_imagetype($fulldir);
	$filemtime = filemtime($fulldir);

	if ( file_exists($fulldir_cache) ) {
		$filectime_cache = filemtime($fulldir_cache);
		$imagesize_cache = getimagesize($fulldir_cache); 
		$imagetype_cache = exif_imagetype($fulldir_cache);
	}
	
	if ( ($force != true) and ($filemtime == $filectime_cache) and ($imagetype == $imagetype_cache) and  ($height == $imagesize_cache[1])) {
		// у нас есть готовый вариант в кеше
		$res = array(
			'width'=>$imagesize_cache[0],
			'filename'=>$fulldir_cache
		);
	} else {
		// надо создать файл в кеше, но сначала создадим директорию

		$dir1 = dirname ($fulldir_cache);
		if (!file_exists($dir1)) { 
			mkdir($dir1, 0777, true);
		}

		// определяем высоту и ширину которую реально можно вывести
		$height = max((int)$height,16);
		$height = min($height, $im_h);
		$width = (int)($height*$im_w/$im_h);
		if ($width > $im_w) {$width = $im_w;}

		$img_i = sp_imageCreateFromAny($fulldir, $imagetype);

		$img_o = imagecreatetruecolor($width, $height); // Создаём дескриптор для выходного изображения
		imagecopyresampled($img_o, $img_i, 0, 0, 0, 0, $width, $height, $im_w, $im_h); // Переносим изображение из исходного в выходное, масштабируя его
		
		if ( sp_imageAny($img_o, $fulldir_cache, $imagetype) ) {
			touch($fulldir_cache, $filemtime);
			$res = array(
				'width'=>$width,
				'filename'=>$fulldir_cache);
		}
		unset ($img_i, $img_o);
	}
	return $res;	
}




--------------------------------------------------------
Хороший программист должен уметь не только пользоваться инструментами, но и уметь обходиться БЕЗ НИХ!
...
Рейтинг: 0 / 0
03.06.2020, 21:42
    #39965923
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите найти где кешируется выполнение imagecopyresampled
vde69
и перезаписал через файловый менеджер.
vde69
действительно превьюха одного файла сейчас генерится я со старого файла.
Вот на этом месте иногда бывают "чудеса", притом, сразу не очевидны. При непонятках есть смысл убедиться, что в ФС действительно новый файл - проверить его дату, размер в байтах, контрольную сумму...

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

PS: А что со скриптом не так? Гипотетически (лень разбираться в нем), можно на него грешить, что превьюшку он делает с учетом ориентации оригинала, если она указана в метаданных. Были замечены редкие случаи, когда "поворачивалка" изображений не вносила соответствующую правку в метаданные и при отображении такой картинки в различном ПО наблюдалась чехарда.
...
Рейтинг: 0 / 0
03.06.2020, 21:50
    #39965927
vde69
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите найти где кешируется выполнение imagecopyresampled
vkle
превьюшку он делает с учетом ориентации оригинала, если она указана в метаданных
- это интересно, посмотрим

vkle
При непонятках есть смысл убедиться, что в ФС действительно новый файл - проверить его дату, размер в байтах, контрольную сумму.
- это я уже проверил, и удалял
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / помогите найти где кешируется выполнение imagecopyresampled / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]