php 调整图片内存大小,php允许内存大小在图像上传轮换时耗尽

你的错误是这样的:

Allowed memory size of 33554432 bytes exhausted (tried to allocate

10368 bytes).

33554432字节转换为32兆字节.所以这一切都意味着PHP在尝试做一些工作时内存不足.

你声称失败的图像有EXIF信息,但这并不是我的原因.无论如何,你的问题的快速解决方案是通过向你的函数添加和连接到memory_limit的ini_set行来增加你的函数的PHP内存

例如,在执行if(function_exists(‘exif_read_data’)){check后,在此处添加它.我将其设置为64M,因为在运行此功能时,它将有效地使脚本内存容量加倍.代码在这里:

function correctImageOrientation($fullpath) {

if (function_exists('exif_read_data')) {

ini_set('memory_limit', '64M');

$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

}

What I am basically trying to achieve is that the rotated image gets

saved in the same place as the original file, basically replacing it.

问题是你在PHP中使用GD库,当PHP将文件加载到系统中时会耗尽内存,并在尝试旋转图像时占用更多内存.

可能有EXIF信息的图像实际上具有比标准72dpi更高的DPI.因此,虽然它们的尺寸可能看起来与没有EXIF信息的另一图像表面相同,但300dpi图像的尺寸实际上比72dpi图像大4倍.这很可能是为什么这些图像失败的原因;不是EXIF信息而是整体DPI.

现在,您还可以通过更改读取为memory_limit = 32M的行来更改php.ini中的内存限制.从技术上讲,这可行.但我不认为这是一个失败的功能脚本的好习惯.

那是因为当您更改php.ini中的设置时,它会增加所有PHP交互的RAM;不只是问题问题.所以你的服务器突然占用了更多用于Apache(运行PHP)的基本功能RAM以及消耗更多RAM的奇怪功能.这意味着如果这个代码每天只被访问几次,那么为什么要为每个PHP进程的32M RAM满意的大服务器负担呢?更好地使用ini_set(‘memory_limit’,’64M’);隔离RAM增加需求就像这样.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值