it-swarm.dev

ini_set ("memory_limit") w PHP 5.3.3 w ogóle nie działa)

Miałem to wcześniej:

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

Wprowadziłoby to:

32M
256M

na skrypcie php wykonywanym z wiersza poleceń. Zaktualizowałem z 5.2 do 5.3 i od tej pory ta dyrektywa w ogóle nie działa: daje mi to:

32M
32M

a następnie sprawię, że mój skrypt się nie powiedzie z fatalnym błędem ...

Sprawdziłem dokumentację php i przejrzałem ją, i nigdzie nie znalazłem tego, że „memory_limit” było przestarzałe.

Czy ktoś ma rozwiązanie?

43
Ant

Najprawdopodobniej twoja sushosin została zaktualizowana, co zmieniło domyślną wartość suhosin.memory_limit z wyłączonej na 0 (co nie pozwoli na żadne aktualizacje w memory_limit).

W Debianie zmień /etc/php5/conf.d/suhosin.ini

; suhosin.memory_limit = 0

do

suhosin.memory_limit = 2G

Lub dowolną wartość, z którą czujesz się komfortowo. Dziennik zmian Sushosin można znaleźć pod adresem http://www.hardened-php.net/hphp/changelog.html , który mówi:

Zmieniono sposób implementacji ochrony memory_limit

24

Jeśli masz włączone rozszerzenie suhosin, może to uniemożliwić skryptom ustawienie limitu pamięci wykraczającego poza to, co zostało uruchomione, lub zdefiniowane ograniczenie.

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

26
Oscar M.

Oto lista rzeczy, które warto sprawdzić:

Czy Suhosin jest zainstalowany?

ini_set

  • Ważny jest format 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

Gdy używana jest liczba całkowita, wartość jest mierzona w bajtach. Można również zastosować notację skróconą, jak opisano w tym FAQ .

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

  • Czy wartość php_admin_value została użyta w plikach .htaccess lub virtualhost?

Ustawia wartość określonej dyrektywy. Nie można tego użyć w plikach .htaccess. Dowolny typ dyrektywy ustawiony za pomocą php_admin_value nie może zostać zastąpiony przez .htaccess lub ini_set (). Aby wyczyścić poprzednio ustawioną wartość, użyj none jako wartości.

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

12
Carlton

Działa dla mnie, nie ma nic wspólnego z PHP 5.3.). Podobnie jak wiele takich opcji, nie można go zastąpić za pomocą ini_set(), gdy włączony jest tryb bezpieczny. Sprawdź zaktualizowany php.ini (i jeszcze lepiej: zmień tam limit_pamięci).

4
mario

Ubuntu 10.04 jest dostarczany tylko z łatką Suhosin, która nie daje opcji konfiguracji. Ale możesz zainstalować php5-suhosin, aby rozwiązać ten problem:

apt-get update
apt-get install php5-suhosin

Teraz możesz edytować /etc/php5/conf.d/suhosin.ini i ustawić:

suhosin.memory_limit = 1G

Następnie użycie ini_set będzie działało w skrypcie:

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