Zwykle dostawca hostingu ustawia nam php.ini w sposób „uniwersalny”, czyli pasujący teoretycznie wszystkim a praktycznie nikomu. A tu potrzebujemy zmienić coś, ale przecież dostawca nas nie wpuści do swojego /etc!
Co zrobić?
Załóżmy, że naszą domeną jest test.com i jej pliki są na katalogu ~/test.com.
Na początek tworzymy odpowiedni katalog i kopiujemy oryginalny php.ini do siebie.
cd test.com
mkdir cgi-bin
cp /etc/php5/cgi/php.ini cgi-bin/php.ini
Teraz tworzymy plik wrappera
vi ~/test.com/cgi-bin/php-wrapper.cgi
i wklejamy treść
#!/bin/sh
exec /dh/cgi-system/php5.cgi $*
Trzeba jeszcze ustawić odpowiednie prawa dostępu
chmod 755 cgi-bin
chmod 755 ./cgi-bin/php-wrapper.cgi
chmod 640 ./cgi-bin/php.ini
I wskazać serwerowi, że ma pobrać nasz plik php.ini. A by to zrobić należy wpisać te linie w plik ~/test.com/.htaccess :
Options +ExecCGI
AddHandler php5-cgi .php
Action php-cgi /cgi-bin/php-wrapper.cgi
Action php5-cgi /cgi-bin/php-wrapper.cgi
Od tej chwili php powinien pracować według Waszego pliku ini.
Mnie na przykład było to potrzebne do ustawienia timeoutu na zapytania do MySQL. W jednym z moich serwisów niezakończone pytania zamulały PS i żarły pamięć.
Wystarczyło ustawićw pliku php.ini
mysql.connect_timeout = 10
i każde pytanie wiszące dłużej niż 10 sekund jest przerywane. Ponieważ normalnie każda strona jest generowana w czasie poniżej 1 sekundy, 10 sekund sugeruje, że coś się zatkało i nie warto już czekać.
Od razu zużycie pamięci znacząco spadło.
A wystarczyło:
ini_set('max_execution_time','10');
Widocznie miałeś prawa admina na tym serwerze … w ddl2.pl takich praw nie ma nikt i nie da się ściągnąć php.ini ani tym bardziej wydać komendy …
Ależ te komendy można zastąpić odpowiednikami w FTP!
A wzorcowy php.ini można wziąć sobie skądkolwiek. Jak potrzeba, mogę wystawić na serwerze.