file() mit externer URL

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • file() mit externer URL

    Hi

    folgendes script habe ich von hier.

    PHP-Code:
    <?php

        $titleFile 
    "titles";
        
    $titleFileDelimiter ",";
        
        if(
    file_exists($titleFile)) {
            
    $titleData file($titleFile);
            
    $titleArrayCounter 0;
            for(
    $a=0;$a<count($titleData);$a++) {
                
    $titleArrayTemp explode($titleFileDelimiter,$titleData[$a]);
                
    $unfriendlyTitleArray[$titleArrayCounter] = $titleArrayTemp[0];
                
    $titleTypeArray[$titleArrayCounter] = $titleArrayTemp[1];
                
    $friendlyTitleArray[$titleArrayCounter] = $titleArrayTemp[2];
                
    $titleArrayCounter++;
            }
        } else {
            echo 
    "The file containing rank feed heading definitions was not found (".$titleFile.").";
            exit();
        }

        function 
    parseRank($rankFile$unfriendlyTitleArray$titleTypeArray$friendlyTitleArray) {
            
    $rankData file($rankFile);
            if(
    substr($rankData[4],2,2) == "-1") {
                echo 
    "No account with that name was found.<br><br>\n\n";
                
    makeForm($_GET['accountName']);
                exit();
            }
            echo 
    "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<root>\n";
            
    $badSymbols = array("\n""\r");
            for(
    $i=1;$i<4;$i+=2) {
                
    $rankHeadingLine str_replace($badSymbols''explode("\t",$rankData[$i]));
                
    $rankDataLine explode("\t",$rankData[$i+1]);
                for(
    $k=1;$k<count($rankHeadingLine);$k++) {
                    
    $headingData makeFriendlyHeading($rankHeadingLine[$k], $unfriendlyTitleArray$titleTypeArray$friendlyTitleArray);
                    
    $contentData makeFriendlyContent($rankHeadingLine[$k], $unfriendlyTitleArray$rankDataLine[$k], $titleTypeArray);
                    echo 
    "  <".$rankHeadingLine[$k]." friendly=\"".$headingData."\">".$contentData."</".$rankHeadingLine[$k].">\n";
                }
            }
            echo 
    "</root>\n";
        }
        
        function 
    makeFriendlyElapsedTime($time 0) {
            
    $hours    = (int)floor($time/3600);
            
    $minutes  = (int)floor($time/60)%60;
            
    $seconds  = (int)$time%60;
            if(
    $hours && $hours 10) {
                
    $txt "0".$hours.":";
            } else if(
    $hours 10) {
                
    $txt $hours.":";
            } else {
                
    $txt "00:";
            }
             if(
    $minutes && $minutes 10) {
                
    $txt .= "0".$minutes.":"
            } else if(
    $minutes 10) {
                
    $txt .= $minutes.":";
            } else {
                
    $txt .= "00:";
            }
            if(
    $seconds>&& $seconds 10) {
                
    $txt .= "0".$seconds;
            } else if(
    $seconds 10) {
                
    $txt .= $seconds;
            } else {
                
    $txt .= "00";
            }
            return(
    $txt);
        }

        function 
    makeFriendlyHeading($rawContent$unfriendlyTitleArray$titleTypeArray$friendlyTitleArray) {
            for(
    $j=0;$j<count($unfriendlyTitleArray);$j++) {
                if(
    trim($rawContent) == trim($unfriendlyTitleArray[$j])) {
                    return(
    trim($friendlyTitleArray[$j]));
                    exit();
                }
            }
            return(
    trim($rawContent));
            exit();
        }

        function 
    makeFriendlyContent($headingContent$unfriendlyTitleArray$rawContent$titleTypeArray) {
            for(
    $l=0;$l<count($unfriendlyTitleArray);$l++) {
                if(
    trim($headingContent) == trim($unfriendlyTitleArray[$l])) {
                    if(
    trim($titleTypeArray[$l]) == "T") {
                        return(
    trim(date("Y-m-d"$rawContent)));
                        exit();
                    } else if(
    trim($titleTypeArray[$l]) == "E") {
                        return(
    trim(makeFriendlyElapsedTime($rawContent)));
                        exit();
                    } else if(
    trim($titleTypeArray[$l]) == "%") {
                        return(
    trim($rawContent."%"));
                        exit();
                    }
                }
            }
            return(
    trim($rawContent));
            exit();
        }

        function 
    makeForm($oldAccount) {
            echo 
    "You can download this script for non-commercial use by clicking <a href=\"./bf2-xml_parser.zip\">here</a><br><br>\n\n";
            echo 
    "<form action=\"./index.php\">\n\n";
            echo 
    "Enter BattleField 2 <b>account name</b>: <input type=\"text\" name=\"accountName\" value=\"".$oldAccount."\">\n\n<br><br>";
            echo 
    "<input type=\"submit\" value=\"Submit\">\n\n";
            echo 
    "</form>";
        }

        if(isset(
    $_GET['accountName'])) {
            
    $badSymbols = array("\n""\r""?""&");
            
    $accountName str_replace($badSymbols''trim($_GET['accountName']));
            if(
    $accountName <> trim($_GET['accountName'])) {
                echo 
    "The account name you entered was malformed, please try again.\n\n<br><br>\n\n";
                
    makeForm(trim($_GET['accountName']));
                exit();
            }            
            
    $rankURL "http://bf2web.gamespy.com/ASP/getplayerinfo.aspx?nick=".$accountName."&info=&debug=tx
    &nocache="
    .rand(50032768) * rand(50032768);
            
    parseRank($rankURL$unfriendlyTitleArray$titleTypeArray$friendlyTitleArray$allowLocalRankFile$allowXMLSave);
        } else {
                
    makeForm('');
        }

    ?>
    Wenn ich das Script ausführe, kommt folgende Fehlermeldung:
    Warning: file(): URL file-access is disabled in the server configuration in /home/xxx/public_html/page/test/index.php on line 22

    Warning: file(http://bf2web.gamespy.com/ASP/getpla...cache=15117498): failed to open stream: no suitable wrapper could be found in /home/xxx/public_html/page/test/index.php on line 22
    Leider hab ich keinen Zugriff auf die Serverkonfiguration... Gibt es eine Möglichkeit das Script umzuschreiben damit dass auch so funktioniert?

    Gruss & Danke
    Zuletzt geändert von PHPbeginner; 28.06.2005, 10:15.

  • #2
    http://de3.php.net/manual/de/function.fsockopen.php müsste es dir erlauben, eine datei über http einzulesen, um sie nachher zu bearbeiten.

    danach wirst du ein explode() nach zeilenumbrüchen aufrufen müssen.

    Kommentar


    • #3
      Ich hab mir mal die Manual angesehn aber ich steig da nicht ganz durch. Ich muss das doch irgendwie mit file() verbinden oder?

      Weil ja diese Stelle probleme macht:
      PHP-Code:
      $rankData file($rankFile); 

      Kommentar


      • #4
        schau doch einfach im manual bei fsockopen, dort ist (notfalls in den user comments) beschrieben, wie du per fsockopen nen request absetzt und die antwort auswerten kannst ...
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar


        • #5
          Original geschrieben von PHPbeginner
          Ich muss das doch irgendwie mit file() verbinden oder?
          nein, file() ist die funktion, die du komplett ersetzen musst - weil dir die meldung doch schon sagt, dass genau da in diesem falle der hase im pfeffer liegt.

          also:
          mach dir erst mal klar, was file() tut.
          mach dich dann über fsockopen() etc. schlau.
          überlege dir dann, wie du file() damit "nachbauen" kannst.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Hmm aber wenn ich schon das hier mache
            PHP-Code:
            <?php
            $fp 
            fsockopen ("bf2web.gamespy.com"80$errno$errstr30);
            if (!
            $fp) {
               echo 
            "$errstr ($errno)<br />\n";
            } else {
               
            fputs ($fp"GET / HTTP/1.0\r\n\r\n");
               while (!
            feof($fp)) {
                   echo 
            fgets($fp,128);
               }
               
            fclose($fp);
            }
            ?>
            bekomme ich eine fehlermeldung:
            HTTP/1.1 400 Bad Request Content-Type: text/html Date: Tue, 28 Jun 2005 12:22:45 GMT Connection: close Content-Length: 39
            Bad Request (Invalid Hostname)

            Kommentar


            • #7
              Original geschrieben von PHPbeginner
              Bad Request (Invalid Hostname)
              wenn es sich beim ziel um einen name-based virtual host handelt, muss der hostname noch mal explizit in den HTTP-headern mitgegeben werden, damit der zielserver weiß, welche domain - von den mehreren auf ihm gehosteten - du eigentlich ansprechen willst.
              siehe beispiele im manual.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                ich find da in der manual nix drüber.... volle kanne bahnhof

                Kommentar


                • #9
                  schau dir die beispiele in den userkommentaren zu fsockopen an - da sind mehrere dabei, die den hostnamen noch mal extra in der abgesetzten anfrage übergeben.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Naja, bei den Comments muss man schon ganz schön suchen bis man das richtige findet.

                    Du musst an diesen Server einen HTTP 1.1 Request senden, dein Codebeispiel sendet einen 1.0 Request.

                    PHP-Code:
                    fputs ($fp"GET / HTTP/1.1\r\n");
                    fputs($fp,"Host: [url]www.domain.de\r\n[/url]");
                    fputs($fp,"Connection: close\r\n\r\n"); 

                    In der ersten Zeile gibst du die Methode danach (hier GET), der Slash bedeutet quasi, dass er sich die Startseite holen soll, wenn du auf eine bestimmte Datei auf diesem Host zugreifen willst dann gibst die nach dem Slash an z.B.

                    GET /ordner/datei.html HTTP/1.1\r\n

                    In der 2. Zeile teilst du dem Server mit, von welchem V-Host du deine Datei überhaupt gerne hättest, der Server weiß das nämlich bei einem 1.0 Request nicht.

                    Eine HTTP 1.1 Verbindung muss sauber geschlossen werden, dies passiert in der 3. Zeile.

                    Gruss
                    Quetschi

                    EDIT
                    PHP-Tags wieder drin, danke wahsaga
                    Zuletzt geändert von Quetschi; 28.06.2005, 15:21.
                    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                    Schön - etwas Geschichte kann ja nicht schaden.
                    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                    Kommentar


                    • #11
                      Original geschrieben von Quetschi
                      Hab die PHP-Tags rausgenommen, weil er sonst die Verlinkung immer als <a hfref ... > darstellt.
                      checkbox vor
                      [ ] URLs automatisch umwandeln: fügt automatisch [url ] und [/url ] um Internetadressen ein.
                      deaktivieren ;-)
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Danke für eure Hilfe! Hab das jetzt mal ausprobiert. Ich hoffe ich habe nichts falsch gemacht:
                        PHP-Code:
                        <?php
                        $fp 
                        fsockopen ("bf2web.gamespy.com"80$errno$errstr30);
                        if (!
                        $fp) {
                           echo 
                        "$errstr ($errno)<br />\n";
                        } else {

                           
                        fputs ($fp"GET /ASP/getplayerinfo.aspx?nick=sandmanEBC&info=&debug=tx&nocache=632555423584611697 HTTP/1.1\r\n");
                        fputs($fp,"Host: <a href=\"http://bf2web.gamespy.com\r\n\" target=\"_blank\">bf2web.gamespy.com\r\n</a>");
                        fputs($fp,"Connection: close\r\n\r\n");

                           while (!
                        feof($fp)) {
                               echo 
                        fgets($fp,128);
                           }
                           
                        fclose($fp);
                        }
                        ?>
                        Das Script lädt jetzt sehr lange und wenn es fertig geladen hat, kommt wieder die gleiche Fehlermeldung...

                        Kommentar


                        • #13
                          Poste nochmal die aktuelle Fehlermeldung, so wie sie jetzt kommt.

                          EDIT:
                          OffTopic:
                          Es ist einfach zu heiß heute, ich glaub ich schau nachher mal im 'Eis'-Thread vorbei
                          Zuletzt geändert von Quetschi; 28.06.2005, 16:26.
                          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                          Schön - etwas Geschichte kann ja nicht schaden.
                          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                          Kommentar


                          • #14
                            Ja, es ist echt zu heiss! Hier nochmal die Fehlermeldung:
                            HTTP/1.1 400 Bad Request Content-Type: text/html Date: Tue, 28 Jun 2005 15:06:13 GMT nnCoection: close Content-Length: 39
                            Bad Request (Invalid Hostname)

                            Kommentar


                            • #15
                              Also ich gehe ja ganz stark davon aus, dass die 2. Zeile bei dir im Moment so

                              Host: bf2web.gamespy.com\r\n

                              und nicht so

                              Host: <a href=\"http://bf2web.gamespy.com\r\n\" target=\"_blank\">bf2web.gamespy.com\r\n</a>

                              aussieht, oder?
                              Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                              Schön - etwas Geschichte kann ja nicht schaden.
                              Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                              Kommentar

                              Lädt...
                              X