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>";
        }
    }

ご覧のとおり、この時点ではかなり基本的なものであり、画像を配置できるかどうかをテストしたかっただけです。
また、これは、私のテンプレートが単純にブラウザーに渡す $data変数です。このすべての問題は、このスクリプトを実行しようとするたびにサーバーがメモリ不足になることです。echo

だから問題は何ですか?むしろ、メモリを使い果たすことなく Web ページに多くの画像を含めるにはどうすればよいでしょうか?

4

3 に答える 3

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 に答える
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 に答える