chichi: webseite einlesen und ausgeben

ich will eine webseite test.php auslesen und dann anzeigen lassen. mein ansatz gibt einfach nichts aus. woran liegt das?

<?  // URL, die durchsucht werden soll
$url = "http://www.test.de/test.php";
$file= fread(fopen("$url", "r"), 150000);

// Ausgabe der Daten
echo "$file";

?>

chichi

  1. Hallo chichi,

    mein ansatz gibt einfach nichts aus.

    Auch keine Fehlermeldung?

    $file= fread(fopen("$url", "r"), 150000);

    Das ist sehr unschön. Wieso packst du diese zwei Funktionen zusammen?
    $fileHandle  = fopen($url, "r");
    $fileContent = fread($fileHandle, 1500000);
    ist doch schöner, oder?
    Außerdem wird dir so eine Fehlermeldung für jene Zeile deutlicher, bei deiner Variante mag es evtl. Unklarheiten geben, worauf sie sich nun bezieht.
    Die Funktion file_get_contents() ist dir aber wohl bekannt?

    Was sagt denn deine Konfiguration zu allow_url_fopen?

    echo "$file";

    Wie auch schon oben bei fopen("$url", "r"):
    Du benötigst hier keine Anführungszeichen, ohne es genau zu wissen würde ich sogar tippen, dass es performanceschädigend ist (Es wird ja ein String auf Variablen geparst während ohne direkt eine Variable zu finden ist)

    Grüße
      David

    --
    >>Nobody will ever need more than 640k RAM!<<
    1981 Bill Gates
    1. Die Funktion file_get_contents() ist dir aber wohl bekannt?

      --> ja habs nachgelesen...

      Was sagt denn deine Konfiguration zu allow_url_fopen?

      -->ON

      Du benötigst hier keine Anführungszeichen...

      -->danke.

      so gehts jetzt, leider ohne bilder, da diese flaschen pfad haben:
      <?  // URL, die durchsucht werden soll
      $url = "http://www.test.de/gesch_bereiche.php";
      $file = file_get_contents($url);

      // Ausgabe der Daten
      echo "$file";

      ?>

      am besten wäre es jetzt mit string suchen alle pfade rausfinden, die nicht stimmen und diese mit dem kompletten pfad ersetzen...
      geht das?

      chichi

      1. Hallo chichi,

        am besten wäre es jetzt mit string suchen alle pfade rausfinden, die nicht stimmen und diese mit dem kompletten pfad ersetzen...

        Wie meinst du das, "die nicht stimmen"? Möchtest du die eingebundenen Bilder etc. auch herunterladen oder nur die Sourcen anders angeben? Oder möchtest du prüfen, ob diese überhaupt auf dem Server existieren?
        Mit der Methode oben liest du eine Ressource aus, nicht ein Dokument und ein Bild o.Ä. Wenn du also eine komplette Seite mitsamt Bildern, CCS-Dateien usw einlesen möchtest, müsstest du sie komplett parsen. Einige reguläre Ausdrücke werden dir dabei helfen. Deinen Code oben müsstest du dann am besten in eine Funktion packen und dir so für alle herunterzuladenen Dateien nutzbar machen. Ebenso müsstest du anschließend die HTML-Dateien ggf. entsprechend anpassen wenn du ein Bild einbinden möchtest.

        Grüße
          David

        --
        >>Nobody will ever need more than 640k RAM!<<
        1981 Bill Gates
        1. hi,

          Wie meinst du das, "die nicht stimmen"? Möchtest du die eingebundenen Bilder etc. auch herunterladen oder nur die Sourcen anders angeben? Oder möchtest du prüfen, ob diese überhaupt auf dem Server existieren?
          Mit der Methode oben liest du eine Ressource aus

          und eben diese ressource, bzw. teile von ihr, möchte er vermutlich in seine seite einbauen - wobei dann die pfade zu bildern etc. idT. "nicht mehr stimmen" dürften.

          gruß,
          wahsaga

          --
          I'll try being nicer if you'll try being smarter.
          1. ich will auf einer zweiten domain, die inhalte der hauptdomain anzeigen lassen. alle bilder sollen von der seite geladen werden, von der ich die seite lade.

            die links stimmen jetzt nicht, konnte aber einige durch ereg_replace richtig setzen:

            <?  // URL, die durchsucht werden soll
            $url = "http://www.cvcv.de/gesch_bereiche.php";
            $file = file_get_contents($url);
            //replace words
            $file = ereg_replace('src="','src="http://www.cvcv.de/',$file);
            $file = ereg_replace('href="','href="http://www.cvcv.de/',$file);

            // Ausgabe der Daten
            echo "$file";
            ?>

            leider werden nicht alle tags erfasst, kann es daran liegen, weil  leerzeichen dazwischen sind? gibt es eine parser-funktion, die mir jetzt weiterhilft. chichi

            1. Hallo chichi

              ich will auf einer zweiten domain, die inhalte der hauptdomain anzeigen lassen. alle bilder sollen von der seite geladen werden, von der ich die seite lade.

              Warum leitest du dann nicht einfach auf die andere Seite weiter oder verwendest ein Frameset? Dann könntest du dir den ganzen Kram sparen.
              Alternativ könntest du auch einfach die gesammte Seite auf den zweiten Server kopieren, würde dann eben nur doppelt so viel Speicher verbrauchen.
              Evtl. mag dir auch mod_rewrite für den Apache weiterhelfen indem du alle URLs auf die vom zweiten Server umschreibst (ich weiß aber so nicht, wie sich dass dann in der Adressleiste des Browsers äußert, falls dir das wichtig ist).

              //replace words
              $file = ereg_replace('src="','src="http://www.cvcv.de/',$file);
              $file = ereg_replace('href="','href="http://www.cvcv.de/',$file);

              Vorsicht falls absolute URLs in den Pfaden stehen oder bei externen Links...
              Warum verwendest du hier überhaupt ereg_replace() und nicht str_replace()?
              Und warum ersetzt du src=" durch src="[...], sprich, wieso maskierst du beim gesuchten String das "?

              leider werden nicht alle tags erfasst, kann es daran liegen, weil  leerzeichen dazwischen sind?

              Wo sind Leerzeichen? Du ersetzt doch nur src=" bzw href=" und darin sind keine Leerzeichen...

              Grüße
                David

              --
              >>Nobody will ever need more than 640k RAM!<<
              1981 Bill Gates
              1. Hello,

                Warum leitest du dann nicht einfach auf die andere Seite weiter oder verwendest ein Frameset? Dann könntest du dir den ganzen Kram sparen.

                Das ist dann aber keine Übung mehr, für jemanden, der Spaß daran hat, die Dinge zu verstehen und selber zu können ;-)

                Harzliche Grüße aus http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
      2. hi,

        am besten wäre es jetzt mit string suchen alle pfade rausfinden, die nicht stimmen und diese mit dem kompletten pfad ersetzen...
        geht das?

        ja.
        schau dich bei den string-funktionen von PHP um; oder besser noch (weil flexibler), beschäftige dich mit regulären ausdrücken.

        gruß,
        wahsaga

        --
        I'll try being nicer if you'll try being smarter.
        1. Hallo,

          am besten wäre es jetzt mit string suchen alle pfade rausfinden, die nicht stimmen und diese mit dem kompletten pfad ersetzen...
          geht das?

          ja.
          schau dich bei den string-funktionen von PHP um; oder besser noch (weil flexibler), beschäftige dich mit regulären ausdrücken.

          soetwas
          ../../irgendetwas.eineEndung
          sollte doch dann grosse Probleme bereiten, oder?

          da muss man sich dann schon ziemlich gut auskennen mir regulären Ausdrücken *g*

          1. hi,

            [...] beschäftige dich mit regulären ausdrücken.

            soetwas
            ../../irgendetwas.eineEndung
            sollte doch dann grosse Probleme bereiten, oder?

            dass regex-sonderzeichen innerhalb des suchtextes maskiert werden müssen, ist klar.

            da muss man sich dann schon ziemlich gut auskennen mir regulären Ausdrücken *g*

            "beschäftige dich mit regex" schließt "sieh dir an, wie sonderzeichen innerhalb von regex zu handhaben sind" doch mit ein :-)

            gruß,
            wahsaga

            --
            I'll try being nicer if you'll try being smarter.
            1. Hallo,

              [...] beschäftige dich mit regulären ausdrücken.

              soetwas
              ../../irgendetwas.eineEndung
              sollte doch dann grosse Probleme bereiten, oder?

              dass regex-sonderzeichen innerhalb des suchtextes maskiert werden müssen, ist klar.

              ich hab mich vielleicht falsch ausgedrückt *g*

              damit meinte ich... den richtigen Pfad herauszubekommen ;)

              Beispiel...
              die Website liegt unter http://example.com/unterverzeichnis1/unterverzeichnis2/unterverzeichnis3/index.htm
              der Webdesigner hat 7 Bilder in der index.htm

              <img src="/1.gif" width="46" height="60" /> -> <img src="http://example.com//1.gif" width="46" height="60" />

              <img src="./2.gif" width="46" height="60" /> -> <img src="http://example.com/unterverzeichnis1/unterverzeichnis2/unterverzeichnis3/2.gif" width="46" height="60" />

              <img src="../3.gif" width="46" height="60" /> -> <img src="http://example.com/unterverzeichnis1/unterverzeichnis2/3.gif" width="46" height="60" />

              <img src="../../4.gif" width="46" height="60" /> -> <img src="http://example.com/unterverzeichnis1/4.gif" width="46" height="60" />

              <img src="../../../5.gif" width="46" height="60" /> -> <img src="http://example.com/5.gif" width="46" height="60" />

              <img src="../../unterverzeichnis2-1/6.gif" width="46" height="60" /> ->  <img src="http://example.com/unterverzeichnis1/unterverzeichnis2-1/6.gif" width="46" height="60" />

              <img src="http://example.net/unterverzeichnis1/7.gif" width="46" height="60" /> -> <img src="http://example.net/unterverzeichnis1/7.gif" width="46" height="60" />

              ist das möglich... dass nachher alle 7 Bilder richtig angezeigt werden?
              ich würd mir die Karten legen ^^

              1. hi,

                die Website liegt unter http://example.com/unterverzeichnis1/unterverzeichnis2/unterverzeichnis3/index.htm

                daraus extrahierst du dir leicht
                http://example.com/unterverzeichnis1/unterverzeichnis2/unterverzeichnis3/
                als pfad für alle weiteren relativen referenzierungen innerhalb dieses dokumentes.

                <img src="../3.gif" width="46" height="60" /> -> <img src="http://example.com/unterverzeichnis1/unterverzeichnis2/3.gif" width="46" height="60" />

                ist das gleiche wie
                http://example.com/unterverzeichnis1/unterverzeichnis2/unterverzeichnis3/../3.gif

                • also aus dem "original-pfad" des bildes, "../3.gif" und dem oben erwähnten pfad per einfacher stringverkettung erstellbar.

                <img src="../../4.gif" width="46" height="60" /> -> <img src="http://example.com/unterverzeichnis1/4.gif" width="46" height="60" />

                ist das gleiche wie
                http://example.com/unterverzeichnis1/unterverzeichnis2/unterverzeichnis3/../../4.gif

                <img src="../../../5.gif" width="46" height="60" /> -> <img src="http://example.com/5.gif" width="46" height="60" />

                etc.

                ist das möglich... dass nachher alle 7 Bilder richtig angezeigt werden?

                ja, sollte so wie oben beschrieben durchaus funktioneren.
                ../ sagt nur, gehe vom aktuellen verzeichnis aus eins nach oben.
                nirgendwo steht, dass dies immer nur bei relativen pfadangaben und am anfang der pfadangabe sein dürfte.

                ich würd mir die Karten legen ^^

                bevor ich damit anfange, werfe ich idR. erstmal noch einen blick ins manual -> http://de.php.net/manual/de/function.realpath.php

                damit kannst du aus
                http://example.com/unterverzeichnis1/unterverzeichnis2/unterverzeichnis3/../../4.gif
                auch wieder
                http://example.com/unterverzeichnis1/4.gif
                machen, wenn dir das besser gefällt.

                gruß,
                wahsaga

                --
                I'll try being nicer if you'll try being smarter.
                1. Hallo,

                  die Website liegt unter http://example.com/unterverzeichnis1/unterverzeichnis2/unterverzeichnis3/index.htm

                  daraus extrahierst du dir leicht
                  http://example.com/unterverzeichnis1/unterverzeichnis2/unterverzeichnis3/
                  als pfad für alle weiteren relativen referenzierungen innerhalb dieses dokumentes.

                  <img src="../3.gif" width="46" height="60" /> -> <img src="http://example.com/unterverzeichnis1/unterverzeichnis2/3.gif" width="46" height="60" />

                  ist das gleiche wie
                  http://example.com/unterverzeichnis1/unterverzeichnis2/unterverzeichnis3/../3.gif

                  • also aus dem "original-pfad" des bildes, "../3.gif" und dem oben erwähnten pfad per einfacher stringverkettung erstellbar.

                  jetzt wo du es sagst, oh man... wie kompliziert hab ich denn vorhin gedacht *g*

                2. Hello,

                  spannend ist aber, wo überall Pfade versteckt sind.

                  <a href="..."
                  <input action="..."
                  <onclick="window.open("..."
                  <onclick="opener.location.url="...           *war das so richtig?"
                  <link rel="stylesheet" type="text/css" href="...
                  <script type="text/javascript" src="...
                  <meta http-equiv="refresh" content="5; URL=http://de.selfhtml.org/">
                     wobei die eigentlich absolut sein sollte, aber wer garantiert das?
                  <frame src="verweise.htm" name="Navigation">
                  ...

                  es gibt bestimmt noch mehr Möglichkeiten. DHTML z.B.

                  Wie ist das da mit "basedir"?

                  Harzliche Grüße aus http://www.annerschbarrich.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau
                  1. hi,

                    spannend ist aber, wo überall Pfade versteckt sind.

                    ja, natürlich - hier ging es doch aber _nur_ um die bilder, oder? (hier ist wohl der OP gefragt.)

                    <a href="..."
                    <input action="..."

                    huh?

                    <onclick="window.open("..."
                    <onclick="opener.location.url="...           *war das so richtig?"

                    nee, du meinst sicher location.href.
                    URL liegt a) direkt unterhalb von document, und ist b) nur lesbar.

                    [...]
                    Wie ist das da mit "basedir"?

                    <base> haben wir ja jetzt noch gar nicht betrachtet, das käme ggf. noch "erschwerend" hinzu.

                    aber du liegst natürlich vollkommen richtig, dass man im zweifelsfalle noch auf "mehr" achten muss, als nur auf die src-angabe von bildern - je nachdem, wie umfangreich man die ersetzung vorhat.

                    gruß,
                    wahsaga

                    --
                    I'll try being nicer if you'll try being smarter.
                    1. Hallo,

                      [...]
                      aber du liegst natürlich vollkommen richtig, dass man im zweifelsfalle noch auf "mehr" achten muss, als nur auf die src-angabe von bildern - je nachdem, wie umfangreich man die ersetzung vorhat.

                      vielleicht gibt es ja dafür schon eine Klasse?!

                      der z.B. irgendwie CSS, JavaScript, etc. -Dateien mit irgendwie einbindet, denn da stehen meisstens auch relative Pfade drin

                      es bringt ja nix, wenn ich vom anderen Server eine CSS-Datei einbinde und dort relative Pfade zu Grafiken drin stehen ;-)

                      1. Hello,

                        es bringt ja nix, wenn ich vom anderen Server eine CSS-Datei einbinde und dort relative Pfade zu Grafiken drin stehen ;-)

                        Das kommt auch noch dazu. Habe ich gar nicht dran gedacht. Und in den externen JS-Dateien sieht es ja vielleicht genauso aus.

                        Harzliche Grüße aus http://www.annerschbarrich.de

                        Tom

                        --
                        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                        Nur selber lernen macht schlau
                        1. Hallo,

                          es bringt ja nix, wenn ich vom anderen Server eine CSS-Datei einbinde und dort relative Pfade zu Grafiken drin stehen ;-)

                          Das kommt auch noch dazu. Habe ich gar nicht dran gedacht. Und in den externen JS-Dateien sieht es ja vielleicht genauso aus.

                          eine Möglichkeit wäre die externen Sachen in die HTML-Datei unterzubringen

                          musst dann den Script-Tag auseinander nehmen...
                          und nach einer externen Datei suchen lassen
                          auf *.js ist ja kein Verlass, kann ja auch *.wasWeissIch heissen ;)

                          Aus

                          <script src="JavaScript.datei" type="text/javascript" language="JavaScript"></script>

                          wird dann

                          <script language="JavaScript" type="text/JavaScript">
                          <!--
                          [...] <-- JavaScript.datei Inhalt
                          //-->
                          </script>

                          das selbe dann mit den CSS-Kram
                          danach kann man ja die Pfade genauso abändern, wie bei den Bildern :)

                          bloss was macht man mit soetwas
                          <style type="text/css">
                          <!--
                          @import url("./css.datei");
                          -->
                          </style>

                          kann man dort statt der URL.. einfach CSS-Code eingeben?
                          also damit z.B. Netscape 4.x oder ähnlich... den CSS-Code nicht ausführen

                    2. Hello,

                      <input action="..."

                      huh?

                      Sorry, war natürlich <form action="...  gemeint.

                      <onclick="opener.location.url="...           *war das so richtig?"

                      nee, du meinst sicher location.href.

                      Harzliche Grüße aus http://www.annerschbarrich.de

                      Tom

                      --
                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                      Nur selber lernen macht schlau