5 November 2007 - 13:52Too many open files

(24)Too many open files : cannot read directory for multi: /var/www/squirrelmail/

Pokud máte problémy s výše uvedenou chybou, tak problém je v počtu současně otevřených souborů.
Jejich počet zjistíte přes příkaz lsof

bluedot:~# lsof | wc -l
58880

Zkuste přes příkaz ulimit -a zkontrolovat maximální počet otevřených souborů

bluedot:~# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited

Pokud Vám nestačí 1024 otevřených souborů pro jeden proces, nastavte větší hodnotu pomocí

bluedot:~# ulimit -n 2048

Tím by se mělo vše vyřešit, důležité je nastavit ulimit po každém restartu služby, typicky apache – ideální je vložit tento příkaz někam na začátek startovacího scriptu v /etc/init.d

No Comments | Tags: Hosting a housing, PHP

2 July 2007 - 19:09PHP a .htaccess

Pokud beží PHP v safe_modu jsou zákazány nebo omezeny některé funkce jako např set_time_limit.
V tomhle postu bude jenom seznam vlatností které je možné nastavit přes .htaccess při stadartní instalaci PHP se safe_mode ON.

set_time_limit ( int $seconds ), v safe_modu nelze ovlivnit, přes .htaccess ano.

php_value max_execution_time 60

Pokud jsou na serveru zapnuté register_globals lze je vypnout tímto

php_flag register_globals off

Vypnutí magic_quotes lze ovlivnit tímto zápisem do .htaccess i když myslím že to není dobrý nápad z důvodu bezpečnosti.

php_flag magic_quotes_gpc off

Jestliže nepotřebujete zobrazovat chybové hlášky php – vhodné na nasazení na produkční servery

php_flag display_errors off

Pokud při spouštění svých scriptů narazíte na chybu jako Fatal error: Allowed memory size of 12388608 bytes exhausted (Tried to allocate 32584 bytes)

php_value memory_limit “32M”

Povolení uploadu souboru většího než je velikost nastavená v php.ini, v tomto případě lze nahrát soubor až o velikosti 32MB

php_flag file_uploads On
php_value memory_limit 32M
php_value post_max_size 32M
php_value upload_max_filesize 32M

Tohle jsou nejčastěji nastavované položky přes .htaccess z oblasti PHP, ale samozřejmě lze nastavit i další věci.
Pro kompletní seznam se mkněte do manuálu php .
Můžete modifikovat všechny položky označené PHP_INI_PERDIR nebo PHP_INI_ALL

Obecná syntaxe je následující.
php_flag nazev_promene stav pro binární hodnoty (čili ON nebo OFF)
php_value nazev_promene hodnota pro ostatní hodnoty

No Comments | Tags: PHP

1 July 2007 - 4:19PHP allow_url_fopen patch

Provozujete hosting s php4 a chcete dát svým uživatelům volnost v možnosti otvírat vzdálené soubory přes funkci fopen, tak máte v zásadě čtyři možnosti.

- povolíte allow_url_fopen pro všechny v php.ini
- naučíte uživatele používat CURL
- budete používat PHP4.3.5 a starší
- použijete patch a uživatelé si allow_url_fopen povoli přes .htaccess

Bod jedna je špatně, protože php4 nezná rozdíl mezi otvíráním url a includováním url( vývojáři tohle přidali až ve verzi 5.2.0) a tak ohrozíte něčí špatně napsanou aplikaci a potenciálně i server.

CURL se zdá jako dobrá cesta, uživatele není také velký problém přeučit, ale pokud budou používat nějaký open source systém, který s tímto nepočítá, tak máte zase smůlu.

Používat verzi PHP 4.3.5 nebo starší je asi nejhorší řešení.

Když použijete patch tak jediné co se změní je, že direktiva allow_url_fopen bude nastavitelná jak v php.ini, tak i přes .htaccess jako tomu bylo v PHP4.3.5 a nižších verzích.

Patch si můžete stáhnout tady.
http://baz.bluedot.cz/patches/

Patch pro php5.1.2 je k dispozici zde, ale myslím že lepší je přechod na php 5.2.x
http://wiki.ohgaki.net/index.php?PHP%2Fpatch%2Fallow_url_include

3 Comments | Tags: Hosting a housing, PHP