2017-08-23 9 views
0

このファイルは1行に1つの単語しか含まれていません。私はそのファイルを開き、すべての行を読み込み、配列に入れて、各単語の出現回数を数えようとしています。PHP関数で読み取ることができる行の最大数はありますか

wartek 
mei_atnz 
sommerray 
swaggyfeed 
yo_bada 
ronnieradke 
… and so on (10M+ lines) 

私はいずれかを実行しようとしているときに私は、ファイルを開いてそのサイズを読んで、偶数ラインとechoブラウザ上のライン(それはもちろん、非常に長いです)、しかしによってラインそれを解析することができます他の操作では、スクリプトは実行を拒否します。エラーなし、警告なし、いいえdie(…)、何もありません。

ファイルへのアクセスは常にOKですが、それは同じ成功で実行されない操作です。私はこれを試してみました、それが働いた...

while(!feof($pointer)) { 
    $row = fgets($pointer); 
    print_r($row); 
} 

を...しかし、これはしませんでした:

も同じ結果と SplFileObjectまたは file($source, FILE_IGNORE_NEW_LINES)と、大きなファイルで大丈夫小型で大丈夫ではない毎回(試してみました
while(!feof($pointer)) { 
    $row = fgets($pointer); 
    array_push($dest, $row); 
} 

ファイル)

問題はサイズ(150ko)ではなく、おそらく長さ(10M +行)であると推測して、私はそれを〜20kに減らして何も改善せずに〜8k行、それは働いた。

また、私は私の一番上にerror_reporting(E_ALL);を設定し、私が持っている可能性がエラーを.Regarding ini_set('memory_limit', '8192M');php.iniので、私のスクリプトで両方の(ほぼ)すべてのメモリ制限をset_time_limit(0);で時間制限を削除または削除スクリプト。

だから、質問は以下のとおりです。

  • 組み込み関数PHPで読み取ることができる行の最大数はありますか?
  • なぜ私はechoまたはprint_rですが、他の操作は実行できません。
+0

あなたのスクリプトは、割り当てが許可されているより多くのメモリを割り当てようとすると、インタプリタによって終了されます。エラーメッセージが生成されますが、PHPインタプリタやスクリプト自体が[error_reporting'](http://php.net/manual/en/function.error-reporting.php)をオフにしている可能性があります。そのため、エラーメッセージは表示されません。エラー報告がオフにならず、エラーを表示しないように設定されていて、 'php_errors.log'にのみ保存するように設定することもできます。 – axiac

+0

読み取り可能な行数またはバイト数に制限はありません。唯一の制限は、['memory_limit'](http://php.net/manual/en/ini.core.php#ini.sect.resource-limits)とプロセスで利用可能なコンピュータメモリの設定値です。使用する変数を管理するためにPHPによって内部的に使用されるデータ構造もメモリを占有し、 'memory_limit'に対して数えられることに注意してください。 – axiac

+0

エラー報告はE_ALL(忘れてしまった、私の投稿を編集した)と** phpに設定されていた。ini **、パラメタ 'display_errors'が' on'に設定されています –

答えて

0

私はあなたが長い実行時間に実行しているかもしれないと思う:

How to increase the execution timeout in php?

異なる操作が異なる時間がかかります。 10Mの新しいデータを1つずつアレイにプッシュするよりも、印刷がずっと簡単になるかもしれません。あなたがエラーメッセージを受け取らないのは奇妙です。どこかで時間を超過したプロセスを受け取るべきです。

+0

私は既にスクリプトの最上位にあるmax_execution_timeを増やしました(そして、私の** php.ini **でも '0'に設定されています)。そして、私は行を表示する以外の何かをするときにプロセスが始まらない –

関連する問題