|
|
|
| Всем привет!!!
Подскажите пожалуйста, в чем моя ошибка...
Взял скрипт с форума, который создает миниатюрки.
Создаю их при выборке из БД.
Миниатюры должны храниться в папке small_photo/раздел/подраздел/.
Есть проверка на существование папок "раздел" и "подраздел". Собственно проблема в том, что папки создаются, а миниатюрки не копируются, при этом никаких ошибок скрипт не выводит...
<?php
function resizeimg($filename, $smallimage, $w, $h, $color)
{
list($width, $height, $type, $attr) = @getimagesize( $smallimage );
// определим коэффициент сжатия изображения, которое будем генерить
$ratio = $w/$h;
// получим размеры исходного изображения
list($width, $height, $type, $attr) = @getimagesize( $filename );
// Если размеры меньше, то масштабирования не нужно
if (($width<$w) && ($height<$h)) return true;
// получим коэффициент сжатия исходного изображения
$src_ratio=$width/$height;
// Здесь вычисляем размеры уменьшенной копии, чтобы при масштабировании сохранились
// пропорции исходного изображения
if ($ratio<$src_ratio)
{
$h = $w/$src_ratio;
}
else
{
$w = $h*$src_ratio;
}
// создадим пустое изображение по заданным размерам
$dest_img = imagecreatetruecolor($w, $h);
$white = imagecolorallocate($dest_img, 255, 255, 255);
if ($type==2) $src_img = imagecreatefromjpeg($filename);
else if ($type==1) $src_img = imagecreatefromgif($filename);
else if ($type==3) $src_img = imagecreatefrompng($filename);
// масштабируем изображение функцией imagecopyresampled()
// $dest_img - уменьшенная копия
// $src_img - исходной изображение
// $w - ширина уменьшенной копии
// $h - высота уменьшенной копии
// $width - ширина исходного изображения
// $height - высота исходного изображения
imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $width, $height);
// сохраняем уменьшенную копию в файл или выводим на экран
if ($type==1) imagegif ($dest_img, $smallimage);
else if ($type==2) imagejpeg($dest_img, $smallimage);
else if ($type==3) imagepng ($dest_img, $smallimage);
// чистим память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);
return true;
}
require ("./inc/config.inc");
$query=mysql_query("select * from photo order by ID_PHOTO limit 5;");
if($query)
{
while($res=mysql_fetch_array($query))
{
//в таблице photo поле FILENAME содержит путь к файлу, начиная с папки photo
// т.е photo/раздел/подраздел/имя_файла
preg_match("/photo\/+([0-9]+)\/([0-9)]+)\/(.*)/i",$res['FILENAME'],$str);
print_r($str);
chdir(DIR_FS_DOCUMENT_ROOT."small_photo/");
if(!is_dir($str[1]))
{
mkdir($str[1]);
chmod($str[1],'0755');
}
chdir($str[1]);
if(!is_dir($str[2]))
{
mkdir($str[2]);
chmod($str[2],'0755');
}
resizeimg($res['FILENAME'],"small_".$res['FILENAME'],100,100,0);
echo"<img src=small_".$res['FILENAME']." width='100' height='100'> ";
}
}
?>
|
Надеюсь, объяснил понятно, заранее спасибо | |
|
|
|
|
|
|
|
для: Roma
(06.08.2007 в 14:12)
| | Ошибка связана с функцией chdir.
Немного изменил код:
<?php
require ("./inc/config.inc");
$query=mysql_query("select * from photo order by ID_PHOTO limit 5;");
if($query)
{
while($res=mysql_fetch_array($query))
{
preg_match("/photo\/+([0-9]+)\/([0-9)]+)\/(.*)/i",$res['FILENAME'],$str);
if(!is_dir(DIR_FS_DOCUMENT_ROOT."small_photo/".$str[1]))
{
chdir(DIR_FS_DOCUMENT_ROOT."small_photo/");
mkdir($str[1]);
chmod($str[1],'0777');
}
if(!is_dir(DIR_FS_DOCUMENT_ROOT."small_photo/".$str[1]."/".$str[2]))
{
chdir(DIR_FS_DOCUMENT_ROOT."small_photo/".$str[1]);
mkdir($str[2]);
chmod($str[2],'0777');
}
$filename="small_".$res['FILENAME'];
resizeimg($res['FILENAME'],$filename,100,100,0,0);
//echo"ok";else echo"no";
echo"<img src=small_".$res['FILENAME']." width='100' height='100'> ";
}
}
?>
|
Теперь, если папки /раздел/подраздел/ существуют, миниатюры создаются, если же не существуют, создаются папки, и только при повторном обновлении страницы создаются миниатюры
В чем причина? | |
|
|
|
|
|
|
|
для: Roma
(06.08.2007 в 15:19)
| | нашел причину: все это связано с chdir.
Теперь другая проблема: файл размеров 300кб и разрешением 1600х1200 не принимает.
Это связано с какими-то ограничениями на размер или разрешение, или ошибка в коде? | |
|
|
|
|
|
|
|
для: Roma
(06.08.2007 в 16:34)
| | Вывод ошибок включите и увидете! А если нек увидите ничего про это, то ошибка в коде. но это врятли.... | |
|
|
|
|