проблема с 'imagecreatefromjpeg'

vaalsh

Новичок
Добрый день,

У меня на сайте клиент отгружает через фтп 300-400 картинок,
затем включает программу, которая меняет их размер 2 раза - постоянно имею порядка 1-3 ошибок на каждые 100 файлов.
Приходится искать файлы, которые не преобразовались правильно.
ошибки такие:

"Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: '../vhs/Big/409.jpg' is not a valid JPEG file in /home/stepan/public_html/VHSENG/convert_VHSENG.php on line 40"

или

"Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in ..."

Здесь функция меняющая размер:

-----------------------------------------------------------------------------------
PHP:
function resizeImage($name,$mod,$ctg,$id,$w,$l){

	list($width_orig, $height_orig) = getimagesize($name);

	if($mod=='Mid'){
		if($width_orig>$height_orig){
			$width=$w;
			$ratio=$width_orig/$w;
			$height=$height_orig/$ratio;
		}else{
			$height=$l;
			$ratio=$height_orig/$l;
			$width=$width_orig/$ratio;
		}
	}else{
			$width=140;
			$ratio=$width_orig/140;
			$height=$height_orig/$ratio;
	}	
	// Resample
	$image_p = imagecreatetruecolor($width, $height);
	$image = imagecreatefromjpeg($name);
	imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
	
	// Output
	imagejpeg($image_p,'../'.$ctg.'/'.$mod.'/'.$id.'.jpg');
	
    imagedestroy($image_p);
	imagedestroy($image);
 }
-------------------------------------------------------------

Благодарен за любую помощь!

Вал.
 

vaalsh

Новичок
повторный запуск решает проблемы с этими файлами?
Уловить зависимость невозможно, похоже, что появление ошибки не зависит от самих файлов, но на 100% не уверен - должен провести эксперимент и несколько раз запускать ту же последовательность файлов. Не делал, поскольку сайт работает и это не просто.

Вал.
 

vaalsh

Новичок
Надо точно знать, может файлы битые. Проверяйте
Снова появились ошибки на другом компе, проверял, от файлов не зависит.
Команда rename давала ошибку "нет такого файла" примерно 1 на 100 файлов.
Поставил паузу перед rename - то же...
Поменял на unlink - то же самое...

???
 

WDStalker

Новичок
Чудес не бывает. Напишите лог, куда скидывайте название файла. Потом на нем гоняйте свой скрипт ищите проблему.
 

vaalsh

Новичок
Чудес не бывает. Напишите лог, куда скидывайте название файла. Потом на нем гоняйте свой скрипт ищите проблему.
Я новичок в php:
не понял вас - те файлы которые давали ошибку следующий раз проходят без проблем, как мне может помочь лог?
 

igortik

Новичок
Тебе стоит понять, это проблема в конкретных файлах, или возникают ошибки при работе функции, что практически невероятно.
Для этого и предлагается узнать имена файлов, при обработке которых возникли ошибки, взять эти файлы и запустить скрипт ресайза именно с ними и, если ошибка повторится - файлы битые, что вполне вероятно в данном случае.
 

vaalsh

Новичок
Тебе стоит понять, это проблема в конкретных файлах, или возникают ошибки при работе функции, что практически невероятно.
Для этого и предлагается узнать имена файлов, при обработке которых возникли ошибки, взять эти файлы и запустить скрипт ресайза именно с ними и, если ошибка повторится - файлы битые, что вполне вероятно в данном случае.
Так я же 2 раза написал что именно это и сделал - ошибка от файлов не зависит.
 

igortik

Новичок
возможно, отдаются неверные параметры функции, нужно все анализировать, это частный случай
 

vaalsh

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

PHP:
if (($result)||(mysql_errno == 0)){
	//================== PUT FILES TO FOLDER 'BIG' ==================================
			//echo($_FILES['uploadFile'. $x]['name']);
			//exit();
			$copy = copy($file_name,'../'.$cat.'/Big/'.$crnt_id.'.jpg');
			
		//=============check if successfully copied========================================
			if($copy){
				echo ($count." - $file_name - uploaded sucessfully!  <br>");
				
			 }else{
				echo "$file_name - could not be uploaded!<br>";
				exit("     ".$count);
			}
			$filename_n='../'.$cat.'/Big/'.$crnt_id.'.jpg';
					
			resizeImage($filename_n,'Mid',$cat,$crnt_id,470,460);// RESIZE AND PUT TO FOLDER 'MID'

			resizeImage($filename_n,'Thumbs',$cat,$crnt_id,140,0);//RESIZE AND PUT TO FOLDER 'THUMBS'
			
			sleep(1);
			
			unlink($file_name);

Пробовал вместо unlink, команду rename - та же ошибка :
"Warning: unlink(ROADRAGE 2003 THE VIDEOS.jpg) [<a href='function.unlink'>function.unlink</a>]: No such file or directory in... "
 

AmdY

Пью пиво
Команда форума
используй move_uploaded_file, будет меньше магии
 

igortik

Новичок
опять же... пути.. юзай абсолютный путь к файлу, а не пути типа '../', абсолютный - значит включающий в себя путь от корня, он же $_SERVER['DOCUMENT_ROOT'].
тебе парсер четко говорит, что нет такого файла или каталога, а значит - путь к нему неверный, следовательно, и функция ресайза обругает тебя.
p.s. и еще лучше все же чистить пробелы в имени файла, заменяя на нижнее подчеркивание. $foo = str_replace(' ','_',$bar)
 

vaalsh

Новичок
Спасибо всем!

Правильный ответ нашел на просторах паутины, если кому то пригодится, буду рад:

ini_set("gd.jpeg_ignore_warning", 1);

После чего проблема снимается на ура!
 
Сверху