मेरे पास एक स्क्रिप्ट है जो छवियों को अपलोड करती है और उन्मुखीकरण के आधार पर उन्हें घुमाती है और मुझे समस्या का सामना करना पड़ रहा है कि जब एक छवि जिसमें EXIF टैग अपलोड होते हैं, तो मुझे एक त्रुटि मिलती है:PHP ने छवि अपलोड रोटेशन पर स्मृति आकार को समाप्त कर दिया
33554432 बाइट्स थक केअनुमति स्मृति आकार ( 10368 बाइट्स आवंटित करने के लिए करने की कोशिश की।
और फिर लाइन यह त्रुटि लॉग में करने के लिए बात कर रहा है।
मैं नोटिस किया था यह केवल उन छवियों के साथ हो रहा है जिनमें EXIF टैग हैं। यदि फ़ोटोशॉप या कुछ द्वारा जेनरेट की गई सामान्य छवियां अपलोड की जाती हैं, तो यह बिना किसी समस्या के काम करती है।
वास्तविक छवि उन्मुखीकरण कोड है निम्नलिखित:
function correctImageOrientation($fullpath) {
if (function_exists('exif_read_data')) {
$exif = exif_read_data($fullpath);
if($exif && isset($exif['Orientation'])) {
$orientation = $exif['Orientation'];
if($orientation != 1){
$img = imagecreatefromjpeg($fullpath);
$deg = 0;
switch ($orientation) {
case 3:
$deg = 180;
break;
case 6:
$deg = 270;
break;
case 8:
$deg = 90;
break;
}
if ($deg) {
$img = imagerotate($img, $deg, 0);
}
// then rewrite the rotated image back to the disk as $filename
imagejpeg($img, $fullpath, 100);
} // if there is some rotation necessary
} // if have the exif orientation info
} // if function exists
}
error_log जहां स्मृति समस्या होता है में सही लाइन वास्तव में एक है जहाँ यह कहते हैं:
$img = imagerotate($img, $deg, 0);
तरह से मैं कर रहा हूँ इसे स्क्रिप्ट में कॉल करना निम्नलिखित है:
$dirname = session::value('user_id');
$rotatedfile = '/home/myfolder/public_html/'.$dirname.'/'.$file_name;
$rotatedfile = $this->correctImageOrientation($rotatedfile);
मैं मूल रूप से क्या हूं हासिल करने की कोशिश कर रहा है कि घुमावदार छवि मूल फ़ाइल के समान स्थान पर सहेजी जाती है, मूल रूप से इसे बदलती है।
फिर से, यह केवल उन छवियों के साथ हो रहा है जिनमें EXIF जानकारी शामिल है। अन्य सभी समस्याओं के बिना अपलोड कर रहे हैं।
इस स्मृति आवंटन समस्या का कारण क्या हो सकता है?
वाह, यह बहुत अजीब है। क्योंकि मैंने वास्तव में इसे स्मृति_लिमिट समस्या माना था और मैंने इसे php.ini में 256MB तक बढ़ा दिया लेकिन यह देखने के बाद कि कोड के आपके टुकड़े ने इसे ठीक किया है, मैंने php.ini पर एक grep किया है (जो मैंने पहले नहीं किया था) और देखा कि 2 अलग स्मृति_limit सेट थे। मैं कितना बेवकूफ हूँ! इसे ठीक करने में आपकी मदद के लिए बहुत बहुत धन्यवाद :) – user1227914
@ user1227914 ग्रेट!साथ ही, कोड के नीचे अपना नवीनतम संपादन देखें जो बताता है कि मुझे क्यों लगता है कि आपकी रैम इतनी ज्यादा खाई जा रही है और 'php.ini' को समायोजित करते समय इस तरह के मामले के लिए एक अच्छा विचार नहीं हो सकता है। – JakeGould
यह समझ में आता है और मैं आपके सुझावों को लागू करूंगा। वास्तव में उपयोगी उत्तर के लिए बहुत बहुत धन्यवाद :) – user1227914