Только зарегился на диари.ру, и сразу вступил в сообщество. Очень информативно и доступно, спасибо.
Есть вопросы: у меня на сайте стоит cms, неважно какая, суть в том что я сделал возможность (в админке модуля галереи) скана папки и добавления всех фоток из этой папки в базу (mysql). php/mysql знаний у меня ща не очень, и я ломано-коряво сделал этот модуль, нужно было. итак - можно ли объединить запросы мускла, вот код:
function GetImgs($folder,&$files_arr) // скан папки без учета вложенных директорий и без проверки на формат JPG(=незнаю как
{
...получаем список файлов в папке
}
...
...
$files_array = array();
GetImgs($folder,$files_array); //получил список в массив
....ну и вопрос собственно - мне делать отдельный запрос на каждый элемент массива (который указывает на путь к файлу) или можно это все в один запрос сунуть, объеденив предварительно(?) .команда объединения, UNION, у меня не пашет.И другой вопрос: ща я пользуюсь выше описанным способом посылки отдельного запроса , и при добавлении файла в базу создается его уменьшенная картинка, превьюшка то бишь. За преобразование в превьюшки отвечает
function img_resize($src, $dest,$width=80,$height=80, $rgb=0xFFFFFF,$border=false)
{
if (!file_exists($src)) return false;
$size = getimagesize($src);
if ($size === false) return false;
$format = strtolower(substr($size['mime'], strpos($size['mime'], '/'+1));
$icfunc = "imagecreatefrom" . $format;
$iwfunc = "image" . $format;
if (!function_exists($icfunc)) return false;
if (!function_exists($iwfunc)) return false;
$x_ratio = $width / $size[0];
$y_ratio = $height / $size[1];
$ratio = min($x_ratio, $y_ratio);
$use_x_ratio = ($x_ratio == $ratio);
$new_width=0$use_x_ratio ? $width:0floor($size[0] * $ratio);
$new_height=0!$use_x_ratio ? $height:0floor($size[1] * $ratio);
$new_left = $use_x_ratio ? 0 : floor(($width - $new_width) / 2);
$new_top = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);
$isrc = $icfunc($src);
$idest = imagecreatetruecolor($width, $height);
imagefill($idest, 0, 0, $rgb);
if ($border)
{
$bim = imagecreatefromjpeg("images/border.jpg";
imagecopyresampled($idest, $bim, 0, 0, 0, 0, 120, 80, 120, 80);
imagecopyresampled($idest, $isrc, $new_left+4, $new_top+4, 0, 0, $new_width-8, $new_height-8, $size[0], $size[1]);
imagedestroy($bim);
}
else
{
imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);
}
$iwfunc($idest, $dest);
imagedestroy($isrc);
imagedestroy($idest);
return true;
}
при создании превьюшек большого кол-ва картинок (в цикле) -пустая страница, смотрю лог php - сервер выдает ошибку об использовании памяти (Allowed... tried allocate xxx bytes .че вроде этого), как я понял - эта функция занимает память для ресайза каждой картинки, но не освобождает её??
Буду очень благодарен если поможете..
Есть вопросы: у меня на сайте стоит cms, неважно какая, суть в том что я сделал возможность (в админке модуля галереи) скана папки и добавления всех фоток из этой папки в базу (mysql). php/mysql знаний у меня ща не очень, и я ломано-коряво сделал этот модуль, нужно было. итак - можно ли объединить запросы мускла, вот код:
function GetImgs($folder,&$files_arr) // скан папки без учета вложенных директорий и без проверки на формат JPG(=незнаю как
{
...получаем список файлов в папке
}
...
...
$files_array = array();
GetImgs($folder,$files_array); //получил список в массив
....ну и вопрос собственно - мне делать отдельный запрос на каждый элемент массива (который указывает на путь к файлу) или можно это все в один запрос сунуть, объеденив предварительно(?) .команда объединения, UNION, у меня не пашет.И другой вопрос: ща я пользуюсь выше описанным способом посылки отдельного запроса , и при добавлении файла в базу создается его уменьшенная картинка, превьюшка то бишь. За преобразование в превьюшки отвечает
function img_resize($src, $dest,$width=80,$height=80, $rgb=0xFFFFFF,$border=false)
{
if (!file_exists($src)) return false;
$size = getimagesize($src);
if ($size === false) return false;
$format = strtolower(substr($size['mime'], strpos($size['mime'], '/'+1));
$icfunc = "imagecreatefrom" . $format;
$iwfunc = "image" . $format;
if (!function_exists($icfunc)) return false;
if (!function_exists($iwfunc)) return false;
$x_ratio = $width / $size[0];
$y_ratio = $height / $size[1];
$ratio = min($x_ratio, $y_ratio);
$use_x_ratio = ($x_ratio == $ratio);
$new_width=0$use_x_ratio ? $width:0floor($size[0] * $ratio);
$new_height=0!$use_x_ratio ? $height:0floor($size[1] * $ratio);
$new_left = $use_x_ratio ? 0 : floor(($width - $new_width) / 2);
$new_top = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);
$isrc = $icfunc($src);
$idest = imagecreatetruecolor($width, $height);
imagefill($idest, 0, 0, $rgb);
if ($border)
{
$bim = imagecreatefromjpeg("images/border.jpg";
imagecopyresampled($idest, $bim, 0, 0, 0, 0, 120, 80, 120, 80);
imagecopyresampled($idest, $isrc, $new_left+4, $new_top+4, 0, 0, $new_width-8, $new_height-8, $size[0], $size[1]);
imagedestroy($bim);
}
else
{
imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);
}
$iwfunc($idest, $dest);
imagedestroy($isrc);
imagedestroy($idest);
return true;
}
при создании превьюшек большого кол-ва картинок (в цикле) -пустая страница, смотрю лог php - сервер выдает ошибку об использовании памяти (Allowed... tried allocate xxx bytes .че вроде этого), как я понял - эта функция занимает память для ресайза каждой картинки, но не освобождает её??
Буду очень благодарен если поможете..
Первое:
несколько строк действительно можно вставлять одним запросом INSERT IGNORE, при этом строки просто разделяются запятой. Т.е. примерно так:
INSERT IGNORE INTO articles(title, content) VALUES('article 1', 'content1'),('article 2', 'content 2'),и т.д.,('article N', 'content N');
Но только mysql323 этого не понимает (насчет mysql4 не уверен).
Второе:
странно, но, видимо, imagedestroy() действительно уничтожает только само изображение, а какие-то дополнительные данные остаются в памяти до завершения работы скрипта.
можно попробовать сделать примерно так, тут память тоже будет заниматься при ресайзе, но при последующих вызовах используется уже занятая:
кстати, вот это вот
imagefill($idest, 0, 0, $rgb);
неправильно, т.к. цвет нужно сначала создать с помощью imagecolorallocate(). Т.е. примерно так
imagefill($idest, 0, 0, imagecolorallocate($img, $rgb & 0xFF, ($rgb & 0xFF00) >> 8, ($rgb & 0xFF0000) >> 16));
Если сервер поддерживает Rewrite то лучше с помощью него сделать реврайты. для не существующий файлов и тогда один скрипт - одно уменьшение.
качать тут:
www.plati.ru/asp/pay.asp?idd=1040991