Php PNG上载错误-分配的内存大小错误

Php PNG上载错误-分配的内存大小错误,php,png,image-upload,imagecreatefrompng,Php,Png,Image Upload,Imagecreatefrompng,我正在尝试将图像上载到我正在创建的应用程序中。.png图像在文件系统中约占190KB,分辨率为2000px宽1667px高。我已经为PHP设置了32MB的内存限制。 但当我尝试上传这个.png图像时,我相信很多使用我的应用程序的人都会这么做,我得到了以下错误 Allowed memory size of 33554432 bytes exhausted (tried to allocate 13336000 bytes) 现在当我把这些计算成MB时,我知道它是 Allowed memory s

我正在尝试将图像上载到我正在创建的应用程序中。.png图像在文件系统中约占190KB,分辨率为2000px宽1667px高。我已经为PHP设置了32MB的内存限制。 但当我尝试上传这个.png图像时,我相信很多使用我的应用程序的人都会这么做,我得到了以下错误

Allowed memory size of 33554432 bytes exhausted (tried to allocate 13336000 bytes)
现在当我把这些计算成MB时,我知道它是

Allowed memory size of 32MB exhausted ( tried to allocate 12.71MB )
所以我不明白的是,为什么一个文件系统上显示190KB大小的文件会占用这么多内存空间?是不是关于.png文件在内存中的处理方式我不知道

这是密码

private function optimise_image($source_path, $destination_path){
    list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_path);
    //Using this source path, we'll create a memory instance of the image for processing
    $source_image_ratio = $source_image_width/$source_image_height;
    switch ($source_image_type) {
        case IMAGETYPE_GIF:
            $source_gd_image = imagecreatefromgif($source_path);
            break;
        case IMAGETYPE_JPEG:
            $source_gd_image = imagecreatefromjpeg($source_path);
            break;
        case IMAGETYPE_PNG:
            $source_gd_image = imagecreatefrompng($source_path);
            break;
    }
imagecreatefrompng()中发生错误。我在这里加载图像是为了降低它的分辨率,并设置它的质量以优化观看时的存储和带宽

进一步调查后,我发现文件正在上传,服务器上的文件大小也是190KB。因此,您看到的代码片段是它试图再次提取文件进行处理的地方。在此之前,在这个过程中,没有任何地方可以将文件加载到内存中一次,然后将其保留在内存中而不被销毁(我认为这是会发生的事情)

如果您需要更多信息,请务必询问我,我将尝试相应地回答


提前感谢:)

图像宽度x图像高度x每像素4字节(32位)仅用于imagecreatefrompng/imagecreatefromjpeg

因此,在您的情况下,大约为12MB


这只为GD库和其他PHP进程留下了20MB的内存。

发布一些代码以更好地了解这一点。使用ini_set(“内存限制”,“200M”)设置内存大小,如this@Sundar为什么一个190Kb的图像需要200M?需要在PHP.ini文件中增加PHP的内存限制。你说得对。我想下面的帖子回答了我的一个基本知识缺口(这就是为什么要为一个190KB的文件分配12MB)。。是的,12MB加上其他与php相关的内存使用将导致32MB不足..是的。这就是我一直在寻找的答案。很有趣的一点是,知道如何将所有内容归结为字节和位。谢谢你给了我一个理解的答案。因此,我猜190KB是文件系统上压缩后的文件大小。。另一个我认为与解决方案有关的线索是,每次我打开文件时,我的风扇都会发出短促的嗡嗡声,这对于如此小的文件来说是很奇怪的(而且打开该文件也需要更长的时间)。。再次感谢:)