我有一個腳本上傳圖像,並根據方向旋轉它們,我遇到的問題是,當上傳具有EXIF標記的圖像時,出現錯誤:PHP允許內存大小用盡圖像上傳輪轉
用盡33554432個字節允許的內存大小(試圖分配 10368字節。
然後它指的是在錯誤日誌行。
我沒有通知這隻有在具有EXIF標籤的圖像時纔會發生。如果正常的圖像,由Photoshop或上傳的東西上傳,它沒有任何問題。
實際的形象定位代碼如下:
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信息的圖像上。所有其他上傳沒有問題。
什麼可能導致此內存分配問題?
哇,這太奇怪了。因爲實際上我認爲它是一個memory_limit問題,我在php.ini中將其增加到了256MB,但是在看到你的代碼修復了它之後,我再次在php.ini上做了一個grep(我之前沒做過),並注意到有2個不同的memory_limit集。我多麼愚蠢!非常感謝您的幫助,以解決此問題:) – user1227914
@ user1227914太棒了!另外,請查看代碼下方的最新編輯,以解釋爲什麼我認爲你的內存已經被吃掉了,而調整'php.ini'對於這樣的情況可能不是個好主意。 – JakeGould
這是有道理的,我會實施你的建議。非常感謝你真正有用的回覆:) – user1227914