4

一般的な「致命的なエラー:メモリ不足(30408704が割り当てられています)(24バイトを割り当てようとしました)...」PHPの致命的なエラーに直面しています。Apacheを介して提供されるページは、この動作を示していません。

私は次のことを試しました:

  1. php.iniのmemory_limitをはるかに大きな値に増やします。
  2. ini_set('memory_limit', -1)、、、 などini_set('memory_limit', '-1')の 呼び出しを介してスクリプト自体のmemory_limitを増やします。ini_set('memory_limit', 100000000)ini_set('memory_limit', '128M')
  3. unset()不要な配列とオブジェクトを使用して、ガベージコレクターがメモリを解放するように促します。
  4. ウェブホストに連絡しています。彼らは通常、非常に有能で知識が豊富ですが、この問題についても私を助けることができませんでした。
  5. -cコマンドラインフラグを使用してphp.iniファイルを明示的に含めて、さまざまな値を持つ特定のphp.iniファイルを手動で選択してみました。
  6. 生のバイト数と64M、128Mなどの値の両方を使用してphp.iniでmemory_limitを設定してみました。
  7. ホスティングプロバイダーは、問題なくrootとしてスクリプトを実行できましたが、root以外のユーザーを使用してスクリプトを実行した場合と同じ問題が発生します。おそらく、何らかの権限の問題が関係していますか?

私が何をしようとしても、エラーメッセージは同じです。コマンドラインスクリプトがへの変更を無視しているようmemory_limitです。

スクリプトがメモリ効率に優れていることを確認する傾向がありますが、現在、 Simple HTML DOMを介して大量のHTMLを解析する必要があり、メモリ不足の問題が発生しているのはパーサーです。スクリプトのメモリフットプリントを削減するために、代わりにDOMDocumentを使用してみました。これも役に立ちません。実際、メモリ不足エラーはスクリプトの他の場所でトリガーされるようになりました。

私の質問:誰かがこれまたは同様の問題を経験しましたか?何かお勧めはありますか?

ありがとうございました。

4

2 に答える 2

7

この問題は、すべてのコマンドライン スクリプトにハード メモリ制限を設定していたサーバーでシェル フォーク ボム プロテクションが有効になっていることが原因であることが判明しました。これは、私の知らないうちに Web ホストによって有効にされていました。

于 2009-11-19T14:44:22.953 に答える
3

cli 上の PHP は、apache php とは異なる php.ini を使用している可能性があります。試してみてphpinfo()、使用していると思われるiniファイルを使用して確認してください。

于 2009-11-18T19:21:44.893 に答える