5

最近、メモリ割り当ての問題に遭遇したので、ini_set('memory_limit', value);値を段階的に入力しようとしたディレクティブを試し始めました。さて、ウェブ(およびSO)を検索すると-1value. それで、私はそうしました、そして今、スクリプトは壊れることなく最後まで完全に実行されます(以前はメモリ割り当てエラーが発生していました)。

しかし、私が理解できないのは、スクリプトのファイルの最後に次の 2 行があることです。

$mem = memory_get_peak_usage(true);         
echo "Peak mem. usage: <b>" . round($mem / 1024 / 10124, 2) . "</b> MB";

10.8MBを生成します。これを調べると、次の/var/log/messages行が表示されます。

Nov 21 13:52:26 mail suhosin[1153]: ALERT-SIMULATION - script tried to increase  
memory_limit to 4294967295 bytes which is above the allowed value (attacker  
'xx.xxx.xxx.xxx', file '/var/www/html/file.php', line 5)

これは、スクリプトが 4096MB を割り当てようとしたことを意味します

どうすればいいの?また、私が最も興味を持ったのは、この場合、スクリプトの実行が停止しなかった理由です。のせいini_set('memory_limit', '-1');ですか?-1つまり、推奨されてvalueいないので、スクリプトのどこに問題があるのか​​ (メモリ内で一度に大量のデータを読み込んでいる)を知っているので、そのパッティングを読みました。これらのデータの違いに困惑しているだけなので、誰かがそれを明らかにしてくれるとありがたい.

4

6 に答える 6

2

これは、suhosin パッチが独自の「ハード」最大メモリ制限を使用しているためsuhosin.memory_limitです。

構成リファレンスから:

Suhosin [...] は、このオプションが 0 のままの場合、スクリプトが で開始しmemory_limitた値より大きい値に設定することを禁止します。

つまり、memory_limitsuhosin の上限よりも大きくなるように を変更すると、疑わしいことをしようとしている「攻撃者」であると見なされます。

于 2013-12-21T09:28:36.407 に答える
0

10MBを使用したと思いますが-1valueスクリプトで使用可能な最大メモリを使用できるようにすることで、たとえば4GB

于 2012-11-22T09:49:05.553 に答える
0

ここで説明するように:http://www.hardened-php.net/suhosin/configuration.html#suhosin.memory_limit

Suhosinでは、スクリプトが開始した値よりも大きな値を設定することはできません。

suhosin.memory_limit4096に設定すると、このアラートを受け取ることなくメモリ使用量を増やすことができます

私の推測では、スクリプトは4096MBを割り当てようとはしませんでしたが、php サーバーが実行されている32 ビット システムのアドレス指定可能な最大メモリ制限が2^32であることを示す shuosin の間違ったアラートです。

これがあなたの疑問に答えることを願っています

于 2013-12-23T13:06:01.817 に答える
0

を使用しini_set('memory_limit', '-1');ても、スクリプトに制限は設定されません。もちろん、ハードウェアに制限されますが、マニュアルからです。

メモリ制限をなくすには、このディレクティブを -1 に設定してください。

私が最も興味を持ったのは、この場合、スクリプトの実行が停止しなかった理由です。

に設定されているため、最大メモリ制限に達しなかったため、スクリプトは実行を停止しませんでした-1

于 2013-12-20T16:50:04.200 に答える
0
$mem / 1024 / 10124

する必要があります

$mem / 1024 / 1024

つまり、100 MB のピークについて話しているのです。

それから4,294,967,295 = 4 GB。あなたが持っているのはそれだけだと思います(つまり、-1)。

これは、これらの出力メッセージが互いに何の関係もないことを意味します。警告を消したい場合は、Suhosin のメモリ制限を PHP のメモリ制限より高く設定するか、Suhosin を無効にします。

Suhosin にはと思われるシミュレーション モードONがあります。これがオンになっている場合OFF、ALERT はスクリプトを停止する必要があります。

于 2013-12-24T00:51:48.047 に答える
0

memory_get_peak_usage — PHP によって割り当てられたメモリのピークを返します。

memory_limit - 最大メモリ割り当てを増やす

<?php 
if(ini_set('memory_limit', '-1'))
{
    echo "memory_limit set to -1B";
}
else
{
    echo "ini_set() failed!"
}
?>
于 2013-12-21T09:10:25.680 に答える