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

vladZzz

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

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

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

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

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


Как мне сохранять превью на сервер?
 

Gas

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

Не слушай rotoZOOM, не нужны тут тонны кода, максимум пара "неработающих" строк.
 

vladZzz

Guest
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;

}
 

rotoZOOM

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

-~{}~ 22.02.05 13:19:

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

vladZzz

Guest
смысл в том, что функция img_resize() в windows ешё и копирует файл на диск, а в unix нет.

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

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

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

rotoZOOM

ACM maniac
vladZzz а как ты проверил, что он в памяти уменьшает ?

-~{}~ 22.02.05 13:33:

И вообще, если у тебя включен вывод сообщения об ошибках и предупреждениях, то наверняка ты увидишь ошибку на экране.
 

vladZzz

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

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

блин, может есть у кого кусок кода, у меня просто полностью рабочая галерея на win машине, а на хостинге не работает :(
обидно
 

Gas

может по одной?
Повторяю. Читаешь всё по приведённой мной ссылке.
Включаешь сообщения об ошибках, запускаешь скрипт, смотришь на ошибки, исправляешь или постишь их сюда. Потом тебе подкинут литературки что нужно сделать чтоб их исправить ;)
 

rotoZOOM

ACM maniac
vladZzz у тебя готовый кусок кода. Просто тебе надо довести его до ума. Ты, кстати, так и не ответил на мой вопрос.
И еще какая версия GD стоит на хостинге ?
 

yugene

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

vladZzz

Guest
я пробовал только jpeg, тут вопрос в чём, функцию resize_img() умеет писать в файл на диске, так я понял? но почему она не делает этого в unix?
 

rotoZOOM

ACM maniac
vladZzz ты что? тебе уже кучу раз сказали, что делать сделать надо. СДЕЛАЙ! потом спрашивай.
 

vladZzz

Guest
$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);


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

Gas

может по одной?
ох.

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

-~{}~ 23.02.05 12:24:

Фанат
Это не тот человек. Смысл текста по этой ссылке для него (надеюсь только пока) остался тайной.
 

vladZzz

Guest
запускал с заданными параметрами - ошибок нет.
в логах apache также - ошибок нет.
 

Gas

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

vladZzz

Guest
вообще ни каких ошибок - всё чисто, может есть у кого скрипт закачки? киданите плиз
 
Сверху