php - PHP - 使用 imagecreatefromstring() 耗尽允许的内存大小
问题描述
我正在调查一些允许的内存大小耗尽错误的原因,并将问题追溯到对 PHPs imagecreatefromstring(); 的调用。
如果我运行以下测试脚本
echo "---File 1 (3.2MB)----<br/>";
echo memory_get_usage()."<br/>";
$img = file_get_contents(DOC_ROOT."bad.jpg");
echo memory_get_usage()."<br/>";;
$sourceImage = imagecreatefromstring( $img );
echo memory_get_usage()."<br/>";
unset($img);
imagedestroy($sourceImage);
echo "---File 2 (1.9MB)----<br/>";
echo memory_get_usage()."<br/>";
$img = file_get_contents(DOC_ROOT."good.jpg");
echo memory_get_usage()."<br/>";;
$sourceImage = imagecreatefromstring( $img );
echo memory_get_usage()."<br/>";
我看到以下内容
---File 1 (3.2MB)----
699344
3943512
156474480
---File 2 (1.9MB)----
699480
2600024
39033944
我的 php.ini 内存限制是 128MB。我已经通过增加调用 imagecreatefromstring() 的函数中的内存限制来解决这个问题,使用以下方法:
ini_set('memory_limit', '256M');
我的问题如下:
是否预计从 3.2MB 文件创建图像需要 100+ MB 内存,而 1.9MB 只需要 ~35MB
将内存限制增加到 256MB 是一个坏主意,还是有另一种/更好的解决方案(imagecreatefromstring() 的替代方案等......)?
谢谢!本
解决方案
推荐阅读
- android - Android NestedScrollView 滚动到错误的位置
- php - 如何无一例外地向所有路由注册中间件?
- jquery - 关于jquery counter++ counter--
- apache - 没有http的运行网站显示不同的内容
- ios - 为什么我在不同的应用程序中得到不同的 Locale.current?
- java - 是什么导致 Klout API 出现 403 错误?
- valgrind - 如何使用 Callgrind 分析特定功能?
- java - Java中的switch语句可以将“view”作为参数吗?
- python - 在 GUI 中模拟从一个无限循环到另一个无限循环的键盘按下
- python - Django Angular 文件夹结构来加载角度模板