php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
str_replace...


 
rainer669
06-02-2003, 11:17 
 
Hallo,

folgendes Problem. Ich lese eine Datei von einem entfernten server per readfile ein, da sich in der Datei db-abfragen befinden. Nun möchte ich bestimmte strings ersetzen, aber das klappt nicht. Das einzige was ausgegeben wird ist die Zahl 20684.
Was stimmt da nicht?

$headerFileContent = readfile("http://www.einedomain.de/top_frame.php","r");

echo $headerFileContent = str_replace("./library/images","images",$headerFileContent);

Ein weiteres Problem ist, dass beim Einlesen der Datei die relativen Pfade möglichst in absolute umgewandelt werden sollten, so dass beispielsweise aus "./library" ein "http://www.einedomain.de/library" wird. Dann kann ich die Links, die in der Datei relativ sind, nutzen.

Ich hoffe, ich konnte das Problem einigermaßen gut darstellen.;)
Danke schonmal im Voraus.

Rainer

 
wahsaga
06-02-2003, 11:36 
 
Ich lese eine Datei von einem entfernten server per readfile ein, da sich in der Datei db-abfragen befinden. Nun möchte ich bestimmte strings ersetzen, aber das klappt nicht. Das einzige was ausgegeben wird ist die Zahl 20684.
Was stimmt da nicht?

$headerFileContent = readfile("http://www.einedomain.de/top_frame.php","r");
weil readfile etwas ganz anderes macht, als das wozu du es einsetzen willst.
zitat php-manual (lesen bildet):
"Liest den Inhalt einer Datei und schreibt ihn in den Ausgabepuffer.
Gibt die Anzahl der gelesenen Bytes einer Datei zurück."

also steht dann logischerweise in $headerFileContent die anzahl der bytes drin, 20684, und nicht der inhalt der datei.

 
MelloPie
06-02-2003, 11:51 
 
Willst Du fremde Sourcen klauen oder warum machst Du das remote?
Da Du ja mit

<?php
$headerFileContent = readfile("http://www.einedomain.de/top_frame.php");
?>

Die filesize erreichst der ausgegebenen Datei kannste Dir ja mit fopen und fread, etc. Weiterhelfen...

 
rainer669
06-02-2003, 12:54 
 
Hallo,

readfile habe ich als Tipp von einem Bekannten und da mir diese Topframe-seite angezeigt wurde, habe ich mich mit der Funktion nicht näher beschäftigt.

Nein, ich will keine fremden Sourcen klauen. Es handelt sich um ein Intranet und diese Topframe-seite muss auf allen Seiten erscheinen, egal auf welchem server sie liegen.

Da ich normalerweise cfml programmiere und gerade erst mit php anfange, weiß ich Vieles natürlich noch nicht.
Mit fopen habe ich es auch schon ausprobiert und das haut irgendwie auch nicht hin.....
:confused:

 
rainer669
06-02-2003, 13:29 
 
....sooo, ich hab' es jetzt wenigstens schon mal geschafft, dass die Datei mit fopen ausgelesen wird, aber was ist mit meiner eigentlichen Frage? str_replace funzt einfach nicht. Hier der neue Code:
$filename = "http://einedomain.de/top_frame.php";
$headerFileContent = fopen($filename,"r");
$headerFContent = fread($headerFileContent,21000);
fclose($headerFileContent);
$headerContent = str_replace("./library/images","images",$headerFContent);
echo $headerContent;


Danke,
Rainer

 
Abraxax
06-02-2003, 13:48 
 
1. was steht in $headerFContent drin. ist das der korrekte inhalt?

2. ist ./library/images überhaupt im string enthalten?

 
mrhappiness
06-02-2003, 13:52 
 
was machst du denn, wenn die datei mal mehr als 21.000 byte hat?
fread($headerFileContent,filesize($filename));wär besser denk ich

sicher, dass die links überhaupt so drin stehen? mach doch mal einecho $headerFContent; und such da nach dem text

 
rainer669
06-02-2003, 14:04 
 
Ich hab' mir den Quelltext angeschaut und es steht alles drin, was drinstehen soll.
"./library/images" ist auch enthalten. Am liebsten wär's mir natürlich, wenn da "http://einedomain.de/library/images" drinstehen würde(wie oben schon erwähnt brauche ich ja den absoluten Pfad, wg. der links).

Is' schon eigenartig...

 
Abraxax
06-02-2003, 14:06 
 
und wenn du

echo $headerContent = str_replace("./library/","",$headerFContent);

machst, sollte kein ./library mehr stehen. teste das mal so.

 
rainer669
06-02-2003, 14:13 
 
...jau, soweit geht's jetzt(Hatte mich verschrieben......;) ).
Danke für die schnellen Antworten.

Gibt es denn eine Möglichkeit, in dem Moment, wo man sich die Datei holt, die relativen Pfade in absolute Pfade umzuwandeln. In cfml schreibt man resolveurl=yes und dann wird sozusagen vorne an den relativen Pfad automatisch das "http://.......usw." angehängt.

 
wahsaga
06-02-2003, 14:57 
 
so müsstest du den absoluten pfad eigentlich recht schnell reinkriegen:
echo $headerContent = str_replace("./library/","http://www.domaind.tld/",$headerFContent);

 
rainer669
06-02-2003, 15:03 
 
Daran hatte ich ja auch schon gedacht, doch leider gibt es auch viele Links in dieser Datei, die natürlich jetzt auf meinen server zeigen, natürlich auf Verzeichnisse, die auf dem anderen server liegen. Deshalb bräuchte ich praktisch etwas Ähnliches, wie in cf. Dann wäre automatisch vor allen links die Adresse des anderen servers.

 
mrhappiness
06-02-2003, 15:36 
 
:confused:

warum zeigen die auf deinen server?

realtive urls in der datei wandelst du mit str_replace um in absolute (auf den anderen server)
absolute links in der datei wandelst du nicht um

oder?

 
rainer669
06-02-2003, 15:52 
 
ja, Du hast schon Recht, solange es sich um Links handelt, die nur auf ein Verzeichnis deuten. Wenn die aber auf mehrere verzeichnisse deuten, dann brauche ich natürlich für jeden Link einen str_replace. Und da, dachte ich, würde es eine "Vereinfachung" geben. Aber wenn es sowas nicht gibt, dann werd' ich's halt mit mehreren replaces machen

 
mrhappiness
06-02-2003, 15:56 
 
$headerFContent=str_replace('href="./','href="http://www.domaind.tld/',$headerFContent);geht's so nich?

 
rainer669
06-02-2003, 16:06 
 
Doch, so würde's gehen. Aber trotzdem habe ich dann noch mehrere replaces.
Aber egal, ich mach' das jetzt so :)

Danke nochmal.
Gruß,
Rainer


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:15 Uhr.