lalal: php will seite nicht einlesen

moin,

<?php
$content = implode("", file("http://server:8000"));
$fh = fopen("temp.con", "w");
fputs($fh, $content);
fclose($fh);
?>

da kommt immer Fehler die Datei temp.con bleibt leer,
wenn ich aber (http://server:8000) im Browser startet läuft es 1a

Warning: file("http://server:8000") - No error in c:\apache\util\test\neuer ordner\12.php on line 2

Warning: Bad arguments to implode() in c:\apache\util\test\neuer ordner\12.php on line 2

die Seite kommt von SHOUTcast server (Programm) und das geht über heimnetzwerg oder Internet 1a bloß php schaft es nicht ,ich habe versuch inter oder extern oder andren Port  aber nix hat geholfen

wenn ich die Adresse oben ändert-t geht der HTML Code in die Datei

  1. Liebe(r) lalal,

    das mit dem implode ist nicht optimal... Mach es besser so:

    <?php  
    $content = file_get_contents("http://server:8000");  
    
    > $fh = fopen("temp.con", "w");  
    > fputs($fh, $content);  
    > fclose($fh);  
    > ?>
    
    

    da kommt immer Fehler die Datei temp.con bleibt leer,
    wenn ich aber (http://server:8000) im Browser startet läuft es 1a

    Sag uns bloß nicht, wie dieser Fehler lautet! Und außerdem gibt es bei PHP Einstellungen, die ein Öffnen von einer Ressource auf einem fremden Server verbieten. Auf diese Einstellungen hast Du keinen Einfluss. Daher kannst Du weder mit file() noch mit file_get_contents() auf diese Seite zugreifen. Sorry!

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Aber wenn ich

      <?php
      $content = implode("", file("http://server:8200"));  //ist meine 2 HP
      $fh = fopen("temp.con", "w");
      fputs($fh, $content);
      fclose($fh);
      ?>

      oder

      <?php
      $content = implode("", file("http://www.googel.de"));
      $fh = fopen("temp.con", "w");
      fputs($fh, $content);
      fclose($fh);
      ?>

      Nehme geht das eiwand frei , nur von den pogramm nicht aber im broser wohl

      1. echo $begrüßung;

        Aber wenn ich
        $content = implode("", file("http://server:8200"));  //ist meine 2 HP

        Normalerweise könntest du dafür wie schon erwähnt file_get_contents() nehmen

        $fh = fopen("temp.con", "w");
        fputs($fh, $content);
        fclose($fh);

        Das bekommt man auch mit file_put_contents() als Einzeiler hin.

        $content = implode("", file("http://www.googel.de"));
        Nehme geht das eiwand frei , nur von den pogramm nicht aber im broser wohl

        Das sieht dann wohl so aus, als ob der server:8000 sich nicht mit den minimalen HTTP-Headern zufrieden gibt, die PHPs URL-Wrapper sendet. Hier musst du zunächst herausfinden, welche HTTP-Header der server:8000 haben will und dann den Request mit fsockopen() und Konsorten ausführen. Da ein Zugriff mit einem Browser klappt, sollte es reichen, wenn du analysierst, welche HTTP-Header der Browser sendet und dann probieren, mit welchem/n Header(n) du zum Ziel kommst.

        echo "$verabschiedung $name";

        1. Das sieht dann wohl so aus, als ob der server:8000 sich nicht mit den minimalen HTTP-Headern zufrieden gibt, die PHPs URL-Wrapper sendet.

          Was würdest du von diesem Verhalten erwarten?

          Es klopft an deiner Tür.
          Du fragst "wer ist's".
          Nichts antwortet.
          Fall erledgt.

          Der OP weiss nicht, was er mit file() eigentlich will.
          Eine Domain will er wahrscheinlich nicht, oder etwa doch?

          mfg Beat

          --

             <°)))o><                      ><o(((°>o
          1. echo $begrüßung;

            Der OP weiss nicht, was er mit file() eigentlich will.
            Eine Domain will er wahrscheinlich nicht, oder etwa doch?

            Domains gibt es bei diversen Providern und Domainregistraturen. Der OP möchte ein unter einer URL erreichbares Dokument abrufen. Dafür hat PHP eingebaute Wrapper, die diesen Vorgang so einfach wie das Lesen aus einer Datei machen. Doch diese Einfachheit hat seine Grenzen, auf die er in seinem Fall gestoßen ist.

            Das sieht dann wohl so aus, als ob der server:8000 sich nicht mit den minimalen HTTP-Headern zufrieden gibt, die PHPs URL-Wrapper sendet.

            Was würdest du von diesem Verhalten erwarten?

            Es klopft an deiner Tür.
            Du fragst "wer ist's".
            Nichts antwortet.
            Fall erledgt.

            Da verstehe ich nicht, worauf du hiaus willst. Das ist weder das übliche HTTP-Verhalten noch weißt du oder ich, was beim OP tatsächlich passiert, solange er es nicht analysiert und uns mitteilt. Meine Erfahrung in einem gleichgelagerten Fall sagt mir, dass es an einer fehlenden Zeile im Request liegen kann. Minimal sieht ein Request so aus:

            GET /ressource HTTP/1.1

            Für virtuelle mehrere Hosts unter der gleichen IP-Adresse benötigt man noch

            Host: www.example.net

            Das reicht, um einen Request beantworten zu können. Und PHPs URL-Wrapper sendet in der Tat in der Grundkonfiguration nur diese beiden Zeilen. Das System aus meiner Erfahrung bestand darauf, eine User-Agent-Zeile gesendet zu bekommen. Wie ich grad in der Dokumentation fand, kann man diese mit einem konfigurierten ini_set('user_agent', ...); senden lassen, dann braucht es auch kein fsockopen().

            echo "$verabschiedung $name";

            1. Hello,

              Da verstehe ich nicht, worauf du hiaus willst. Das ist weder das übliche HTTP-Verhalten noch weißt du oder ich, was beim OP tatsächlich passiert, solange er es nicht analysiert und uns mitteilt. Meine Erfahrung in einem gleichgelagerten Fall sagt mir, dass es an einer fehlenden Zeile im Request liegen kann.

              Wenn es sich z.B. um einen Request auf ein Google-Tool handelt, der automatisch aufgerufen wird, dann kann es sich auch um eine Misskonfiguration in der Firewall des eigenen Providers handeln ;-(

              So geschehen bei Strato.

              Genau dasselbe Modul lief auf allen anderen getesteten Hosts einwandfrei, sogar beim selben Provider.

              Ein harzliches Glückauf

              Tom vom Berg

              --
              Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. Hallo,
                ouuuu äää ich habe mal

                <?php
                $fp = fsockopen("http://server:8000", 80, $errno, $errstr, 30);
                if (!$fp) {
                    echo "$errstr ($errno)<br />\n";
                } else {
                    $out = "GET / HTTP/1.1\r\n";
                    $out .= "Host: www.example.com\r\n";
                    $out .= "Connection: Close\r\n\r\n";

                fwrite($fp, $out);
                    while (!feof($fp)) {
                        echo fgets($fp, 128);
                    }
                    fclose($fp);
                }
                ?>

                gemacht und da kommt nix nur "< /br>" wen ich aber googel nehme kommt alles

                ich habe ganz nomalen ADSL Anschluss mit einer dyndns und über Port kan ich den an ein PC(Server) den aufrufen

                1. Hello,

                  $fp = fsockopen("http://server:8000", 80, $errno, $errstr, 30);

                  Ich muss gestehen, dass mir der Sinn der obigen Paramter, insbesondere des ersten (Host) in Verbindung mit dem zweiten (Port) irgendwie abgeht.

                  Und das Scheme im Host anzugeben ist ebenfalls redundant, denn das wird in

                  $out = "GET / HTTP/1.1\r\n";

                  angeben, wie man sieht.

                  Ein harzliches Glückauf

                  Tom vom Berg

                  --
                  Nur selber lernen macht schlau
                  http://bergpost.annerschbarrich.de
                  1. echo $begrüßung;

                    $fp = fsockopen("http://server:8000", 80, $errno, $errstr, 30);
                    Ich muss gestehen, dass mir der Sinn der obigen Paramter, insbesondere des ersten (Host) in Verbindung mit dem zweiten (Port) irgendwie abgeht.
                    Und das Scheme im Host anzugeben ist ebenfalls redundant, [...]

                    Stimmt, der erste Parameter ist ein reiner Hostname oder eine IP-Adresse, keinesfalls eine komplette URL (zumindest in diesem Fall, Ausnahmen siehe PHP-Handbuch). Unabhängig davon prophezeihe/vermute ich, dass es auch nach einer Korrektur so noch nicht gehen wird.

                    echo "$verabschiedung $name";

                    1. also so oder wie ??

                      <?php
                      $fp = fsockopen("server", 8000, $errno, $errstr, 30);
                      if (!$fp) {
                          echo "$errstr ($errno)<br />\n";
                      } else {
                          $out = "GET / HTTP/1.1\r\n";
                          $out .= "Host: server:8000\r\n";
                          $out .= "Connection: Close\r\n\r\n";

                      fwrite($fp, $out);
                          while (!feof($fp)) {
                              echo fgets($fp, 128);
                          }
                          fclose($fp);
                      }
                      ?>

                      ich steig fast garnicht durch was ich faltschmache besonders wie was muss ich ändern das das geht

                      <?php
                      $content = implode("", file("http://server:8200"));
                      $fh = fopen("temp.con", "w");
                      fputs($fh, $content);
                      fclose($fh);
                      ?>

                      1. Wenn du
                          http://server:8200
                        in den location bar des Browsers eingibst.
                        Was steht danach in der location bar, nachdem die Ressource erfolgreich geholt wurde?

                        Wenn du
                          http://www.elcappuccino.ch
                        in den location bar des Browsers eingibst.
                        Was steht danach in der location bar, nachdem die Ressource erfolgreich geholt wurde?

                        Warum bekommst du (k)eine Ressource, wenn/obwohl du keine anforderst?

                        mfg Beat

                        --
                        ><o(((°>         ><o(((°>
                           <°)))o><                      ><o(((°>o
                        1. ich habe ein heimnetzwerg mit einer fritz.box wo ich port 80 21 8000 8100 ... und par andre auf den pc "server" weiter geleitet
                          und ich habe bei dyndns eine eingerichtet die ein namen meine ip zu weist  der pc hat als name server und wenn ich auf mein pc in broser server eingeben komme ich auf meine hp von den pc die drauf ist

                          internet----fritzbox |---lalalpc
                                               |---server

                          emm dns oder so was ist eigentlich alles für netzwerg in fritz.box drinne

                          bei
                          <?php
                          $fp = fsockopen("server", 8000, $errno, $errstr, 30);
                          if (!$fp) {
                              echo "$errstr ($errno)<br />\n";
                          } else {
                              $out = "GET / HTTP/1.1\r\n";
                              $out .= "Host: www.example.com\r\n";
                              $out .= "Connection: Close\r\n\r\n";

                          fwrite($fp, $out);
                              while (!feof($fp)) {
                                  echo fgets($fp, 128);
                              }
                              fclose($fp);
                          }
                          echo "---";
                          echo $errno;
                          echo "---";
                          echo $errstr;
                          ?>
                          kommt-----------------------------------------anfang------------------

                          ICY 401 Service Unavailable
                          icy-notice1:<BR>SHOUTcast Distributed Network Audio Server/win32 v1.9.8<BR>
                          icy-notice2:The resource requested is currently unavailable<BR>

                          ---0---
                          -------------ende---------------------------------------------------------
                          zu Beat
                          also wen ich auf mein pc das offne steht in der andreszeile

                          http://server:8200  ist faltsch das mein 2 server 8000 ist das
                           http://server:8000 = http://server:8000/
                          http://www.elcappuccino.ch = http://www.elcappuccino.ch/

                          oder habe ich das faltsch mitbekommen

                          1. ich habe was gefunden
                            http://www.streamsolutions.co.uk/index.php?page=s5#sis

                            <div style="Visibility: Hidden; Position: Absolute;">
                            <?
                            $open = fsockopen("ENTER YOUR IP ADDRESS HERE","ENTER PORT HERE");
                            if ($open) {
                            fputs($open,"GET /7.html HTTP/1.1\nUser-Agent:Mozilla\n\n");
                            $read = fread($open,1000);
                            $text = explode("content-type:text/html",$read);
                            $text = explode(",",$text[1]);
                            } else { $er="Connection Refused!"; }
                            ?>
                            </div>
                            <?
                            if ($text[1]==1) { $state = "Up"; } else { $state = "Down"; }
                            if ($er) { echo $er; exit; }
                            echo "<font face=verdana size=1>
                            Listeners: $text[0] of $text[3] ($text[4] Unique)<br>
                            Listener Peak: $text[2]<br>
                            Server State: <b>$state</b><br>
                            Bitrate: $text[5] Kbps<br>
                            Current Song: $text[6]
                            </font>";?>

                      2. Hello,

                        also so oder wie ??

                        <?php
                        $fp = fsockopen("server", 8000, $errno, $errstr, 30);
                        if (!$fp) {
                            echo "$errstr ($errno)<br />\n";
                        } else {
                            $out = "GET / HTTP/1.1\r\n";
                            $out .= "Host: server:8000\r\n";
                            $out .= "Connection: Close\r\n\r\n";

                        fwrite($fp, $out);
                            while (!feof($fp)) {
                                echo fgets($fp, 128);
                            }
                            fclose($fp);
                        }
                        ?>

                        So ist es formal richtig. "server" muss eine vom DNS auflösbare Domainbezeichnung sein.
                        Hast Du _für_ den Host, auf dem das Script läuft, einen DNS eingerichtet? Also weiß der, wo er den nächsten DNS findet? Und ist der Gateway auch eingerichet?

                        ich steig fast garnicht durch was ich falsch mache, besonders wie und was muss ich ändern, dass das geht?

                        Gibt es Fehlermeldungen?
                        Hast Du Dir schon $errno und $errstr ausgeben lassen?

                        Ein harzliches Glückauf

                        Tom vom Berg

                        --
                        Nur selber lernen macht schlau
                        http://bergpost.annerschbarrich.de
                      3. echo $begrüßung;

                        Du müsstest einfach mal aufmerksam mitlesen, _alle_ gegebenen Hinweise berücksichtigen, und vor allem versuchen das Problem zu verstehen. Ansonsten kommen wir hier nicht weiter. Du verzettelst dich gerade in Nebenschauplätzen.

                        ich steig fast garnicht durch was ich faltschmache besonders wie was muss ich ändern das das geht

                        Noch ein letzer Erklärungsversuch meinerseits. Diese Frage ist so pauschal nicht zu beantworten, weil bisher keiner weiß, wie der Request aussehen muss, den dein Server haben möchte (abgesehen vom Minimum GET und Host). Der Browser schafft es, PHP offensichtlich nicht. Also wo liegen die Unterschiede zwischen beiden? Es kann nur der Request und die dabei mitgelieferte Information sein. Welche Zeilen erwartet dein Server im Request? Hast du eine Dokumentation zum Server? Wenn nicht bleibt dir nur auszuprobieren. Ein guter Anfang wäre, wie schon erwähnt der User-Agent. Wenn deinem Server das noch nicht reicht, dann erst benötigst du fsockopen() und musst mit weiteren Request-Zeilen probieren. Wie so ein Request aussieht, den der Browser sendet zeigen dir Tols wie die livehttpheaders-Extension für den Firefox.

                        echo "$verabschiedung $name";

                  2. Hallo,

                    $fp = fsockopen("http://server:8000", 80, $errno, $errstr, 30);
                    Ich muss gestehen, dass mir der Sinn der obigen Paramter, insbesondere des ersten (Host) in Verbindung mit dem zweiten (Port) irgendwie abgeht.

                    das ist in der Tat widersprüchlich, aber ...

                    Und das Scheme im Host anzugeben ist ebenfalls redundant

                    Es ist nicht nur redundant, sondern schlicht falsch. So würde man versuchen, eine Verbindung zum Host "http://server:8000" aufzubauen, und einen solchen Hostnamen gibt es nicht - die Verbindung wird fehlschlagen.

                    Ciao,
                     Martin

                    --
                    Niemand ist überflüssig: Er kann immer noch als schlechtes Beispiel dienen.
                2. echo $begrüßung;

                  ouuuu äää ich habe mal
                  $fp = fsockopen("http://server:8000", 80, $errno, $errstr, 30);
                      $out .= "Host: www.example.com\r\n";

                  Das passt nicht zusammen.

                  gemacht und da kommt nix nur "< /br>" wen ich aber googel nehme kommt alles

                  Vielleicht kommst du ja zu einem positiven Ergebnis, wenn du die anderen gegebenen Hinweise nicht ignorierst. Wenn der Browser aufrufen kann, aber PHP nicht, dann liegt das vermutlich an den Zeilen des Requests, denn etwas grundsätzlich anderes macht der Browser auch nicht.

                  echo "$verabschiedung $name";

            2. Hallo,

              Für virtuelle mehrere Hosts unter der gleichen IP-Adresse benötigt man noch

              Host: www.example.net

              RFC 2616 §14.23 sagt aber etwas anderes - nämlich dass der Host-Header von Clients immer angegeben werden muss. Nur wenn es keinen Host-Namen gibt, bleibt der Header leer, muss aber trotzdem mitgeschickt werden. Wird er das nicht, muss der Server den Request verweigern.

              Das gilt nur für HTTP/1.1.

              Gruß