webForumDet fria alternativet

Filhantering, fgets, begränsning

PHPur PHP

5 svar · 537 visningar · startad av NeoBlizz

NeoBlizzMedlem sedan jan. 200351 inlägg
Frågan#1

Sitter här och klurar på hur jag ska kunna begränsa en inläsning från en textfil.

<?
$file = @fopen("text.txt", "r")
	or die("File not found");

while (!feof($file)) {
	$data = fgets($file);
		$info = split("[|]", $data);
?>
<img src="img/data/<?=$info[0]?>" width="248" height="193" alt="<?=$info[1]?>"/>
<?
}
fclose($file);
?>

Med denna kodsnutt, läses ju alla rader från filen in och skriver ut tillhörande bild.

Det jag vill göra nu är att begränsa vilka rader som skall användas, med hjälp av ?show=X i adressfältet, där X är en siffra.

Varje "sida" får max innehålla 12 st utskrivna data.

Om ?show=0 (eller ?show=X inte finns alls i adressfältet) skall de 12 första raderna i text.txt läsas in och inga fler.
Om ?show=12 skall de 12 första raderna i text.txt ignoreras och rad 13 och 12 rader framåt skrivas ut.
Om ?show=24 skall de 24 första raderna i text.txt ignoreras och rad 24 och 12 rader framåt skrivas ut.

Osv. osv.

Har försökt en hel del, men är inte speciellt haj på filhantering (brukar mest köra mysql) men kan tyvärr i detta fall inte köra mysql, och måste anv. vanlig fil för ändamålet.

Någon som har förslag?

Fredde Mannens avatarFredde MannenMedlem sedan nov. 20014 054 inlägg
#2

Man kan ju, vet inte hur optimalt det är, det är att man läser in textdokumentet i en array, rad per rad.

ett dokument med 100 rader, blir en array med 100 items... kan vara lättare ..

SPiNMedlem sedan mars 20007 896 inlägg
#3

Det du kan göra är att läsa in hela textinnehållet med file_get_contents(), sedan dela upp filen på varje radbrytning till en array och loopa ut de index som är aktuella.

Typ:

$contents = file_get_contents("text.txt");
$arrayOfContents = explode('\n', $contents);

$i = 0;
if(isset($_GET["show"]) && intval($_GET["show"]) > 0)
     $i = intval($_GET["show"]);

for($i; $i < ($i + 12); $i++) {
     echo "Bild " . $arrayOfContents[$i];
}

Ett enkelt exempel. Du bör även lägga in en boundary-kontroll så att index inte överskrider antalet element i arrayen, osv.

Eller så lägger du enkelt till en räknare i din existerande loop, som börjar utskrivning vid aktuellt värde på räknaren och sedan bryter loopen när räknaren har ökats med 12.

stevenetMedlem sedan juni 20001 251 inlägg
#4

SPiN skrev:

Det du kan göra är att läsa in hela textinnehållet med file_get_contents(), sedan dela upp filen på varje radbrytning till en array och loopa ut de index som är aktuella.

Eller använd https://www.php.net/file

SPiNMedlem sedan mars 20007 896 inlägg
#5

Jag tänkte väl att det fanns en sån funktion, hittade den inte i minnet bara :)

NeoBlizzMedlem sedan jan. 200351 inlägg
#6

Tack, ska kolla genom era förslag och hoppas det löser sig =)

135 ms totalt · 3 externa anrop · v20260731065814-full.58439ac5
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)