Да, у меня проблема с памятью PHP. Мое предложение хозяина макс. для использования предела памяти 64 МБ, и как-то, когда я загружаю + функции обработки, превышает эту память, и im получает ошибку (не всегда, хотя, зависит от размера изображения)PHP: использование памяти и кода с низкой памятью
Когда я загружаю изображение размером около 1 мб или ниже, загружает, и вы можете обрезать и сохранить его.
Но когда я загружаю изображение размером около 2 мб или более (мой лимит на функцию загрузки составляет 6 МБ), он загружается, а затем, когда вы обрезаете изображение и хотите его сохранить, я получаю ошибку «из памяти».
Я попытался imagedestroy() после любой функции в gd, я больше не использую, но это не повлияло на нее. Хотя im только с использованием GDfunctions в случае урожая
Итак, есть ли что-нибудь, что я могу освободить из памяти при загрузке?
Или, может быть, вообще, как освободить использование памяти php?
Вот мой сценарий:
switch($action) {
case 'upload':
$userid = $USER;
$user = getUserInfo($userid);
$lasttime = $user['showURP']["photo_lasttime"];
$upload_name = "file";
$max_file_size_in_bytes = 8388608;
$extension_whitelist = array("jpg", "gif", "png", "jpeg");
/* checking extensions */
$path_info = pathinfo($_FILES[$upload_name]['name']);
$file_extension = $path_info["extension"];
$is_valid_extension = false;
foreach ($extension_whitelist as $extension) {
if (strcasecmp($file_extension, $extension) == 0) {
$is_valid_extension = true;
break;
}
}
if (!$is_valid_extension) {
echo "{";
echo "error: 'Filtype not allowed!'\n";
echo "}";
exit(0);
}
/* checking filetype*/
switch(exif_imagetype($_FILES[$upload_name]['tmp_name'])) {
case IMAGETYPE_GIF:
case IMAGETYPE_JPEG:
case IMAGETYPE_PNG:
break;
default:
echo "{";
echo "error: 'This is no real image!'\n";
echo "}";
exit(0);
}
/* file size check */
$file_size = @filesize($_FILES[$upload_name]["tmp_name"]);
if (!$file_size || $file_size > $max_file_size_in_bytes) {
echo "{";
echo "error: 'Filesize exceeds the limit: 6MB'\n";
echo "}";
exit(0);
}
if(isset($_FILES[$upload_name]))
if ($_FILES[$upload_name]["error"] > 0) {
echo "Error: " . $_FILES["file"]["error"] . "<br />";
} else {
$userfile = stripslashes($_FILES[$upload_name]['name']);
$file_size = $_FILES[$upload_name]['size'];
$file_temp = $_FILES[$upload_name]['tmp_name'];
$file_type = $_FILES[$upload_name]["type"];
$file_err = $_FILES[$upload_name]['error'];
$file_name = $userfile;
if(move_uploaded_file($file_temp, "images/profilePhoto/".$file_name)) {
echo "{";
echo "msg: '".$file_name."'";
echo "}";
}
}
break;
case 'crop':
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$jpeg_quality = 90;
$src = "images/profilePhoto/".$_POST['fname'];
$ext= pathinfo($src, PATHINFO_EXTENSION);
if($ext == "jpg" OR $ext == "jpeg" OR $ext == "JPG"){
$img_r = imagecreatefromjpeg($src); // <-- im getting out of memory error on this line
}elseif($ext == "png" OR $ext == "PNG"){
$img_r = imagecreatefrompng($src);
}elseif($ext == "gif" OR $ext == "GIF"){
$img_r = imagecreatefromgif($src);
}
if($_POST['fixed'] == 0) {
$targ_w = $_POST['w'];
$targ_h = $_POST['h'];
}
else {
$targ_h = $_POST['sizeh'];
$targ_w = $_POST['sizew'];
}
$dst_r = ImageCreateTrueColor($targ_w, $targ_h);
imagecopyresampled($dst_r,$img_r,0,0,$_POST['x'],$_POST['y'],
$targ_w,$targ_h,$_POST['w'],$_POST['h']);
imagedestroy($img_r); // free memory
$path_thumbs = "images/profilePhoto/thumbs";
$filename = $USER . ".jpg";
$thumb_path = $path_thumbs . '/' . $filename;
imagejpeg($dst_r,$thumb_path,$jpeg_quality);
imagedestroy($dst_r); // free memory
echo json_encode(array(
'filename'=>$thumb_path
));
unlink($src);
}
break;
}
Мой хозяин только поддерживает GD LIB для обрезки изображений, так что можно использовать ImageMagick косяк.
И как я уже упоминал ранее, мой хозяин имеет memory_limit на 64M, что не могу быть установлен
Почему -1 ?? ... – Karem