Подтвердить что ты не робот

Ini_set ( "memory_limit" ) в PHP 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

а затем сделать мой script сбойной ошибкой...

Я проверил документацию php и перешел в Google, и я не нашел нигде, что "memory_limit" устарел.

У кого-нибудь есть решение?

4b9b3361

Ответ 1

Скорее всего, ваш sushosin обновлен, который изменил значение по умолчанию suhosin.memory_limit с отключенного на 0 (что не позволит никаких обновлений memory_limit).

В Debian измените /etc/php 5/conf.d/suhosin.ini

; suhosin.memory_limit = 0

to

suhosin.memory_limit = 2G

Или какое удобное для вас значение. Вы можете найти журнал изменений Сушозина в http://www.hardened-php.net/hphp/changelog.html, в котором говорится:

Изменен способ защиты memory_limit

Ответ 2

Если у вас включено расширение suhosin, оно может запретить скриптам устанавливать ограничение на память выше того, с чего оно начиналось, или с определенной крышкой.

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

Ответ 3

Вот список вещей, которые стоит проверить:

Установлен ли Сухосин?

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(). Чтобы очистить ранее установленный значение не используется как значение.

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

Ответ 4

Работает для меня, не имеет ничего общего с PHP 5.3. Так же, как и многие такие опции, он не может быть переопределен через ini_set(), когда safe_mode включен. Проверьте обновленный php.ini (и еще лучше: также измените memory_limit).

Ответ 5

Ubuntu 10.04 поставляется только с патчем Suhosin, который не дает вам параметров конфигурации. Но вы можете установить php5-suhosin, чтобы решить эту проблему:

apt-get update
apt-get install php5-suhosin

Теперь вы можете отредактировать /etc/php 5/conf.d/suhosin.ini и установить:

suhosin.memory_limit = 1G

Затем использование ini_set будет работать в script:

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

Ответ 6

Проведите тест с двумя примерами:

    <?php    
    $memory = (int)ini_get("memory_limit"); // Display your current value in php.ini (for example: 64M)
    echo "original memory: ".$memory."<br>";
    ini_set('memory_limit','128M'); // Try to override the memory limit for this script
    echo "new memory:".$memory;
    }
    // Will display:
    // original memory: 64
    // new memory: 64
    ?>

Приведенный выше пример не работает для переопределения значения memory_limit. Но это будет работать:

    <?php
    $memory = (int)ini_get("memory_limit"); // get the current value
    ini_set('memory_limit','128'); // override the value
    echo "original memory: ".$memory."<br>"; // echo the original value
    $new_memory = (int)ini_get("memory_limit"); // get the new value
    echo "new memory: ".$new_memory;  // echo the new value
    // Will display:
    // original memory: 64
    // new memory: 128
    ?>

Вы должны поместить ini_set('memory_limit','128M'); в верхнюю часть файла или по крайней мере до любого эха.

Что касается меня, suhosin не было решением, потому что оно даже не появляется в моей phpinfo(), но это сработало:

    <?php
    ini_set('memory_limit','2048M'); // set at the top of the file
    (...)
    ?>