Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: tiedostojen luku

Sivun loppuun

Flatologi [27.12.2009 18:08:27]

#

Tarkoitus olisi liittää sivuille sanastoa, joka koostuisi .htm- ja/tai .txt-tiedostoista ja niitä olisi useammassa alihakemistossa. Sivuille pitäisi tulostua tiedoston nimi otsikkona (ja aakkosjärjestyksessä) ja itse teksti. Olen onnistunut saamaan kaikki tiedostot tulostumaan, mutta ne on kaikki yhdessä pötkössä ja ilman niitä kaivattuja otsikoita. Koodin muokkaaminen on tuottanut lähinnä erroria kehiin, joten pakko kysyä viisaammilta ;-)

txt-tiedostojen kanssa tule hieman ongelmia ulkoasun kohdalla, joten ehkä htm olisi parempi kun muotoilun voi tehdä itse tiedostossa haluamakseen. Vai kuinka?

Antti Laaksonen [27.12.2009 21:38:15]

#

Miltä näyttää koodin kohta, joka tulostaa yhden tiedoston sivulle?

Flatologi [28.12.2009 11:42:33]

#

Tällä sain tulostettua kaikki tiedostot yhtenä pötkönä.

<?php
$nimi = "tiedosto.txt";
$tiedot = file_get_contents($nimi);
echo "<h4>$nimi</h4>";
echo "<p>$tiedot</p>";
?>

Tällä saa tietyn tiedoston tulostumaan. Vielä pitäisi saada "tiedosto.txt" tulostumaan "Tiedosto" (kaikki tiedostot ilman päätettä ja isolla alkukirjaimella) ja teksti tulostumaan kappaleittain. <pre> tagilla ei tule toivottua lopputulosta.

Metabolix [28.12.2009 12:27:00]

#

<?php
function tulosta($tiedosto) {
  $data = htmlspecialchars(trim(file_get_contents($tiedosto)));
  $data = str_replace(array("\r\n", "\r"), "\n", $data);
  $data = str_replace("\n\n", "</p><p>", $data);
  $data = str_replace("\n", "<br />", $data);
  $otsikko = htmlspecialchars(ucfirst(basename($tiedosto, '.txt')));
  echo "<h4>", $otsikko, "</h4>\n";
  echo "<p>", $data, "</p>\n";
}
tulosta("koe.txt");
Tässä on kokeilu, jossa on monta kappaletta.

Kappaleen sisällä voi olla rivityksiä,
jos se on jostain syystä tarpeen.
<h4>Koe</h4>
<p>Tässä on kokeilu, jossa on monta kappaletta.</p><p>Kappaleen sisällä voi olla rivityksiä,<br />jos se on jostain syystä tarpeen.</p>

Flatologi [28.12.2009 13:17:42]

#

Tuolla sain tulosumaan juuri niin kuin pitikin.
Vielä pitäisi saada tulostettua useammasta tiedostosta.

Metabolix [28.12.2009 13:25:48]

#

Onneksesi minulla sattuu olemaan tallessa valmis rekursiivinen glob-funktio.

<?php
function glob_rek($hakemisto) {
	// UNIXien piilotiedostot (.*) eivät näy jälkimmäisellä haulla.
	$x = glob("$hakemisto/.*");
	$y = glob("$hakemisto/*");

	// Tyhjät hakemistot palauttavat falsen eivätkä taulukkoa.
	if (!$x) $x = array();
	if (!$y) $y = array();

	// Tutkitaan tulokset.
	foreach (array_merge($x, $y) as $polku) {
		$nimi = basename($polku);
		if ($nimi == '.' || $nimi == '..') continue;
		if (is_dir($polku)) {
			glob_rek($polku);
		} else {
			// Tulostus tänne. ($polku)
			// Voit tarkistaa vielä tiedostopäätteen.
			echo "$polku\n";
		}
	}
}
// Käydään läpi hakemisto "tiedot".
glob_rek("tiedot");

(Edit: nimiä selvennetty.)

Flatologi [28.12.2009 15:42:18]

#

Öh.. en saanut tolla mitään... Joutunee vääntää rautalangasta :(

Flatologi [29.12.2009 20:25:00]

#

Jaahas... ottaa pään käteen ja miettii vähän... toimiihan se :)
Ei ihan kuitenkaan sitä mitä etsin, mutta tosta sen kaiketi saan väännettyä?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta