Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Графика > Временная память в php загрузке файлов


Автор: SIMarOK 6.11.2005, 17:55
каков ее размер? 10 мб?

Я пытаюсь загрузить 20 картинок с общим объемом не более 3 мегобайта, но скрипт попутно делает уменьшенные копии картинок, каждый картинка загружается в цикле. Сохранение всего этого происходит только в самом конце почему-то. Так вот, иногда он загружает все нормально, а иногда выводит ошибку Невозможно отобразить страницу, и не заканчивает загрузку всех картинок, а только часть их...почему такое случанется? может что-то переполняется?

Автор: Mal Hack 6.11.2005, 18:45
Может памяти скрипту не хватает, может процессу веб-сервера, что вероятнее,может выходит за пределы максимального времени работы.

Автор: SIMarOK 6.11.2005, 18:59
но как же тогда такое реализуется? Мне нужно чтобы за раз загрузилось до 40 файлов и попутно делались в ту же папку мелкие копии.

Автор: Mal Hack 6.11.2005, 19:40
Ну я думаю что не зараз...
Сделай одну временную таблицу в ней храни фотки, который надо уменьшить.
При загрузке - залей фотки, и сделай HTML код, который бы через JS вызывал бы твой файл, которому передавал бы в качестве параметра имя файла для уменьшения. И пусть в цикле (JS) он у тебя делает уменьшенные копии. 4images вроде по такому принципу работает.

Автор: SIMarOK 6.11.2005, 22:29
просто для эксперимента попробывал запустить отдельно скрипт уменьшения картинок:
Код

<?
set_time_limit(1200);
$pic[0]="113130265000.jpg";
$pic[1]="113130265101.jpg";
$pic[2]="113130265102.jpg";
$pic[3]="113130265103.jpg";
$pic[4]="113130265104.jpg";
$pic[5]="113130265105.jpg";
$pic[6]="113130265206.jpg";
$pic[7]="113130265207.jpg";
$pic[8]="113130265208.jpg";
$pic[9]="113130265209.jpg";
$pic[10]="113130265210.jpg";
$pic[11]="113130265211.jpg";
$pic[12]="113130265212.jpg";
$pic[13]="113130265313.jpg";
$pic[14]="113130265314.jpg";
$pic[15]="113130265315.jpg";
for($j=0;$j<17; $j++)
{
$n++;
$file_name=$pic[$j]; 
$y=190;#px  //будущий размер изображения в пикселях по высоте 
$simg = getimagesize($file_name); 

$w = $y; 
$h = $w*$simg[1]/$simg[0]; 
    // определим коэффициент сжатия изображения, которое будем генерить 
    $ratio = $w/$h; 
    // создадим пустое изображение по заданным размерам 
    $dest_img = imagecreatetruecolor($w, $h); 
    // зальём его белым цветом 
    imagefill($dest_img, 0, 0, 0xFFFFFF); 
    // получим размеры исходного изображения 
    $size_img = getimagesize($file_name); 
    // получим коэффициент сжатия исходного изображения 
    $src_ratio=$size_img[0]/$size_img[1]; 

    // здесь вычисляем размеры, чтобы при масштабировании сохранились 
    // 1. Пропорции исходного изображения 
    // 2. Исходное изображение полностью помещалось на маленькой копии 
    // (не обрезалось) 
    if ($src_ratio>$ratio) 
    { 
        $old_h=$size_img[1]; 
        $size_img[1]=floor($size_img[0]/$ratio); 
        $old_h=floor($old_h*$h/$size_img[1]); 
    } 
    else 
    { 
        $old_w=$size_img[0]; 
        $size_img[0]=floor($size_img[1]*$ratio); 
        $old_w=floor($old_w*$w/$size_img[0]); 
    } 

    // исходя из того какой тип имеет изображение 
    // выбираем функцию создания 
$path_parts= pathinfo($file_name); 
$ext = $path_parts["extension"]; 
$src_img = imagecreatefromjpeg($file_name); 


    // масштабируем изображение    функцией imagecopyresampled() 
    // $dest_img - уменьшенная копия 
    // $src_img - исходной изображение 
    // $w - ширина уменьшенной копии 
    // $h - высота уменьшенной копии 
    // $size_img[0] - ширина исходного изображения 
    // $size_img[1] - высота исходного изображения 
    imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);
 
            $file_nameN='mini_'.$pic[$j];
            $uploa_file = '/home/public_html/files/'.$file_nameN;
    // в зависимости от типа файла выбирвем функцию сохранения в файл 

imagejpeg($dest_img, $uploa_file, 90); 



    // чистим память от созданных изображений 
    imagedestroy($dest_img); 
    imagedestroy($src_img);
            $mpic[$j]=$file_nameN;
}
echo $n;
?>


И он мне делает по разному, иногда 12 маленьких копий, иногда 14, по разному...но не все...почему так? Изображения в срежнем по 90кб

Незнаю в чем проблемаsmile
---------------------------------
На локальном сервере работает без проблем, создает все что нужно, а на хостинге не хочет, вот какие там ограничения:
MySQL:

колличество запросов к БД в час (max_questions) = 28800
колличество соединений с БД (max_user_connections) = 40

PostgresSQL:

колличество соединений с БД (max_connections) = 10

CPU (загрузка процессора):

если процесс загружает процессоры сервера в течение 30сек. на 10%, процесс корректно завершается
если процесс загружает процессоры сервера в течение 5сек. на 60%, процесс корректно завершается

Processes (колличество процессов):

18 процессов

RAM (оперативная память сервера):

28Mb на процесс

FTP:

2 соединения

File:

max file size = 200Mb
----------------------------------------
Но разве этот скрипт попадает под какое либо из этих ограничений?

Автор: SIMarOK 7.11.2005, 18:29
Решил запускать этот скрипт с локалки. В скрипте происходит соединение с фтп, загрузка картинки, потом делает сразу ее уменьшенная копия, но так как функция imagejpeg(); не может отправить файл на фтп, то я хочу чтобы она сохранилась у меня на жестком, а потом бы я сразу ее отправил стандартной функцией ftp_put.
Как мне это сделать? как указать ему путь сохранение маленькой картинки на жестком?

Автор: SIMarOK 7.11.2005, 18:58
Так, сохранение я сделал, но как мне указать файл $_FILES['upload_file']['name'] уменьшенный для загрузки ftp_put? Без формы хтмл...
Добавлено @ 18:58
файл находится там же где и скрипт, нужно чтобы он автоматически брал файл и загружал

Автор: SIMarOK 7.11.2005, 20:43
я сам с собой разговариваю?) или никто не знает как передать $_FILES['upload_file']['name'] форменные данные, если я знаю имя и где находится картинка....

Автор: Mal Hack 8.11.2005, 01:49
SIMarOK будь добр объясни по русски конкретно в чем проблема и что тебе надо сделать... Если честно очень тяжело, по крайней мере мне, понять что ты хочешь

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)