Frank L.: Warning: Success!?

Hallo,
ich erhalte von PHP dauernd folgende Fehlermeldung ausgespuckt:

Warning: file("http://www.google.com/search?q=bla&sourceid=opera&num=50&ie=utf-8&oe=utf-8") - Success in /var/www/web23/html/test.php on line 3

Habe das nun schon in verschiedenen Datein und Verzeichnissen Probiert, immer das gleiche.

Warning: file(...) - Success in (...)

Das heisst doch: Warnung: Erfolg?

Es liegt eigentlich nicht an Parametern oder Einstellungen des Servers, habe es unter einem anderen web auch probiert, da geht es.

Habe es auch mit anderen URIs probiert - nix.
Geht einfach nicht...

Google findet mir nur Sites wo das Problem auftrat, also Sites, die zur Zeit der Indizierung durch Google selbst dieses Problem hatten :/

Weiss jemand woran das liegen könnte?

Danke und Gruss, Frank.

  1. Hallo Frank,

    Was steht den in /var/www/web23/html/test.php on line 3?

    Gruß,

    Dieter

    1. Hallo Dieter,

      file("http://www.google.com/search?q=bla&sourceid=opera&num=50&ie=utf-8&oe=utf-8");

      Das wars.
      Das ist es ja, kein garnix sonst :/

      Und in dieser Testdatei nichts ausser dem.

      Zeile 1: <?php
      Zeile 2: file("http://www.google.com/search?q=bla&sourceid=opera&num=50&ie=utf-8&oe=utf-8");
      Zeile 3: ?>

      Gruss Frank.

      1. Moin!

        Zeile 1: <?php
        Zeile 2: file("http://www.google.com/search?q=bla&sourceid=opera&num=50&ie=utf-8&oe=utf-8");
        Zeile 3: ?>

        Und was glaubst du, macht dieses Miniskript sinnvolles?

        - Sven Rautenberg

        1. Hallo Sven,

          Und was glaubst du, macht dieses Miniskript sinnvolles?

          Es testet.

          Normal versendet es eine SMS über ein HTTP-Gateway.
          Und das tut es schon auf ziemlich vielen Servern, bisher immer problemlos.
          Nur auf diesem Server jetzt nicht.
          Komischerweise :(
          Aber da ich sichergehen will dass es nicht an etwas anderem liegt habe ich nur diese eine Zeile rauskopiert und in dieses "mini-script" eingefügt, wie ich es sehr oft mache.
          So weiss ich dass de Fehler wirklich daran liegt und kann ihn genau dort suchen.

          Aber da es auch dort nicht ging habe ich es mit einer google-seite versucht.

          Und das ging auch nicht.

          Also liegt es auch nicht am Ziel-Host, in meinem Fall ein Gateway.

          Gruss Frank.

          1. ini_get("allow_url_fopen") <-- Spuckt übrigens ein 1 aus...

            Er ruft die URL natürlich auch nicht auf, die Warnung als solche wäre ja leicht wegzuzaubern, das wäre nicht das problem.

          2. Moin!

            Hm.

            http://de2.php.net/manual/de/function.file.php sagt mir:

            array file ( string filename [, int use_include_path] )

            "Die Funktion file() ist identisch mit readfile(), außer dass die eingelesene Datei als Array zurückgegeben wird. Jedes Feld des Arrays korrespondiert mit einer Zeile der Datei. Der Zeilenumbruch bleibt erhalten. Im Fehlerfall gibt file() FALSE zurück."

            Willst Du also nicht das Ganze abfangen?

            if (file("http://www.google.com/search?q=bla&sourceid=opera&num=50&ie=utf-8&oe=utf-8"))
            {
              echo "Das hat gklappt.";
            } else {
              echo "Ein Fehler ist ein Fehler ist ein Fehler.";
            }

            MFFG (Mit freundlich- friedfertigem Grinsen)

            fastix®

            --
            Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
          3. n'Abend!

            Und was glaubst du, macht dieses Miniskript sinnvolles?
            Es testet.

            Ach so?
            Indem es eine Google-Suche aufruft, die vom Google-Server gelieferte Seite zeilenweise in einem Array speichert und dieses dann wegschmeißt?
            Das verstehe wer will...

            Also liegt es auch nicht am Ziel-Host, in meinem Fall ein Gateway.

            Nee, wohl kaum.
            Ich denke eher, der PHP-Parser will dir mitteilen:
            1. Warning: Dieser Code produziert kein Ergebnis innerhalb deines Scripts.
               Mein C-Compiler würde hier sagen. "Warning: Code has no effect".
            2. Success: Was immer der Funktionsaufruf auch bewirken sollte, er konnte fehlerfrei durchgeführt werden.

            So long,

            Martin

            1. Hallo,

              Und was glaubst du, macht dieses Miniskript sinnvolles?
              Es testet.

              Ach so?
              Indem es eine Google-Suche aufruft, die vom Google-Server gelieferte Seite zeilenweise in einem Array speichert und dieses dann wegschmeißt?
              Das verstehe wer will...

              Es geht darum _dass_ er es aufruft.
              Dass der aufgerufene Server weiss dass er was tun soll.
              Was auf dem Server der das Script ausführt mit den Daten nachher passiert ist doch wurscht.

              Zur Veranschaulichung:

              Ich rufe einen Bekannten an und sage ihm "USA ist ein grosses Land".
              Dann lege ich auf.
              Ich bin der Server der das Script ausführt, mein Bekannter in diesem Fall das Gateway bzw. in diesem Beispiel jetzt der Google-Server.
              Ich habe keinerlei Information von ihm aber er hat von mir die Information "USA ist ein grosses Land".

              So ist das mit meinem Aufruf.

              Ich rufe auf http://gateway/?meine_info=USA_ist_ein_grosses_Land&senden_an=0123456789

              Dann schickt http://gateway eine SMS an 0123456789 mit dem Text USA_ist_ein_grosses_Land.

              Das ist alles.
              Das ist der Sinn der Sache.

              Was der mir nachher zurückgibt interessiert mich erstmal nicht.

              Das mit Google ist ja nur zum testen, vergiss das mit Google, es geht um das aufrufen eines Gateways.

              Normal wird eben mein Gateway aufgerufen, aber ich dachte eben es liegt evtl. am Zielhost deshalb habe ich es mit Google versucht.

              Ich denke eher, der PHP-Parser will dir mitteilen:

              1. Warning: Dieser Code produziert kein Ergebnis innerhalb deines Scripts.

              Hm, ich weiss nicht.
              Mal ganz davon abgesehen dass ich es in dem Script, in dem es eigentlich verwendet wird so verwende:
              $file = file("http://(...)");
              $ausgabe = implode($file);

              Mein C-Compiler würde hier sagen. "Warning: Code has no effect".

              Hm, aber der Code hat ja nen Effekt.
              Er teilt einem anderen Server Informationen mit.

              1. Success: Was immer der Funktionsaufruf auch bewirken sollte, er konnte fehlerfrei durchgeführt werden.

              Konnte er aber nicht, da er die URI ja nicht aufgerufen hat, da mein Gateway sonst eine SMS und eine Mail verschickt hätte und einen Eintrag in die Log-Datei gemacht hätte.

              Gruss Frank.

              1. Moin!

                So ist das mit meinem Aufruf.
                Ich rufe auf http://gateway/?meine_info=USA_ist_ein_grosses_Land&senden_an=0123456789
                Dann schickt http://gateway eine SMS an 0123456789 mit dem Text USA_ist_ein_grosses_Land.
                Das ist alles.
                Das ist der Sinn der Sache.
                Was der mir nachher zurückgibt interessiert mich erstmal nicht.

                Dich interessiert es nicht. PHP denkt aber: He! Der holt einen 4-kB-Array und schüttet den direkt in den Orkus. Das mag zwar syntaktisch korrekt sein ist aber "unlogisches" Verhalten. Also gibt PHP eine Warnung und keinen Fehler aus.

                Wie wäre es, also meinem Ratschlag aus dem anderen Beitrag zu folgen?

                MFFG (Mit freundlich- friedfertigem Grinsen)

                fastix®

                --
                Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
                1. Halleluja,

                  Folgendes:

                  google blockt wohl wahrscheinlich wirklich das.

                  Und bei meinem Gateway wars folgendes:

                  Ich habe normalerweise immer $text = urlencode($text); gemacht und den dann angehängt.

                  diesmal nicht.

                  Es lag an den Leerzeichen in der URI

                  Danke trotzdem für eure Hilfe und den Beitrag von Marc Reichelt, der mich darauf aufmerksam gemacht hat dass die Funktion file() als solche doch geht - auch mit externen URIs :)

                  Danke und Gruss, Frank.

                  1. Moin!

                    google blockt wohl wahrscheinlich wirklich das.

                    Nein. Ich habe es probiert. Google spuckt die Daten aus.

                    <?php

                    Abschalten der Warnung wenn möglich:

                    if (!ini_set('error_reporting','E_ERROR'))
                    {
                      echo 'Sie haben vermutlich nicht das Recht "ERROR_REPORTING" zu ändern.<br>';
                    }

                    Abruf der Daten:

                    if (file("http://www.google.com/search?q=blablub&sourceid=opera&num=50&ie=utf-8&oe=utf-8"))
                    {
                      echo "Abruf von http://www.google.com/search?q=bla&sourceid=opera&num=50&ie=utf-8&oe=utf-8 funktionierte.";
                    } else {
                      echo "Ein Fehler ist ein Fehler ist ein Fehler.";
                    }

                    ?>

                    Mit readfile() statt file() bekommst Du die Seite von Google ausgegeben. Baust Du den Fehler (Leerzeichen zwischen Bla und Blub) ein, kommt bei der Variante nur die Fehlermeldung. Darüber hinaus ist bei Deinem Programm die Impementierung von Haus aus daneben. Sowas baut schon serverseitig als Webservice mit der Möglichkeit verschiedene Fehler (oder auch Anweisungen wie zum Beispiel die Benutzung eines bestimmten alternierenden Servers) anzuzeigen, damit die Rückgaben einfach ausgewertet werden können. Du kannst ja nicht mal rausbekommen, ob denn wenigstens der "Gateway" der Meinung war, die SMS ausgeliefert zu haben. "Ja... da kommen irgendwelche Daten. Die interessieren aber nicht."

                    MFFG (Mit freundlich- friedfertigem Grinsen)

                    fastix®

                    --
                    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
  2. Hallo Frank,

    habe deinen Code etwas geändert, schau mal ob du es so hinbekommst:

      
    <?php  
      $html = implode('', file('http://www.example.org/'));  
      echo $html;  
    ?>  
    
    

    Google schützt AFAIK seine Seiten vor PHP (habe das nicht ausgetestet, meine mich aber an irgendetwas erinnern zu können).
    Bei mir holt das Script ordnungsgemäß den Quelltext von example.org und gibt ihn aus - als wenn ich die Seite direkt anschauen würde.

    Was siehst du, also die gesamte Ausgabe?

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    http://emmanuel.dammerer.at/selfcode.html