PHP Zeichenkette aus XML in Textdatei schreiben!

Belee

Lt. Commander
Registriert
Dez. 2006
Beiträge
1.518
Hallo

PHP:
<?php    
 $inhalt = file_get_contents("http://www.xxxxxx.de/123.xml");
 $tagsToReplace=array("<title>","</title>","<name>","</name>");
 $tagsReplaceWith=array("<title><![CDATA[","]]></title>","<name><![CDATA[","]]></name>");
 $inhalt=str_replace($tagsToReplace,$tagsReplaceWith,$inhalt);
 $xml = simplexml_load_string($inhalt);
 echo ".$xml->tracks->track->artist->name." - ".$xml->tracks->track->title.";    
 } else {    
 echo "Currently no Track Information available!";    
 }  
?>

Wie bekomme ich es hin das die echo Ausgaben in eine Textdatei geschrieben werden, sowie dann immer nur geupdated werden?

Danke!
 
PHP:
$fp = fopen('/pfad/zur/datei', 'w');
fwrite($fp, 'Das was du schreiben willst');
fclose($fp);

So kannst du in eine Datei schreiben.

Du könntest das was du mit echo ausgeben willst also in eine Variable legen und die halt einmal ausgeben und einmal in die Datei schreiben.

PHP:
<?php    
 $inhalt = file_get_contents("http://www.xxxxxx.de/123.xml");
 $tagsToReplace=array("<title>","</title>","<name>","</name>");
 $tagsReplaceWith=array("<title><![CDATA[","]]></title>","<name><![CDATA[","]]></name>");
 $inhalt=str_replace($tagsToReplace,$tagsReplaceWith,$inhalt);
 $xml = simplexml_load_string($inhalt);
 $ausgabe = $xml->tracks->track->artist->name." - ".$xml->tracks->track->title;   
 } else {    
 $ausgabe = "Currently no Track Information available!";    
 }
 echo $ausgabe;
 $fp = fopen('/pfad/zur/datei', 'w');
 fwrite($fp, $ausgabe);
 fclose($fp);  
?>
 
Zuletzt bearbeitet:
Belee schrieb:
Soweit war ich schon, das Problem: es wird eine 0 ausgegeben und mehr nicht :(
sieht man auch sofort warum:
Belee schrieb:
PHP:
echo ".$xml->tracks->track->artist->name." - ".$xml->tracks->track->title.";    
 } else {    
 echo "Currently no Track Information available!";    
 }  
?>
+, *, -, / werden nur bei der rechenaufgaben verwendet, . wenn du strings verknüpfen willst. ein echo 'foo' + 'bar' evaluiert z.b. zu 0. weiterhin nutzt du kein if, also is das else obsolet. und am besten du benutzt hochkommas ' ' um strings auswerten zu lassen, denn " " hat gern unvorhergesehene folgen (siehe oben).
 
Das else unten ist schon richtig weil über dem script noch eine andere Abfrage steht, die habe ich nicht gepostet. Es geht ja auch nur um die Sache das die echo Ausgabe die ja korrekt ausgegeben wird, so in eine Textdatei geschrieben wird.

Edit:
Korrigiert und es funktioniert immer noch nicht, jetzt wird zwar keine 0 mehr ausgegeben, dafür aber die komplette Befehlskette also..das steht dann in der Textdatei...

.$xml->tracks->track->artist->name. - .$xml->tracks->track->title.

Darin soll aber das einegtragen werden was echo ausgibt, also das Ergebnis, hat man mich eventuell falsch verstanden?
 
Zuletzt bearbeitet:
Das mit dem if muss nicht stimmen, wir wissen ja nicht was im Code davor so abgeht :>
Das echo würde ich so:

echo $xml->tracks->track->artist->name." - ".$xml->tracks->track->title;

oder so:

echo "$xml->tracks->track->artist->name - $xml->tracks->track->title";

machen.

So wie claW das schon gesagt hat ;)
 
PHP:
<?php    
 function urlfind($link) {
   $ot  = ini_set('default_socket_timeout', 3);
   $ret = (bool) @fopen ($link, 'r');
   ini_set('default_socket_timeout', $ot);
   return $ret;
  }   
 $link = "http://www.laut.fm/user/disco/jetzt.xml";    
 if(urlfind($link)){    
 
 $inhalt = file_get_contents("http://www.laut.fm/user/disco/jetzt.xml");
 $tagsToReplace=array("<title>","</title>","<name>","</name>"); 
 $tagsReplaceWith=array("<title><![CDATA[","]]></title>","<name><![CDATA[","]]></name>"); 
 $inhalt=str_replace($tagsToReplace,$tagsReplaceWith,$inhalt); 
 $xml = simplexml_load_string($inhalt); 
 $ausgabe = '$xml->tracks->track->artist->name - $xml->tracks->track->title';    
 } else {     
 $ausgabe = 'Currently no Track Information available!';     
 } 
 echo $ausgabe; 
 $fp = fopen('datei.txt', 'w'); 
 fwrite($fp, $ausgabe); 
 fclose($fp); 
?>

Das ist das Script, so geändert wie es hier gesagt wurde, die Ausgabe sieht dann so aus: http://www.discoradioaction.eu/teste.php

Wie Ihr seht wird da einfach nur die Befehlskette ausgegeben, ist aber falsch. Da muss der Inhalt :-)
Ich hänge schon paar Stunden dran und verstehe wirklich nicht was und wo der Fehler liegt.

Mit echo kein Thema, wird der Inhalt korrekt ausgegeben.
 
Zuletzt bearbeitet:
Hallo nochmal,

wenn du das ganze in einfache Anführungszeichen (also so: ') steckst, dann werden die Variablen im String nicht ausgewertet.
Machst du das ganze mit normalem Anführungszeichen (also so: "), dann werden die Variablen im String ausgewertet.

Das muss also funktionieren:
$ausgabe = "$xml->tracks->track->artist->name - $xml->tracks->track->title";
 
@stachi..

Deine Variante funktioniert, DANKE.
 
Zuletzt bearbeitet:
PHP:
function urlfind($link) {
	$ot  = ini_set('default_socket_timeout', 3);
	$ret = (bool) @fopen ($link, 'r');
	ini_set('default_socket_timeout', $ot);
	return $ret;
}   
$link = 'http://www.laut.fm/user/disco/jetzt.xml';  
if(urlfind($link)){    
	$inhalt = file_get_contents($link);
	$tagsToReplace = array('<title>','</title>','<name>','</name>');
	$tagsReplaceWith = array('<title><![CDATA[',']]></title>','<name><![CDATA[',']]></name>');
	$inhalt = str_replace($tagsToReplace,$tagsReplaceWith,$inhalt);
	$xml = simplexml_load_string($inhalt);
	$ausgabe = $xml->tracks->track->artist->name.' - '.$xml->tracks->track->title;    
} else {    
	$ausgabe = 'Currently no Track Information available!';    
}
echo $ausgabe;
$fp = fopen('datei.txt', 'w'); 
fwrite($fp, $ausgabe); 
fclose($fp)

So hab ich es grade auf meinem Server getestet. Siehe hier (link entfernt).

Edit: Zu spät:D
 
Zuletzt bearbeitet:
defekt schrieb:
Das muss also funktionieren:
müsse objekte nicht irgendwie so
PHP:
$ausgabe = "{$xml->tracks->track->artist->name} - {$xml->tracks->track->title}";
geschrieben werden? glaub mich daran zu erinnern, dass es dafür noch ne "andere" schreibweise gab, da es eben genau damit nicht funktioniert.
 
So wird aber nur die Befehlskette ausgegeben, so wie von @Stachi.. wird der Inhalt ausgegeben und in die Textdatei geschrieben. Unglaublich, weil ich es ja die ganze Zeit auch immer so gemacht habe wie Du es vorgeschlagen hast, also schon vor dem Tipp :-)

EDIT:
Noch was, wie könnte ich da jetzt noch einen Filter einbauen? also das wenn zB. sowas
vorkommt:

Station ID

das gefiltert wird und stattdesse zB. Currently no Track Information available!
geschrieben wird?

Danke.
 
Zuletzt bearbeitet:
Also so:

PHP:
<?php    
 function urlfind($link) {
   $ot  = ini_set('default_socket_timeout', 3);
   $ret = (bool) @fopen ($link, 'r');
   ini_set('default_socket_timeout', $ot);
   return $ret;
  }   
 $link = "http://www.laut.fm/user/disco/jetzt.xml";    
 if(urlfind($link)){    
 
 $inhalt = file_get_contents("http://www.laut.fm/user/disco/jetzt.xml");
 $tagsToReplace=array("<title>","</title>","<name>","</name>"); 
 $tagsReplaceWith=array("<title><![CDATA[","]]></title>","<name><![CDATA[","]]></name>"); 
 $inhalt=str_replace($tagsToReplace,$tagsReplaceWith,$inhalt); 
 $xml = simplexml_load_string($inhalt); 
 $ausgabe = $xml->tracks->track->artist->name. ' - ' .$xml->tracks->track->title;    
 } else {     
 $ausgabe = 'Currently no Track Information available!';     
 } 
 
if (strstr($ausgabe,'Station ID') { 
    $ausgabe = 'Currently no Track Information available!'; 
}  
 
 echo $ausgabe; 
 $fp = fopen('datei.txt', 'w'); 
 fwrite($fp, $ausgabe); 
 fclose($fp); 
?>
 
Vielen Dank für Deine Hilfe und Zeit die Du dir genommen hast @stachi...
 
Zurück
Oben