2016-07-14 7 views
-1

私はPHPファイルの実行時間に問題があります。まずPHPファイルで何をしたかを教えてください。私はDBからデータを取得するためにクエリを書き込むためにCSVファイルを生成する必要があります。私のクエリは100万レコードを返し、PHPのfwrite()を使用してCSVファイルにデータを書き込んでいます。しかし、私のスクリプト76.481406211853秒は1つのcsvファイルを生成するために撮影された100万のデータが含まれています。どのようにこの実行時間を短縮するには?時々私は致命的なエラーを持っています:PHPの実行時間を短縮する方法と、PHPでini_set()を設定する方法は?

Fatal error: Allowed memory size of 1048576 bytes exhausted (tried to allocate 793601 bytes)

そう、どのように管理するのですか?ここ

PHPコード:

<?php 
// start script 
$time_start = microtime(true); 
echo_memory_usage(); 

//My logic here 

// End of Script 
echo 'Total execution time in seconds: ' . (microtime(true) - $time_start); 
echo_memory_usage(); 

function echo_memory_usage() { 
    $mem_usage = memory_get_usage(true); 

    if ($mem_usage < 1024) 
     echo $mem_usage." bytes"; 
    elseif ($mem_usage < 1048576) 
     echo round($mem_usage/1024,2)." kilobytes"; 
    else 
     echo round($mem_usage/1048576,2)." megabytes"; 

    echo "<br/>"; 
} 
?> 

私の結果は

512 kilobytes //Script start 
1006.25 megabytes // script End 
Total execution time in seconds: 76.481406211853 

し、正常に100万件のレコードを持つCSVファイルを書き込む..ですが、実行時間が長すぎると、いつか致命的なエラーがスローされます。またini_set()を設定する方法も?設定する必要があるのでini_set('memory_limit', '1023M');

私は1023を設定した理由は、スクリプトの実行後のメモリ使用量は1006.25ですから、1023Mを設定する必要がありますか?それは正しい方法ですか?

+0

を明確にするために、10 LAKSが100万を意味するのでしょうか? – Steve

+0

あなたが表示しているコードは、あなたがやっていることをまったく表示していません。「//ここに私のロジックがあります」と表示されます。この問題を解決する最良の方法は、DBを照会&その後、一度に結果セット1行をループ&ファイルにエントリを書き込むことですが、任意の関連するコードを見ることなく、それはに行くことなく、また、それ –

+0

を改善する方法を提案することは難しいです幅広い視聴者OPへ –

答えて

0

通常、あなたのウェブサーバのphp.iniを介して、これを行うだろうが、あなたはこのようにそれをも行うことができます。

ini_set('memory_limit','16M'); 

値は16,32,64は、常に「M」で終わるように指定されていますメガバイト。

それとも制限を削除します。

ini_set("memory_limit",-1); 
+0

にあなたの問題を記述するために英語を使用することをお勧め - - ウィキペディアは、ほとんどの人がここにLAKが何であるかを知ることができません制限を削除する場合は特に、通常は悪い考えであることに注意してくださいスクリプトはすでに1GBのメモリを使用している - これは悪いコーディング/ロジックの指標である&あなたはこれを固定ではなく、あなたのスクリプト無制限のリソースを与えることに焦点を当てるべきです –

1

実行時間は、同じスクリプトの外部接続、DB接続およびループに依存します。スクリプトは 3.スクリプトが実行時間を書き留め

を保存するためのデータを準備しましょうデータを読み聞かせて 1.スクリプトだけで何も 2をやっていないDBへの接続してみましょう:1つのステップ時間あたりやろうどのような場合に障害がどこにあるかをチェックする。

1

オプション1: あなたは、php.iniファイルにmemory_limitを変更することができます。

オプション2: 重量物や低速の接続を使用している可能性があります。 あなたはここでそれをテストすることができ、あなたのコードを向上させたい場合は:

// Code 1 
$start = microtime(true); 

/* Here the code 1 */ 

$timeTotal1 = microtime(true) - $start; 
echo 'Code 1: '. $timeTotal1 .'<br>'; 


// Code 2 
$start = microtime(true); 

/* Here the code 2 */ 

$timeTotal2 = microtime(true) - $start; 
echo 'Code 2: '. $timeTotal2 .'<br>'; 

// Winner 
echo '<b>Winner:</b> '. ($timeTotal1 > $timeTotal2 ? 'Code 2' : 'Code 1'); 
関連する問題