Сделал форму для загрузки картинок на сервер в заданную дирректорию и соответствующую функцию.
Так же понадобилось делать уменьшенные копии фото для вывода в фотогалерее.
Делал все стандартными методами
//$filename -путь к исходному изображению
//$dir_to_save - путь к папке,в которую будет помещаться уменьшенная копия //изображения
//$w = 200 - ширина уменьшаемой копии
//$quality = 100 - качество для jpeg
function resizeImg($filename,$dir_to_save,$w = 200,$quality = 100){
list($width,$height,$type) = getimagesize($filename);
if (!$width || !$height) {
echo 'Невозможно получить длину и ширину изображения';
return;
}
//проверяем тип изображения создаем новое изображение из старого
$types = array('','gif','jpeg','png');
$ext = $types[$type];
if ($ext) {
$func = 'imagecreatefrom'.$ext;
$scr_img = $func($filename);
} else {
echo 'Некорректный формат файла';
return;
}
//получаем размер оригинального изображения
$newWidth = $w;
$koefficient = $width/$w ;
$newHeight = $height/$koefficient ;
//создаем пустое изображение с новыми шириной и высотой
$newSizeImg = imagecreatetruecolor($newWidth, $newHeight);
//копируем исходное изображение в новое с заданными шириной и высотой без потери качества
imagecopyresampled($newSizeImg, $scr_img, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
if(!file_exists($dir_to_save)){
mkdir("$dir_to_save", 777,true);}
//Создаем изображение
if ($type == 2) {
return imagejpeg($newSizeImg,$dir_to_save, $quality);
} else {
$func = 'image'.$ext;
return $func($newSizeImg,$dir_to_save);
}
// Освобождаем память
imagedestroy($scr_img);
}
В браузере выдает ошобку
Warning: imagejpeg() [function.imagejpeg]: Unable to open 'img_small/' for writing: Permission denied in C:\Users\Public\www\htdocs\photogalery\form.php on line 45
Попробовал посмотреть,что приходит в функцию imagejpeg($newSizeImg,$dir_to_save, $quality); в переменную $newSizeImg,в которой должен быть файл для сохранения
Туда приходит echo $newSizeImg ;// Resource id #7
Что за Resource id #7 и может поэтому не сохраняется уменьшенная картинка ????
Спустя 41 минута, 54 секунды (26.06.2012 - 16:48) fdr написал(а):
Цитата |
Что за Resource id #7 и может поэтому не сохраняется уменьшенная картинка ???? |
так и должно быть.
return imagejpeg($newSizeImg,$dir_to_save, $quality);
imagejpeg- второй параметр должен быть имя файла!!!!
Спустя 18 минут, 45 секунд (26.06.2012 - 17:06) mmmoi09 написал(а):
Цитата (fdr @ 26.06.2012 - 13:48) | ||
так и должно быть. return imagejpeg($newSizeImg,$dir_to_save, $quality); imagejpeg- второй параметр должен быть имя файла!!!! |
В мануале -это путь для сохранения файла .Но даже если пишу путь с именем файла,то ничего не изменяется,кроме нового пути в сообщении об ошибке.
Никакие манипуляции с написанием этого пути не помогают .
Все равно возникает ошибка
Warning: imagejpeg() [function.imagejpeg]: Unable to open ....for writing: Permission denied in ....
Спустя 36 минут, 31 секунда (26.06.2012 - 17:43) fdr написал(а):
Цитата |
Warning: imagejpeg() [function.imagejpeg]: Unable to open ....for writing: Permission denied in .... |
можно полный код! Если он такой же...
Цитата |
Warning: imagejpeg() [function.imagejpeg]: Unable to open 'img_small/' for writing: Permission denied in C:\Users\Public\www\htdocs\photogalery\form.php on line 45 |
Здесь говорится : не могу открыть 'img_small/' для записи, ошибка в
C:\Users\Public\www\htdocs\photogalery\form.php стока 45
imagejpeg($newSizeImg,$dir_to_save, $quality);
$dir_to_save - передается имя директории, без указание имени файла! img_small/
Спустя 1 час, 40 минут, 4 секунды (26.06.2012 - 19:23) mmmoi09 написал(а):
Не могу понять,почему я присваиваю переменной путь
if($_FILES){
$basename = basename($_FILES['uploadimg']['name']);
$dir_to_save_img_small = "img_small/" .$basename;
//передаю путь для сохранения уменьшенного файла в функцию
resizeImg($this_save_img,$dir_to_save_img_small);
но в функцию попадает другой путь C:/Users/Public/www/htdocs/photogalery/img/IMG_1696.JPG
а вне функции $dir_to_save_img_small выводим и получается img_small/IMG_1696.JPG
Как так путь переданный в функцию приображается?
if($_FILES){
$basename = basename($_FILES['uploadimg']['name']);
$dir_to_save_img_small = "img_small/" .$basename;
//передаю путь для сохранения уменьшенного файла в функцию
resizeImg($this_save_img,$dir_to_save_img_small);
но в функцию попадает другой путь C:/Users/Public/www/htdocs/photogalery/img/IMG_1696.JPG
а вне функции $dir_to_save_img_small выводим и получается img_small/IMG_1696.JPG
Как так путь переданный в функцию приображается?
Спустя 18 минут, 55 секунд (26.06.2012 - 19:42) fdr написал(а):
Цитата |
C:/Users/Public/www/htdocs/photogalery/img/IMG_1696.JPG |
c чего вы это решили!?
что бы это проверить, добавляем
var_dump($this_save_img,$dir_to_save_img_small)
перед
resizeImg($this_save_img,$dir_to_save_img_small);
и еще...
$basename = basename($_FILES['uploadimg']['name']);
basename($_FILES['uploadimg']['name']); - не обязателен, $_FILES['uploadimg']['name'] и так хранит имя изображения!
и еще...
$newWidth = $w;
переменная $w - недоступна в функции, ее нужно или явно указать внутри функции, или объявить Глобальной!
Спустя 1 час, 33 минуты, 55 секунд (26.06.2012 - 21:16) mmmoi09 написал(а):
Спасибо большое.
Я разобрался с Вашей помощью .
Я разобрался с Вашей помощью .