ugrás a tartalomhoz

Fájl tartalmának kiíratása

Pacalka · 2004. Júl. 26. (H), 21.45
Szeretnék létrehozni egy olyan oldalt, amelyik fájlokból olvas ki szöveget és mindegyik fájl tartalmát egy külön táblázatban írja ki.
El is készítettem a kódot ami a következőképpen néz ki:
<?php
$kvtnev = "kozlemenyek";
$kvt = opendir($kvtnev) or mkdir("kozlemenyek");
$szamlalo=0;
while (gettype($fajl = readdir($kvt))!='boolean') {
if (is_file("$kvtnev/$fajl"))
++$szamlalo;
$szam = $szamlalo -1;
$fajlnevek[] = "$kvtnev/$szam".".txt";
}
$fnevek = array_shift($fajlnevek);
$fnevek = array_shift($fajlnevek);
foreach($fajlnevek as $fajlnev) {
$fa = fopen($fajlnev, "r");
while(!feof($fa)) {
$meret = filesize($fajlnev);
print ("<table width=517 height=99 border=1 cellpadding=0 cellspacing=0 bordercolor=#FFFFFF><tr> <th width=517 height=30 align=left valign=middle background=kepek/fejlec.png>");
$ido=date("Y.m.d. H:i", filemtime($fajlnev));
print ("$ido");
$szoveg = fread($fa, $meret);
print "</th></tr><tr><td width=517>$szoveg</td> </tr></table>";

}
}
closedir($kvt);
?>

A probléma a következő, a fájlok tartalmát megjeleníti külön külön egy-egy táblázatban, de mindegyik után kiír egy üres táblázatot is. Tehát egy szöveges kocka, egy üres váltakozik. Ha az fread helyett az fgets függvényt használom, akkor minden sort külön táblázatban jelenít meg és nem ír ki üreset, ami csak azért nem jó mert így egy fájl tartalma feldarabolódik és soronként külön táblázatban jelenik meg de ettől a függvénytől nagyjából ezt is vártam. Csak azt nem értem, hogy az fread függvény miért ír ki üres táblázatokat nekem.
 
1

Közben magam is keresgélem

Pacalka · 2004. Júl. 26. (H), 22.52
Közben magam is keresgélem a probléma okát. Arra már rájöttem, hogy ha a $szoveg = fread($fa, $meret); -nél a $meret -hez hozzáadok még mondjuk 1-et azaz ezt írom be hogy $szoveg = fread($fa, $meret+1), akkor nem ír ki minden szöveget tartalmazó táblázat után még egy üreset is. De hát mi a fene ez a plussz 1 bájt amit még hozzá kell adnom a valós mérethez. Persze lehet, hogy ez triviális, de még nagyon kezdő vagyok ebben a témában, ezért elmagyarázhatná valaki a leányzó fekvését.
2

Egy ötlet

LeslieNice · 2004. Júl. 27. (K), 12.25
Hello, a probléma az lehet hogy így nem olvasod be az EOF jelet, ezért oldódik meg a
$szoveg = fread($fa, $meret + 1);
változtatással a probléma.
3

Szia! Eloszor is figylemed

Hodicska Gergely · 2004. Júl. 27. (K), 12.51
Szia!

Eloszor is figylemedbe ajanlom a colorer BBCode-ot, hasznalataval konnyebb lesz a tobbieknek olvasni a kodod.

Nem ertem, hogy miert van szukseged a masodik while ciklusra, ha mar ugyis egyben olvasod be az egesz file-t. Amugy erre egy egyszerubb megoldas a file_get_contents("file_neve") fuggveny hasznalata, vagy ha ez nincs a PHP verziodban, akkor implode("", file("file_neve"));

Es kar eltarolni a fileneveket egy tombe, lehet a kiiratas azon a cikluson belul:

<?php
$dirName = "kozlemenyek";
$dir = dir($dirName);
while (false !== ($entry = $dir->read())) {
    // Feltetelezve, hogy nincs .-tal kezdodo filenev
    if ($entry{0} != '.') {
        echo '<table width=517 height=99 border=1 cellpadding=0
              cellspacing=0 bordercolor=#FFFFFF><tr><th width=517 height=30
              align=left valign=middle background=kepek/fejlec.png>';
        echo date("Y.m.d. H:i", filemtime($dirName.'/'.$entry));
        echo '</th></tr><tr><tdwidth=517>'.
             file_get_contents($dirName.'/'.$entry).
             '</td></tr></table>';
    }
}
?>
Hiba ellenorzes meg kellhet bele, de mar hazi feladat. Ja es HTML attributumokat erdemes lehet "" koze tenni.

Felho
4

Köszönöm a segítséget.

Pacalka · 2004. Júl. 27. (K), 18.56
Köszönöm a segítséget.
Hogy miért ezt a megoldást választottam, amit leírtam, arra csak annyi mentségem van, hogy a php alapjaival, meg úgy általában a programozással még csak most ismerkedem, így annyit használok belőle amennyiről már olvastam azt is néha rosszul. De most legalább tanultam pár új dolgot. Igaz már annak is örültem, hogy magamtól sikerült működőképessé tenni a kódot.