Unable to write to directory App/Temp

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Ondrej
Člen | 110
+
0
-

Poustim nekolik http pozadavku na Nette aplikaci cronem.
Jednou za cas jeden z pozadavku konci chybou Unable to write to directory App/Temp

https://api.nette.org/…age.php.html#87

Prava jsou samozrejme vsechny nastavene spravne. Webserver pouzivam Lighttpd.

Pri hledani problemu jsem narazil v dokumentaci umask(): „Note: Avoid using this function in multithreaded webservers. It is better to change the file permissions with chmod() after creating the file. Using umask() can lead to unexpected behavior of concurrently running scripts and the webserver itself because they all use the same umask.“

Btw. je nutne testovat zapisovatelnost adresare pri kazdem pozadavku v producnim modu? Neni to ztrata casu? Nebo to alespon cacheovat.

EDIT: tak nakonec je problem v uniqueid(), protoze pri zruseni zavinace pred mkdir() to hlasi warning „File exists“, coz znamena ze oba paralerni procesy vygenerovaly stejne $uniq. Zkusil jsem $uniq = uniqid(rand(), true) a testuju dal… Kazdopadne to je dukaz, ze pokud mkdir selze tak to nemusi znamenat, ze adresar neni zapisovatelny a koncit hned aplikaci vyjimkou.

Editoval Ondrej (20. 11. 2009 20:19)

_Martin_
Generous Backer | 679
+
0
-

Vida. S touhle chybou jsem se setkal v aplikaci ve firemním intranetu. Přikládali jsme ji nějakému bugu v serveru (filesystém, práva, …). A ono to brouček v Nette. A dává to i smysl, ta aplikace tou dobou byla velmi využívána několika uživateli najednou.

David Grudl
Nette Core | 8218
+
0
-

Mělo by pomoci volat uniqid s parametrem $more_entropy, podle zdrojáků PHP se tak do výsledné hodnoty přidá ještě lcg_value, která se počítá i z ID procesu nebo vlákna.

Btw. je nutne testovat zapisovatelnost adresare pri kazdem pozadavku v producnim modu? Neni to ztrata casu? Nebo to alespon cacheovat.

Mělo by stačit nastavit FileStorage::$useDirectories = TRUE