Fopen: Mehrere Zeilen einlesen, einschränken und wiedergeben

Hey, ich bins mal wieder :wink:

Arbeite in letzter Zeit daran eine fremde HTML-Seite auszulesen, einen bestimmten Bereich auszuwählen und den Inhalt des gewählten Bereiches dann wiederzugeben.
Das klappt auch allgemein ganz gut, hier die auszulesende Seite:
http://datensammler.org/index.php?site=download&cat=4&sub=30&id=590

Und die einlesende (meine):
http://releasebase.us/test.php

Wie ihr seht, fehlt die Beschreibung.
Hier mein Code:

// Öffnen der Datei
$url = "http://datensammler.org/index.php?site=download&cat=4&sub=30&id=590";

$file = @fopen ($url,"r");

if (trim($file) == "") {
	echo "Service out of order";
	} else {
	$i=0;
	while (!feof($file)) {

		$zeile[$i] = fgets($file,99999);
		$i++;
	}
	fclose($file);
// Jetzt lese ich folgendermaßen z.B. den Titel aus:
$startstring = "<td background=\"images/bgheading.png\"  height=\"30\" colspan=\"2\" align=\"center\" style=\"text-align:center; font-size:12pt;\"><b>";
$endstring = "<";

$data = array();
for ($j=0; $j<$i; $j++) {
	if ($resa = strstr($zeile[$j],$startstring)) {
		$resb = str_replace($startstring, "", $resa);
		$endstueck = strstr($resb, $endstring);
		array_push($data,str_replace($endstueck,"",$resb));
	}
}

$titel = htmlentities($data[0]);

Warum ich die Beschreibung nicht herausfinden kann ist ersichtlich, und zwar weil der Text auf mehrere Zeilen verteilt ist.
Wie lassen sich mehrere Zeilen auswählen und durchsuchen?

der trick ist es, das ganze überhaupt gar nicht Zeilenweise zu machen, sondern das Dokument als ganzes zu betrachten.
statt fgets() solltest du fread() nutzen

[code]

<?php $url = "http://datensammler.org/index.php?site=download&cat=4&sub=30&id=590"; $file = @fopen($url, "rb"); if(!$file) { die("error"); } $data = ""; while(!feof($file)) { $data .= fread($file, 1024); } //und ab hier einfach mit $data weiter arbeiten ?>[/code]

einfacher wäre es aber sogar noch mit$data = file_get_contents($url);da url-fopen ja scheinbar aktiviert ist :wink:

mit strpos() etc kannst du dann die start und end-positionen der tags ermitteln. und mit substr() kannst du die strings dann heraus schneiden.

[quote]
mit strpos() etc kannst du dann die start und end-positionen der tags ermitteln. und mit substr() kannst du die strings dann heraus schneiden.[/quote]

Mhm kenne mich da leider nich so richtig aus, und mit deinen Links konnte ich mich auch nicht auseinander setzen :neutral_face:

Aber dein Code geht, ich kann das gesamte HTML-Document in eine Variable bringen.
Dann habsch mir gedacht das ich mit preg_match weiterarbeiten kann.

[code] function findinside($start, $end, $string) {
preg_match_all(’/’ . preg_quote($start, ‘/’) . ‘([^.)]+)’. preg_quote($end, ‘/’).’/i’, $string, $m);
return $m[1];
}

$data = "<div class=\"desc_b\" style=\"border-bottom:1px solid #acacac;height:500px;width:310px; border-right:1px solid #acacac;overflow:auto;\"> HARDTOFIND! </div>";

$start = "<div class=\"desc_b\" style=\"border-bottom:1px solid #acacac;height:500px;width:310px; border-right:1px solid #acacac;overflow:auto;\">";
$end = "</div>";

$out = findinside($start, $end, $data);
$beschreibung = $out[0];[/code]

Das Funktioniert auch so weit, es kommt das gewünschte HARDTOFIND! heraus.
Weite ich die Suche nun auf die geöffnete datei aus, kommt nichts heraus :astonished:

Anbei mal das zu durchsuchende…

01. Kool Savas – Was hat S.A.V. da vor?
02. Kool Savas – Butterflys
03. Kool Savas – Black
04. Kool Savas – Futurama (United Nations RMX)
(feat. S.A.S., Ceza, Curse, Greis, Havoc, Kaz Money & Azad)
05. Kool Savas – Charisma RMX (feat. Amar & 40 Glocc)

Dort findet es den Inhalt nicht - mir ist jedoch fraglich warum.

Auch wenn es mit regulären ausdrücken funktioniert, würde ich doch darauf verzichten, wenn es auch andere Möglichkeiten gibt.
Hier ein Beispiel mit strpos() und substr().

[code]<?php
$url = “http://datensammler.org/index.php?site=download&cat=4&sub=30&id=590”;
$data = file_get_contents($url);

$pos1 = strpos($data, ‘<div class=“desc_b”’); //start des div-tags ermitteln
if($pos1 !== false) //gefunden?
{
$startpos = strpos($data, ‘>’, $pos1); //das ende des öffnenden div-tags ermitteln
}
else
{
die(“error 1”);
}

if($startpos !== false)
{
$startpos++; //startposition ist nicht das “>” vom öffnenden div sondern ein zeichen weiter.
$endpos = strpos($data, ‘’, $startpos); //endposition ermitteln
}
else
{
die(“error 2”);
}

// substr( Daten , Startposition , Länge )
$substring = substr($data, $startpos, $endpos-$startpos);

//ausgabe
echo $substring;
?>[/code]

mfg Balmung

Wieso das bitte nicht?

So, aus dem Urlaub zurück :slight_smile:
Danke an Balmung, der Code funktioniert :hail:

der code von Balmung funktioniert bei mir zwar auffem localhost…

aber auf webspace nicht … ich mach doch irgendwas falsch und
daran verzweifel ich

browser sagt:

Warning: file_get_contents() [function.file-get-contents]: http:// wrapper is disabled in the server configuration by allow_url_fopen=0