PHP 无法上传大于 ~ 6500 像素的图片(文件大小无关紧要)

PHP cannot upload images bigger than ~ 6500px (the size of the file doesn't matter)

我正在为我的项目使用 XAMPP。我正在尝试上传非常大的图片,但我注意到它不适用于所有图片。

尝试了几次之后,我得出的结论是分辨率高于 6500px 宽度的图片无法上传。

我还发现文件大小似乎并不重要,因为分辨率超过 6500px 的 1.4MB 图片不会上传,但另一个 4.8MB 但分辨率较小的图片上传没有任何问题。

图片无法上传的原因是分辨率而不是文件大小。

我要显示的唯一代码是上传。然而,它并没有什么特别之处。如前所述,其他图片上传完全没问题,只有分辨率太高的图片不行。

php代码:

move_uploaded_file($imageUploadFile, $taget_original)

php.ini

post_max_size=10000M
upload_max_filesize=10000M

这个问题有什么解决办法吗?我是否需要指定要上传高分辨率图像的位置?

这非常重要,因为我希望能够上传 8k 到 16k 的图像。目前这不起作用,即使文件大小应该足够小,由于某种原因它不会上传图像。

有几个地方可能会失败:

  • 网络服务器允许的 size of the POST(它是 base 64 编码因此大于文件大小)
  • 网络服务器允许客户端发出请求的time limit
  • PHP
  • 允许的max upload size
  • PHP 中可用于加载和处理图像的内存(假设您做的不是 move_uplaoded_file()

除最后一条外,与图片尺寸无关

我不会查看上传大小部门,而是查看(允许的)内存大小部门(例如 memory_limit. I bet you're using ImageMagick 或实际上 做某事 图片。

另请参阅 here and here. Just make sure you read the documentation,因为值应该以字节而不是兆字节为单位指定(另请参阅对这些答案的评论)。

我会尝试类似的方法:

$limit = 2 * (1024 * 1024 * 1024); // 2Gb

// set memory limit
ini_set(‘memory_limit’, $limit);  // For testing purposes you could try -1 (for unlimited) instead of $limit
// pixel cache max size
IMagick::setResourceLimit(imagick::RESOURCETYPE_MEMORY, $limit);
// maximum amount of memory map to allocate for the pixel cache
IMagick::setResourceLimit(imagick::RESOURCETYPE_MAP, $limit);

实际 限制应该是多少我想必须通过反复试验才能找到,当然也取决于可用内存量。如果您使用的是共享主机,那么这可能(或:很可能 )成为一个问题。

我以后也遇到过类似的情况。相当奇怪的解决方案,但它对我有用。

尝试用 MB 指定大小,而不是 M

upload_max_filesize = 256MB
post_max_size = 256MB

应该可以。如果不是,请尝试增加 memory_limit

希望对你有帮助

一些更新:

我稍微研究了一下我的 javascript 编程,发现了一些有趣的非工作实现。

看来这都是客户端问题.. 或者至少我认为是。由于某些原因,我的 onprogress 函数无法正常工作。我尝试以更大的延迟上传图片,有时这成功了..其他时候却没有。

我不太确定是不是客户端问题导致了这一切。我可能只需要解决前端问题并希望支持的问题自行解决。

无论哪种方式,我都会在尝试解决所有问题后立即更新此问题。