ugrás a tartalomhoz

Érdekes fájlkezelési manőver.

Velias9 · 2008. Aug. 18. (H), 16.47
Sziasztok!

Nemrég történt velem egy érdekes dolog. Egy fájl méretét akartam lekérdezni, mire a PHP egy 'Warning' keretében azt mondta, hogy sikertelen volt a 'stat' futása... Ebből arra következtettem, hogy a 'filesize' függvény a 'stat' függvényt használja. Hát megnéztem a 'stat' fügvénnyel is, de az is hibát dobott.

Röviden tehát a 'dirname' függvény kivételével a PHP szerint a fájl nem létezik. Mondjuk nem próbáltam meg minden függvénnyel, de ezekkel igen: 'filesize', 'file_get_contents', 'file', 'fopen', 'file_exists', 'is_readable' (ez csak egyszerűen 'false' értékkel tért vissza) ...

Az érdekes a történetben az, hogy a fájl elérhető a PHP számára, és ha az 'opendir' és a 'readdir' függvényeket használom, akkor látja. Gondoltam biztos, csak nem olvasható => megnyitottam a php.ini-t és az 'allow_url_fopen' és az 'allow_url_include' értékeket 'On'-ra állítottam, újraindítottam a PHP-t, de semmi.

Windows XP Home Editon, FireFox 2.0.0.16 (Mondjuk ez nem számít :)), Apache és MySQL (Uniform) szerver alatt történt mindez.

A kód így néz ki:
  1. <?php  
  2.   
  3. // Szöveg formátumú adat küldésének beállítása  
  4. header("Content-type: text/plain");  
  5.   
  6. // A visszaküldendo változó lérehozása  
  7. $vissza = "{ ";  
  8.   
  9. foreach($_REQUEST as $kulcs => $ertek)  
  10. {  
  11.     // A fájl méretének kiolvasása  
  12.     $filemeret = filesize(dirname($kulcs) . "\\" . $kulcs);  
  13.   
  14.     // A fáljnév beállítása  
  15.     $kulcs = str_replace(".""{p}"$kulcs);  
  16.     $kulcs = str_replace(":""{k}"$kulcs);  
  17.     $kulcs = str_replace("\\", "{b}", $kulcs);  
  18.     $kulcs = str_replace("/""{s}"$kulcs);  
  19.   
  20.     // Ismeretlen méret esetén 100 KB beállítása  
  21.     if ($filemeret === false)  
  22.     {  
  23.         $filemeret = 102400;  
  24.     }  
  25.   
  26.     // Az eredmény hozzáfuzése az eddigiekhez  
  27.     $vissza .= $kulcs . ": \"" . print_r($filemeret) . "\", ";  
  28. }  
  29.   
  30. // Az üzenet szintaxisának beállítása  
  31. $vissza = substr($vissza, 0, (strlen($vissza) - 2)) . " }";  
  32.   
  33. print($vissza);  
  34.   
  35. ?>  
Nem tudom, hogy mi lehet a baj.

Remélem tudtok segíteni. Ez esetben előre is köszönöm!
 
1

ntfs?

Szekeres Gergő · 2008. Aug. 18. (H), 17.14
Gondoltam biztos, csak nem olvasható => megnyitottam a php.ini-t és az 'allow_url_fopen' és az 'allow_url_include' értékeket 'On'-ra állítottam, újraindítottam a PHP-t, de semmi.


a fájl olvasható a php számára? biztonság fül->szolgáltatások jogait nézd meg.
2

Nincs hozzáférés

Poetro · 2008. Aug. 19. (K), 00.43
Az lehet, hogy a könyvtárlistában látszik, de az nem garantálja, hogy hozzá is tud férni a PHP a filehoz. És mindenképpen, mielőtt bármilyen műveletet végzel egy file-lal nézd meg, hogy is_readable, különben kapod majd a warningokat rendesen.
3

Ezt már néztem és...

Velias9 · 2008. Aug. 23. (Szo), 11.32
... 'false'-al tér vissza.
4

Megvan a gond.

Velias9 · 2008. Aug. 23. (Szo), 11.37
Sziasztok!

A gond az volt, hogy egy 'JS' kód segítségével fűztem hozzá egy 'AJAX' kérés 'URL' címéhez a fájlok neveit "&"-el elválasztva, de a böngésző a pontokat kicserélte egy "_" jelre, tehát az "xy.jpg"-ből "xy_jpg" lett. Ez megmagyarázza, hogy miért adott 'false' értéket a 'file_exists' függvény.

A megoldás az, hogy nem a fájlnevek lettek a kulcsok, hanem azokat átírtam számokra és az értékük lett a fájlnév. Ezzel a módszerrel nem cseréli ki a pontokat.

Minden esetre köszönöm a segítségeteket!