ASLsh
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Подскажите пожалуйста, как можно, при работе скрипта PHP, узнать размер какой либо переменной. Не массива а именно переменной, т.е. сколько она занимает в байтах на данный момент. Вообще этот вопрос возник вот из такого вот положения дел: Есть форма, она передает параметры скрипту PHP, который загружает на сервер картинки (JPEG). Для этого используется следующий код: ---------------------------- Код: while($HTTP_POST_FILES['file_photo']['name'][$i] !== ""){ $name_photos[$i] = "w_".$pic_date."_".$i.".".substr($HTTP_POST_FILES['file_photo']['name'][$i],-3); move_uploaded_file($HTTP_POST_FILES['file_photo']['tmp_name'][$i], $uploaddir.$name_photos[$i]); $i++; } | --------------------------- при этом все проходит нормально, т.е. картинки успешно загружаются, но далее, по ходу скрипта, на основе одной из картинок должно создаваться превью фото, для чего использую следующий код: --------------------------------------------------- Код: $FFL = $uploaddir.$name_photos[0]; // имя-путь исходно файла $FPFL = $uploaddir."pr_".$name_photos[0]; // имя-путь файла для "превьюшки" // Вызов функции полученя информации о изображении if ($size === false) die ('Файл для создания превью отсутствует!'); // Читаем в память JPEG-файл с помощью функции imagecreatefromjpeg: $source = imagecreatefromjpeg($FFL) or die('Cannot load original JPEG'); $NEWX = 80;// ширина "превьюшки" $NEWY = 60;// высота "превьюшки" // Создаем новое изображение $target = imagecreatetruecolor($NEWX, $NEWY); // Копируем существующее изображение в новое с изменением размера: $size0 = 640; $size1 = 480; imagecopyresampled( $target, // Идентификатор нового изображения $source, // Идентификатор исходного изображения 0,0, // Координаты (x,y) верхнего левого угла в новом изображении 0,0, // Координаты (x,y) верхнего левого угла копируемого блока существующего изображения $NEWX, // Новая ширина копируемого блока $NEWY, // Новая высота копируемого блока $size0, // Ширина исходного копируемого блока $size1 // Высота исходного копируемого блока ); imagejpeg($target, $FPFL, 100); imagedestroy($target); imagedestroy($source); | ------------------------------------------------------- и вот тут, когда читаем в память JPEG-файл, возникает сложность (в которой мне и надо разобраться) для картинок с размером более ~ 390 kb при вызове функции: $source = imagecreatefromjpeg($FFL) or die('Cannot load original JPEG'); //(см. в коде выше. 6 строка) скрипт "вылетает" с ошибкой: Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 2560 bytes) in /скрипт.php on line 70 При этои размер лимита памяти - 16М А прям перед этой строкой (используя memory_get_usage) вывожу размер занимаемой скриптом памяти: памяти занято: 71880 Я не могу понять, почему не хватает памяти... Как определить, сколько надо этой функции при наличии картинок того или иного размера. Как вообще можно решить это? Не хочтелось бы просить хостера повышать лимит, если есть иные решения по оптимизации данной процедуры. Заранее благодаоен за любые подсказки и ссылки по существу вопроса. Спасибо. | Всего записей: 97 | Зарегистр. 26-09-2003 | Отправлено: 07:44 06-04-2007 | Исправлено: Cheery, 20:35 06-04-2007 |
|