vertracktes Problem mit Pfad bei fopen

Spelmann

Erfahrenes Mitglied
Hallo.

Folgendes Problem.
Ich habe zwei Textdateien.
1. navi.txt
2. Datei soundso.txt

navi.txt enthält eine zeilenweise Linkliste mit HTML TAGs die in Flash verarbeitet werden und so aussehen:
HTML:
<a href='asfunction:load_file,Datei soundso'><u>Datei soundso</u></a><br>
Da insbesondere der <a href> Tag ausserhalb vom AS in Flash keinen Sinn macht, sollen alle HTML TAGs
ignoriert und ausgeblendet werden.

PHP:
$fp = fopen("navi.txt","r");
$zeile[] = fgets (strip_tags($fp,100)); //strip_tags() unterbindet das HTML im String
echo strip_tags($zeile[0]);
Das Ergebnis von echo ist wie gewünscht der String: Datei soundso
Die HTML TAGs werden weder angezeigt noch ausgeführt.

Nun möchte ich aber mit Hilfe dieser Auswahl das zum Eintrag gehörige Textfile auslesen.
PHP:
$fp_neu = fopen(strip_tags($zeile[0]).".txt","r");
Aber genau das funktioniert nicht. Obwohl wie oben zu sehen die Variable:
strip_tags($navi) dem String "Datei soundso" entspricht und demnach die Zeile doch so interpretiert werden müsste:
PHP:
$fp_neu = fopen("Datei soundso.txt,"r");
bekomme ich eine Fehlermeldung die ich nicht verstehe.

Code:
Warning: file(Datei soundso): failed to open stream: No such file or directory in /mnt/be2/03/753/00000012/htdocs/min_test/aktuelles/x_fopen_problem/senden.php on line 13

Weis jemand wie man das richtig schreibt?
 
Zuletzt bearbeitet:
Eigentlich sollte doch schon am Syntax-Highlighting zu erkennen sein was hier
PHP:
$fp_neu = fopen("Datei soundso.txt,"r");
falsch ist.
Es fehlt vor dem Komma das schliessende Paar Anfuehrungsstriche.
Es muss also so
PHP:
$fp_neu = fopen("Datei soundso.txt","r");
aussehen.
 
Hallo!

Ich würde nach Möglichkeit auch auf Leerzeichen verzichten..... die könnten evtl. Probleme bereiten.
Nimm statt dessen lieber das "_" Zeichen..... in Deinem Beispiel also Datei_soundso.txt.

Gruss Dr Dau
 
@Dennis Wronka
Danke für den Hinweis. War aber nur ein Flüchtigkeitsfehler im Beispiel, der nichts mit meinem eigentlichen Problem zu tun hat. Im Prinzip funktioniert das Skipt ja so wie ich es mir gedacht hab. Jedenfalls in der Miniversion hier. Nur im eigentlichen Projekt hakelts noch.

@ Dr Dau.
Das mit den Leerzeichen gefällt mir selbst nicht. Der User schreibt den Titel eines zu speichernden Artikels in ein Textfeld und die Textdatei soll unter diesem Titel abgespeichert werden.
Gibt es denn vielleicht eine Möglichkeit Leerstellen automatisch mit Unterstrichen füllen zu lassen?

Danke euch Beiden.
 
Hi,
die Möglichkeit gibt es:

PHP:
$suchen[0] = " ";
$ersetzen[0] = "_";
$textneu = str_ireplace($suchen, $ersetzen, $text);

schiese
 
Hmm, keine Ahnung ob es eleganter geht.
Aber ich würde es mit str_replace() machen.
Dazu würde ich den Titel in einem seperaten <input type="text"> angeben lassen.
Allerdings würde ich str_replace() auch nur auf Datei-/Verzeichnisebene ansetzen..... in der Datei selbst lässt Du die Funktion also weg.

Ich habe es jetzt nicht probiert, aber ich meine so müsste es funktionieren:
PHP:
$fp_neu = fopen(str_replace(" ", "_", $_POST['titel']).".txt", "r");
 
Ich komme nicht weiter und bin so langsam echt am verzweifeln. :confused:
Ich habe mein skript jetzt nochmal aufs nötigste zusammengestaucht um mein Problem zu schildern und hoffe sehr, daß mir jemand helfen kann.

Ich habe also eine Datei navi.txt
Ihr Inhalt ist:
Code:
navi=
<a href='asfunction:load_file,texte/aktuelles/Das_ist_die_Datei_1'><u>Das_ist_die_Datei_1</u></a><br>
<a href='asfunction:load_file,texte/aktuelles/Die_zweite_Datei'><u>Die_zweite_Datei</u></a><br>
<a href='asfunction:load_file,texte/aktuelles/Datei_Nummer_3'><u>Datei_Nummer_3</u></a><br>

Folgendes Skript funktioniert nur wenn $zeile[x] die jeweils letze Zeile in navi.txt anspricht.
Im Augenblick also bei:
PHP:
<?
$navi = fopen("texte/aktuelles/navi.txt","r");
	while(!feof($navi))
    {
	$read=fgets($navi,1000);	
	$zeile[] = $read;
	}
	echo strip_tags($zeile[3]);
	$artikel = fopen("texte/aktuelles/".strip_tags($zeile[3]).".txt","r");
	$content = fread($artikel,5000);
	echo "<br>".$content;			
?>
bei $zeile[0] bis $zeile[2] Bekomme ich die Fehlermeldung das die zu öffnende Datei nicht existiert.

Warning: fopen(texte/aktuelles/Die_zweite_Datei.txt): failed to open stream: No such file or directory in /mnt/be2/03/753/00000012/htdocs/min_test/aktuelles/edit.php on line 9

Wohl bemerkt, die Pfade zu den Dateien stimmen ja. Wenn ich aus navi.txt die letzte Zeile lösche wird das Sript nur noch mit der Variablen $zeile[2] fehlerlos ausgeführt und so weiter.

Ich bitte um Hilfe.
 
Mir wurde geholfen.
Das Problem besteht darin, daß der Zeilenumbruch in navi.txt im Rückgabewert enthalten ist.
Da es in der jeweils letzten Zeile keinen Umbruch gibt, gab nur es da keine Probleme.
Also muß der fopen() Befehl so aussehen:
PHP:
fopen("texte/aktuelles/".trim(strip_tags($zeile[3])).".txt","r");
 
Zurück