2

致命的なエラー:行981の/Library/WebServer/Documents/XMLDataStore.class.phpで 134217728 バイトの許容メモリ サイズが使い果たされました (523800 バイトを割り当てようとしました)

このエラーの興味深い点は、トラブルシューティングが簡単なメモリ リークではありません。むしろ、XMLDataStore.class.php が 850 行しかないという事実を、複数のテキスト エディターで確認しました。

これは、Snow Leopard にバンドルされている PHP 5.3 を使用しています。オペコードキャッシュを使用していません。ここに私のphp.iniがあります:

allow_url_fopen = Off
error_reporting = -1
display_errors = 1
display_startup_errors = 1
date.timezone = 'America/Los_Angeles'
output_buffering = Off
realpath_cache_size = 0k

XMLDataStore.class.php は最近リファクタリングされ、以前は 981 行を超えていました。PHP が 2 週間前のバージョンをキャッシュして、それを読み取っているようなものです。ただし、/Library/WebServer/Documents/XMLDataStore.class.php にある現在のバージョンの長さは 850 行しかないことは確かです。

4

6 に答える 6

2

これは改行の問題でしょうか?つまり、PHP インタープリターは、IDE / エディターとは異なる方法で改行しますか? PHP が Linux/Mac/Windows の改行をどのように処理するかはわかりませんが、可能性はあるかもしれません。スクリプトのどこかに致命的なエラーを作成して、表示される行番号を確認できますか?

コードに長すぎる行 (> 65535 文字) があり、行数を混同していませんか?

また、ファイルの名前を変更し、新しい名前で含めるとどうなりますか? これにより、失敗したキャッシュの問題が解決されます。

于 2009-11-29T13:18:50.590 に答える
1

PHP は、macintosh スタイルの行末に問題があるようです。コメントの末尾にある cr はカウントされません。友達のアップルでファイルを開いた後、この問題が発生しました。Linux では kate を使用し、Windows では Crimson Editor を使用して行末を Unix スタイルに戻し、行番号は正常に機能しました。

于 2010-10-29T11:42:23.487 に答える
0

存在しない行でエラーが発生する場合は、PHP がそれをキャッシュしている可能性があります。名前を変更してから実行してみてください。

Snow Leopard については定かではありませんが、私は現在それを使用しており、OS だけでも多くの奇妙なバグがあると言わざるを得ません。

DB にアクセスして情報を配列に格納する前にこのエラーが発生しましたが、DB の大きさを忘れていて、スタックに MB を渡したときにそのエラーが発生して停止しました。状況が似ている場合は、接続などのプロセッサ負荷の高いアプローチを使用し、ライン/ブロック/何かを取得してから戻ってください。すべてを調べるのではなく、すべてを保存してから何かをしてください。

これをチェックしてください: Drupal.org メモリ割り当てエラー

これが役立つことを願っていますが、これがすべてどれほど明確かはわかりません。スクリプトの一部を表示して、何が原因であるかを把握してください。

于 2009-11-28T18:59:31.340 に答える
0

この間違った行カウントの原因はわかりませんが (私は OSX 10.6 でも PHP 5.3 を使用しています。ここでは問題ありません)、スクリプトを小さな部分に分割することで、実際のエラーを絞り込むことができます。そうすれば、エラーの実際の場所を見つけることができるかもしれません。

とにかく、850行のPHPファイルは、何らかのリファクタリングを真剣に使用する可能性があります.

于 2010-04-04T17:53:33.473 に答える
0

ここにいくつかの詳細情報があります。同じバージョンの Snow Leopard を実行している別の Mac で同じコードを試してみました。この Mac は開発にはめったに使用されず、このファイルのバージョンがキャッシュされていません。同じ結果です。

次に、PHP 5.2.8 を実行する Solaris ボックスに同じコードをコピーしてみました。私はまだメモリエラーを受け取ります - もちろん、それは存在するので問題なく予想されます - しかし、PHPエラーメッセージは代わりにこれを言います:

致命的なエラー: 関数の最大ネスト レベル '100' に達しました。中止します! /export/www/htdocs/XMLDataStore.class.php の 741 行目

これは、別のメソッドによって再帰的に呼び出されているメソッドの最初の行であるため、完全に理にかなっています。3 台のマシンすべての同じ SVN リポジトリから同じリビジョン番号でチェックアウトされた、同じ改行 (LF) を持つまったく同じコード。

Snow Leopard の PHP 5.3.0 のバグ? :)

于 2009-12-01T06:25:49.557 に答える
0

私の場合 (php-fpm5 の Ubuntu/Nginix 上の PHP 5.3)、出力のない 500 エラーを引き起こしているスクリプトがありました (本番環境にあるため)。エラー ログを調べると、index.php の 589 行目は 453 行目までしかありませんでした。

すなわち。<?無効になっていて、 <?phpPHP タグを開くために必要でした。

私の場合、ログのエラーは明らかに役に立たなかったため、トラブルシューティングに時間がかかりました。誰かの時間を節約できることを願って、この提案をここに残しておきます。

于 2016-08-18T16:49:14.637 に答える