PHP コマンドライン スクリプトが php.ini および ini_set('memory_limit',…) ディレクティブを無視する
-
20-09-2019 - |
質問
よくある「致命的なエラー:メモリ不足です (30408704 が割り当てられています) (24 バイトを割り当てようとしました)...」 PHP の致命的なエラー。Apache 経由で提供されるページでは、この動作は見られません。
私は次のことを試しました:
- php.ini のmemory_limit をさらに大きな値に増やします。
- への呼び出しを介してスクリプト自体内のmemory_limitを増やす
ini_set('memory_limit', -1)
,ini_set('memory_limit', '-1')
,ini_set('memory_limit', 100000000)
,ini_set('memory_limit', '128M')
, 、など。 unset()
不要な配列とオブジェクトを収集して、ガベージ コレクターがメモリを解放するように促します。- ウェブホストに連絡しています。彼らは通常、非常に有能で知識が豊富ですが、この問題に関しては私を助けることができませんでした。
- を使用してphp.iniファイルを明示的に含めてみました。
-c
さまざまな値を持つ特定の php.ini ファイルを手動で選択するためのコマンドライン フラグ。 - 生のバイト数と64M、128Mなどの値の両方を使用して、php.iniでmemory_limitを設定しようとしました。
- ホスティング プロバイダーはスクリプトを root として問題なく実行できましたが、root 以外のユーザーを使用してスクリプトを実行すると同じ問題が発生します。おそらく、何らかの権限の問題が関係しているのでしょうか?
何を試してもエラーメッセージは同じです。コマンド ライン スクリプトが変更を無視しているようです。 memory_limit
.
私はスクリプトのメモリ効率を確保しようとする傾向がありますが、現在は大量の HTML を解析する必要があります。 単純な HTML DOM そして、メモリ不足の問題が発生しているのはパーサーです。スクリプトのメモリ使用量を削減するために、次を使用してみました。 DOMドキュメント その代わり。これも役に立ちません。実際、メモリ不足エラーはスクリプト内の別の場所でトリガーされるようになりました。
私の質問:誰かがこれまたは同様の問題を経験しましたか?何かお勧めはありますか?
ありがとう。
解決
これは、問題は、すべてのコマンドラインスクリプトにハードメモリ制限を置いたサーバー上で有効にされたシェルフォーク爆弾の保護によって引き起こされたことが判明しました。これは私の知識がなくても私のWebホストで有効にされていた。
他のヒント
CLI上のあなたのPHPはApacheのPHPに異なるphp.iniのを使用しても良いです。 phpinfo()
を試してみて、あなたはその使用が考えてiniファイルを使用してを確認します。
所属していません StackOverflow