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:

<?php

// Szöveg formátumú adat küldésének beállítása
header("Content-type: text/plain");

// A visszaküldendo változó lérehozása
$vissza = "{ ";

foreach($_REQUEST as $kulcs => $ertek)
{
	// A fájl méretének kiolvasása
	$filemeret = filesize(dirname($kulcs) . "\\" . $kulcs);

	// A fáljnév beállítása
	$kulcs = str_replace(".", "{p}", $kulcs);
	$kulcs = str_replace(":", "{k}", $kulcs);
	$kulcs = str_replace("\\", "{b}", $kulcs);
	$kulcs = str_replace("/", "{s}", $kulcs);

	// Ismeretlen méret esetén 100 KB beállítása
	if ($filemeret === false)
	{
		$filemeret = 102400;
	}

	// Az eredmény hozzáfuzése az eddigiekhez
	$vissza .= $kulcs . ": \"" . print_r($filemeret) . "\", ";
}

// Az üzenet szintaxisának beállítása
$vissza = substr($vissza, 0, (strlen($vissza) - 2)) . " }";

print($vissza);

?>
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!