web-dev-qa-db-ja.com

PHPのini_set( "memory_limit")5.3.3がまったく機能しない

私はこれを前に働いていました:

echo ini_get("memory_limit")."\n";
ini_set("memory_limit","256M");
echo ini_get("memory_limit")."\n";

それはこれを入力します:

32M
256M

コマンドラインで実行されるphpスクリプト上。 5.2から5.3に更新しましたが、今からこのディレクティブはまったく機能しません。

32M
32M

そして、致命的なエラーでスクリプトを失敗させます...

私はphpのドキュメントをチェックしてグーグルで検索しましたが、「memory_limit」が廃止されていることはどこにも見当たりませんでした。

誰にも解決策がありますか?

43
Ant

ほとんどの場合、sushosinが更新され、suhosin.memory_limitのデフォルトが無効から0(memory_limitへの更新が許可されない)に変更されました。

Debianでは、/ etc/php5/conf.d/suhosin.iniを変更します

; suhosin.memory_limit = 0

suhosin.memory_limit = 2G

または、どちらの値でも快適です。 Sushosinの変更ログは http://www.hardened-php.net/hphp/changelog.html で見つけることができます。

Memory_limit保護の実装方法を変更しました

24

Suhosin拡張機能を有効にしている場合、スクリプトが開始時または定義済みの上限を超えてメモリ制限を設定することを防ぐことができます。

http://www.hardened-php.net/suhosin/configuration.html#suhosin.memory_limit

26
Oscar M.

以下に、チェックする価値のあるもののリストを示します。

スホシンはインストールされていますか?

ini_set

  • 形式は重要ですini_set('memory_limit', '512'); // DIDN'T WORK ini_set('memory_limit', '512MB'); // DIDN'T WORK ini_set('memory_limit', '512M'); // OK - 512MB ini_set('memory_limit', 512000000); // OK - 512MB

整数が使用される場合、値はバイト単位で測定されます。この FAQ で説明されている短縮表記も使用できます。

http://php.net/manual/en/ini.core.php#ini.memory-limit

  • Php_admin_valueは.htaccessまたはvirtualhostファイルで使用されていますか?

指定されたディレクティブの値を設定します。これは.htaccessファイルでは使用できません。 php_admin_valueで設定されたディレクティブタイプは、.htaccessまたはini_set()でオーバーライドできません。以前に設定した値をクリアするには、値としてnoneを使用します。

http://php.net/manual/en/configuration.changes.php

12
Carlton

私のために働く、PHP 5.3とは何の関係もない。そのような多くのオプションと同様に、safe_modeが有効な場合、ini_set()を介してオーバーライドすることはできません。更新されたphp.iniを確認してください(さらに良いのは、そこのmemory_limitも変更してください)。

4
mario

Ubuntu 10.04にはSuhosinパッチのみが付属しており、構成オプションは提供されません。ただし、php5-suhosinをインストールしてこれを解決できます。

apt-get update
apt-get install php5-suhosin

これで/etc/php5/conf.d/suhosin.iniを編集して設定できます:

suhosin.memory_limit = 1G

次に、ini_setを使用すると、スクリプトで機能します。

ini_set('memory_limit', '256M');
3
Appmerce