powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / помогите найти где кешируется выполнение imagecopyresampled
3 сообщений из 3, страница 1 из 1
помогите найти где кешируется выполнение imagecopyresampled
    #39965890
vde69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть код который вполне сносно работает, суть в том, что она берет большую картинку и делает превьюху маленького размера.

все работало хорошо, и тут я решил повернуть на 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
помогите найти где кешируется выполнение imagecopyresampled
    #39965923
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vde69
и перезаписал через файловый менеджер.
vde69
действительно превьюха одного файла сейчас генерится я со старого файла.
Вот на этом месте иногда бывают "чудеса", притом, сразу не очевидны. При непонятках есть смысл убедиться, что в ФС действительно новый файл - проверить его дату, размер в байтах, контрольную сумму...

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

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

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


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