このファイルは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
ですが、他の操作は実行できません。
あなたのスクリプトは、割り当てが許可されているより多くのメモリを割り当てようとすると、インタプリタによって終了されます。エラーメッセージが生成されますが、PHPインタプリタやスクリプト自体が[error_reporting'](http://php.net/manual/en/function.error-reporting.php)をオフにしている可能性があります。そのため、エラーメッセージは表示されません。エラー報告がオフにならず、エラーを表示しないように設定されていて、 'php_errors.log'にのみ保存するように設定することもできます。 – axiac
読み取り可能な行数またはバイト数に制限はありません。唯一の制限は、['memory_limit'](http://php.net/manual/en/ini.core.php#ini.sect.resource-limits)とプロセスで利用可能なコンピュータメモリの設定値です。使用する変数を管理するためにPHPによって内部的に使用されるデータ構造もメモリを占有し、 'memory_limit'に対して数えられることに注意してください。 – axiac
エラー報告はE_ALL(忘れてしまった、私の投稿を編集した)と** phpに設定されていた。ini **、パラメタ 'display_errors'が' on'に設定されています –