0

我遇到了一个有趣的(至少在我看来)问题。

我有一个 PHP 脚本,它应该生成格式(例如,每个图像的绝对定位值,以便它们以逻辑模式彼此相邻显示)和运行时的图像源。完成后,它将从 sql db 加载适当的图像路径,但目前我在这一点上遇到了问题。
目前我的脚本看起来像:

for ($i=0; $i<(866+1+866); $i++){
        for ($j=0; $j<1001; $j++){
            $data .= "<div id=\"tac-".$j."\"><img src=\"default_tactical.png\"/></div>";
        }
    }

如您所见,此时它相当基本,因为我只想测试是否可以将图像放置到位。
这也是我的模板对浏览器简单地 -es 的 $data一个变量。所有这一切的问题是,每当我尝试运行此脚本时,我的服务器就会出现内存不足。echo

所以有什么问题?或者更确切地说:我怎样才能在网页中有很多图像而不会耗尽内存?

4

3 回答 3

1

尝试将其更改为:

for ($i=0; $i<(866+1+866); $i++){
        for ($j=0; $j<1001; $j++){
            echo "<div id=\"tac-".$j."\"><img src=\"default_tactical.png\"/></div>";
        }
    }

它不应该用完内存,因为它不存储任何东西,只是直接输出它。

编辑:由于您无法修改代码,只需尝试在代码中的某处提高内存限制(可以是在循环之前执行的任何 PHP 代码)。

@ini_set("memory_limit", "512M");
于 2013-09-26T19:35:38.140 回答
1

这样看,你有 2 个嵌套循环,并且正在内部构建一个字符串。

866+1+66 = 1733 x 1002 = 17,364,66 iterations

17,364,666 iterations * 40 chars = ~70 megabytes

要么不要一次构建字符串,要么至少将其拆分成块,例如

for ($i = ....) {
   for ($j = ....) {
      ... build string here
   }
   echo $string
   $string = ''; // reset to empty string and start over
}
于 2013-09-26T19:36:47.387 回答
1

虽然你没有回显你的$data,你还没有加载图像,它只是一个字符串。它是导航器,它将在 PHP 处理后加载每个图像。您的 PHP 在服务器和客户端加载图像中执行。这是您的变量 $data 内存不足。

试试这样:

for ($i=0; $i<(866+1+866); $i++){
        for ($j=0; $j<1001; $j++){
            echo "<div id=\"tac-".$j."\"><img src=\"default_tactical.png\"/></div>";
        }
    }
于 2013-09-26T19:37:13.950 回答