大量のデータをループするとメモリが超過します。メモリを増やさずにこの問題を解決するにはどうすればよいでしょうか。

PHPz
リリース: 2021-05-25 14:41:03
オリジナル
376227 人が閲覧しました

HTML ファイルを生成するとき、データ量が多かったので、ファイルが生成される前に何度も fopen fwrite fclose を実行すると、メモリを超過したというメッセージが表示されました。
私の HTML 生成方法は、キャッシュに読み取ってからファイルに書き込むことです

ob_start ();		
$temp = ob_get_contents ();		
ob_end_clean ();
ログイン後にコピー
ログイン後にコピー


unset(temp) が機能しません この問題を解決するにはどうすればよいですか?これらの CMS がどのように HTML を生成するのかわかりません。データがどんなに大きくても、メモリを超えることはありません。言ってください

時間内に作業変数を解放する必要がある場合は、その作業を関数に入れて実行し、PHP 独自のリサイクル機構を活用することができます

自分で変数を解放する場合、配列によって占有されるメモリが増加するだけであることに注意してくださいは減らないので、配列の再利用に注意してください




HTMLファイルを生成していますこの時、データ量が多いため、fopen fwrite fcloseを何度も繰り返しており、ファイルはまだ生成されていません、メモリを超過したことを示すメッセージが表示されます。

私の HTML 生成方法は、キャッシュに読み込んでからファイルに書き込むことです

ob_start ();		
$temp = ob_get_contents ();		
ob_end_clean ();
ログイン後にコピー
ログイン後にコピー


unset(temp) も機能しません この問題を解決するにはどうすればよいですか?これらの CMS がどのようにして HTML を生成するのかはわかりません。たとえば、スクリプトを無限ループにする必要がある場合、一定の回数ループするとメモリが制限を超えることはありません。各ループを 100 回制御する方法は?週末休み



HTMLを生成中 ファイル作成時、データ量が多いため、fopen fwrite fcloseを何度も繰り返してもファイルが生成されずにメモリを超えてしまいます。

私の HTML 生成方法は、キャッシュに読み込んでからファイルに書き込むことです

ob_start();		
$temp = ob_get_contents ();		
ob_end_clean ();
ログイン後にコピー

unset(temp) も機能しません この問題を解決するにはどうすればよいですか?これらの CMS がどのようにして HTML を生成するのかはわかりません。たとえば、スクリプトを無限ループにする必要がある場合、一定の回数ループするとメモリが制限を超えることはありません。各ループを 100 回制御するにはどうすればよいですか? メモリを解放するというアイデアは、ページング読み取りを使用して大きなタスクをバッチで実行することです。

追加: register_shutdown_function
各ページが書き込まれた後、ヘッダーの場所は自動的に次のページに移動します。

register_shutdown_function を使用すると、初めてブラウザを開いたときにすぐにブラウザを閉じることができ、自動的に実行されます。

データの最後のページが書き込まれました。これを実行する必要があります: die();


この場合、前のコード

$p = $_GET['p'] * 100;
for($i=$p; $i<$p+100; $i++){	e
cho $i;	echo &#39;<br>&#39;;	
// .....	
// 执行其他操作
}sleep(1);
?>
<script>
var p = GetQueryString(&#39;p&#39;);
p++;var url = window.location.href;
var new_url = url.replace(/\?p=(\d)+/, &#39;&#39;) + &#39;?p=&#39; + p;
window.location.href = new_url;
function GetQueryString(name){     
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");     
var r = window.location.search.substr(1).match(reg);     
if(r!=null)return  unescape(r[2]); return null;}
</script>
ログイン後にコピー
で原理をすぐに理解できます。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!