ホームページ >バックエンド開発 >PHPチュートリアル >ファイルサイズ制限を超えたエラーを解決する方法_PHP チュートリアル

ファイルサイズ制限を超えたエラーを解決する方法_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:06:201264ブラウズ

昨日、Yii フレームワークを使用して 100 万を超えるデータを DB にエクスポートし、正常に実行するための php スクリプトを作成しました。

しかし、490,000 番目の項目まで実行すると、スクリプトが終了し、「ファイル サイズの制限を超えました」というエラーが表示されたため、Google で調べたところ、特定のファイルのサイズがシステムの制限を超えていることがわかりました。著者の最初の反応は、ログ ファイルがいっぱいだったということでした。 ? ?すぐにログを確認したところ、わずか数十 K であることがわかりました。では、この「大きなファイル」はどこにあるのでしょうか?

分析を開始すると、これは Linux オペレーティング システムの異常な問題であり、フレームワークが鈍いため、以下のファイルのサイズを注意深く確認しました。設定されているすべてのログ パスはすべて小さいので、たとえそうであったとしても無視できます。Yii のデバッグがオフになっているときにも同じ問題が発生しました。

その後、気が変わってスクリプトを再実行すると、450,000 件のレコードが存在するときに、すべてのレコードが無効になっていることがわかりました。それはプロセスに関係していました。スクリプトプロセスの影響を受けるIOを表示することにしました。

1. まず、スクリプト プロセスの を取得します。

2. lsof コマンドを使用して、この PID の IO ステータスを確認します: lsof -p

疑わしいファイル data0/xdebug/cachegrind.out. が見つかりました。スクリプトが実行されると、最終的には予想どおり、xdebug ファイルのサイズも増加しました。この時のファイルサイズは2147483647です! !

はは、とても懐かしい数字、2^31 -1! !

スクリプトの実行時に、システムがサポートできるファイルサイズを超えると、xdebug がスクリプト処理のログを書き込み、記録するようです。

OK、xdebug をオフにしてスクリプトを再実行すると、100 万件を超えるレコードが正常に実行され、完了しました。

追記: 私が使用しているサーバーは 32 ビット システムですが、32 ビット オペレーティング システムではバイナリであるため、保存できる最大データは 111111111111111111111111111111 です。

このため、他の視覚システムに反映される 10 進表記は 2147483647 になります。


http://www.bkjia.com/PHPjc/327621.html

tru​​ehttp://www.bkjia.com/PHPjc/327621.html技術記事昨日、Yii フレームワークを使用して 100 万を超えるデータを DB にエクスポートし、正常に実行するための php スクリプトを作成したところ、問題が発生しました。 しかし、490,000 番目の項目まで実行すると、スクリプトは「...
」というエラーで終了します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。