failed to open stream: Příliš dlouhé jméno souboru
- MzK
- Člen | 127
Díky laděnce jsem přišel na další chybu nebo spíše omezení linuxového file systému. Není to úplně chyba nette..
Takže pokud do jména souboru cache ukládáte aktuální URL, pozor na délku názvu. Maximální délka je 255 znaků!
<?php
$key = 'page-'.$_SERVER['REQUEST_URI']; //pozor na delku url
$cache = new Cache(new FileStorage(TEMP_DIR . "/"));
$handle = fopen($cacheFile, 'wb'); // intentionally @ //zde nastane chyba
?>
[<a href=‚function.fopen‘>function.fopen</a>]: failed to open stream: Příliš dlouhé jméno souboru
Takže pokud někdo pozmění url například takto:
domena.tld/?clanek=moc-dlouhy-vyraz zpusobi to chybu..
Nemohl by to framework ošetřovat před tím, než se pokusí takový soubor zapsat? nebo si myslíte, že to je spíše na na programátorovi, aby nedovolil zadat příliš dlouhou URL?
Editoval zacatecnik (8. 7. 2010 20:55)
- kravčo
- Člen | 721
zacatecnik napsal(a):
Díky laděnce jsem přišel na další chybu nebo spíše omezení linuxového file systému. Není to úplně chyba nette..
Limit 255 znakov na názov súboru (presnejšie na komponent v ceste) je pomerne rozšírený, neviaže sa len k linuxovým filesystémom. Má ho takisto napr. NTFS, tá ma navyše štandardne dĺžku celej cesty limitovanú na 260 znakov (a sú spôsoby, ako tento limit obísť, ‚Naming Files, Paths, and Namespaces‘ @ MSDN)
Nemohl by to framework ošetřovat před tím, než se pokusí takový soubor zapsat?
To značí, že by bolo vhodné, aby FileCacheStorage vyhodilo výnimku pre kľúče, ktoré generujú názov súboru dlhší ako 255 znakov.
nebo si myslíte, že to je spíše na na programátorovi, aby nedovolil zadat příliš dlouhou URL?
To by asi nešlo, bez problémov môžeš zadať i url dlhšiu ako 255 znakov a pri veľkých hierarchických štruktúrach v pohode aj reálne používanú…
- David Grudl
- Nette Core | 8228
Tohle bude problém téměř všech úložišť, včetně memcache (limit 250 znaků), databází používajících VARCHAR a samozřejmě souborů.
Řešením by mohlo být klíče interně hashovat md5() už ve třídě Cache.