Помогите пожалуйста! У кого есть скрипт для галереи: закачка и сжатие картинки ...

  • Автор темы Автор темы vladZzz
  • Дата начала Дата начала

vladZzz

Guest
Помогите пожалуйста! У кого есть скрипт для галереи: закачка и сжатие картинки ...

Доброго времени суток! Помогите, пожалуйста, сделал галерею, на win машине всё работает, а на unix нет.
Проблема в скрипте закачки и обработки фотографии.

А именно - большая фото закачивается, а превьюшка нет!

Примерно код такой, я сейчас не могу точно привести:

copy($image_big, 'pub/...');
resize($image1, 'pub/'.$image2); // винда сохраняет файл автоматом, а линукс нет.


Как мне сохранять превью на сервер?
 
vladZzz
Причин может быть туча.
Читаешь про отладку и воспинимаешь как руководство к действию.

Не слушай rotoZOOM, не нужны тут тонны кода, максимум пара "неработающих" строк.
 
function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $quality=100)
{
if (!file_exists($src)) return false;

$size = getimagesize($src);

if ($size === false) return false;

// Определяем исходный формат по MIME-информации, предоставленной
// функцией getimagesize, и выбираем соответствующую формату
// imagecreatefrom-функцию.
$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
$icfunc = "imagecreatefrom" . $format;
if (!function_exists($icfunc)) 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 = $use_x_ratio ? $width : floor($size[0] * $ratio);
$new_height = !$use_x_ratio ? $height : floor($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);
imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0,
$new_width, $new_height, $size[0], $size[1]);

imagejpeg($idest, $dest, $quality);

imagedestroy($isrc);
imagedestroy($idest);

return true;

}
 
Gas про тонны кода тут никто и не говорил. Но если тебе для ясности причин ошибки хватает того куска, который дал vladZzz, тогда укажи на ошибку.
Пусть приведет 10-15 строчек кода, ничего страшного ...

-~{}~ 22.02.05 13:19:

Хм, это не 10 строчек конечно, но вот это
PHP:
$isrc = $icfunc($src);
что такое ? может все таки какой-нибудь eval ("$icfunc(\"$src\")"); надо сделать.
Если не поможет, тогда смотри на каком этапе у тебя вылетает. Перед каждым return false; ставь какое-нить echo.
 
смысл в том, что функция img_resize() в windows ешё и копирует файл на диск, а в unix нет.

т.е. грубо говоря:

img_resize($image, $image) // windows, как бы уменьшаем картинку, засовывая саму в себя. Картинка уменьшается в прогресии изменяюсь на диске. Т.е. вызвав 1, 2 .. 10 раз фунцкию файл будет уже просто мизерного размера. Причем, как я сказал физически.

img_resize($image, $image) // unix, уменьшает только в памяти не изменяя картинку на диске. т.е. файл уменьшается только ОДИН раз.
 
vladZzz а как ты проверил, что он в памяти уменьшает ?

-~{}~ 22.02.05 13:33:

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

а в windows - обновил страницу и файл физически уменшился на диске

блин, может есть у кого кусок кода, у меня просто полностью рабочая галерея на win машине, а на хостинге не работает :(
обидно
 
Повторяю. Читаешь всё по приведённой мной ссылке.
Включаешь сообщения об ошибках, запускаешь скрипт, смотришь на ошибки, исправляешь или постишь их сюда. Потом тебе подкинут литературки что нужно сделать чтоб их исправить ;)
 
vladZzz у тебя готовый кусок кода. Просто тебе надо довести его до ума. Ты, кстати, так и не ответил на мой вопрос.
И еще какая версия GD стоит на хостинге ?
 
Автор оригинала: vladZzz
img_resize($image, $image) // unix, уменьшает только в памяти не изменяя картинку на диске. т.е. файл уменьшается только ОДИН раз.
А такая фигня и для JPEG, и для GIF?
 
я пробовал только jpeg, тут вопрос в чём, функцию resize_img() умеет писать в файл на диске, так я понял? но почему она не делает этого в unix?
 
vladZzz ты что? тебе уже кучу раз сказали, что делать сделать надо. СДЕЛАЙ! потом спрашивай.
 
$pub_dir = 'pub/gallery/g'.$id;
$pub_preview = $pub_dir.'/preview';

mt_srand();
$random = mt_rand('1000', '10000');

$image = $random.'.jpg';

img_resize($HTTP_POST_FILES['form_filename']['tmp_name'], $pub_preview.'/'.$image, 200, 150);

// Закачиваем, или если прав на запись нет - выдаём ошибку.
copy($HTTP_POST_FILES['form_filename']['tmp_name'], $pub_dir.'/'.$image) or msgbox('Невозможно закачать картинку, возможно нет прав записи на папку.', $HTTP_REFERER);

$image_preview = addslashes($pub_preview.'/'.$image);
$image = addslashes($pub_dir.'/'.$image);


Всё перепробовал, в чём глюк не знаю.
 
ох.

1. в начало скрипта поставь
PHP:
ini_set('display_errors',1);
error_reporting(E_ALL);
2. убери die после copy
3. запусти скрипт
4. сообщение об ошибке сюда

-~{}~ 23.02.05 12:24:

Фанат
Это не тот человек. Смысл текста по этой ссылке для него (надеюсь только пока) остался тайной.
 
запускал с заданными параметрами - ошибок нет.
в логах apache также - ошибок нет.
 
copy($HTTP_POST_FILES['form_filename']['tmp_name'], $pub_dir.'/'.$image) or msgbox('Невозможно закачать картинку, возможно нет прав записи на папку.', $HTTP_REFERER);
то-есть всегда показывает "Невозможно закачать картинку, возможно нет прав записи на папку", а когда убираешь "or msgbox..." никаких ошибок не появляется?
 
вообще ни каких ошибок - всё чисто, может есть у кого скрипт закачки? киданите плиз
 
Сверху