Seite 1 von 1

datei auf fremden server prüfen (explizit modified)

Verfasst: 07.07.2004 12:06
von Tekknotrip
Hallo Leute,
ich habe ein XML File, was auf einen anderen Server liegt und alle 5 Minuten erneuert wird. Damit ich nicht ständig über xsl in html output parse möchte ich zuerst prüfen, ob das locale file (der letzte html output vom parser) älter ist, als das XML File auf dem anderen Server.

Wie stelle ich das an, dass ich ihm eine art Fake Get Verbindung zuschiesse, damit ich an die Header Infos der Datei komme (if-modified-since oder so ähnlich heisst die Variable)??

Für Hilfe wäre ich sehr dankbar!

Verfasst: 07.07.2004 13:32
von Pyramide
Geht warscheinlich nur direkt über Sockets (siehe [php:fsockopen])

Verfasst: 07.07.2004 14:16
von Tekknotrip
wie kann ich aber dabei ein file direkt ansprechen....das geht doch in dem fall nur mit einer direkten ansprache des servers!?

Verfasst: 07.07.2004 14:24
von saerdnaer
hast du auf den externen server zugiff?

ansonsten musst du dir ein scirpt suchen das sich mit dem http server unterhalten kann. ( in diesem script taucht das fsockopen wieder auf )

ah

edit: in dem kommantaren ist sogar eins das du verwenden kannst:

Code: Alles auswählen

<?php
   /*
   * @return boolean
   * @param  string $link
   * @desc  Überprüft die angegeben URL auf Erreichbarkeit (HTTP-Code: 200)
   */
   function url_validate( $link )
   {        
       $url_parts = @parse_url( $link );

       if ( empty( $url_parts["host"] ) ) return( false );

       if ( !empty( $url_parts["path"] ) )
       {
           $documentpath = $url_parts["path"];
       }
       else
       {
           $documentpath = "/";
       }

       if ( !empty( $url_parts["query"] ) )
       {
           $documentpath .= "?" . $url_parts["query"];
       }

       $host = $url_parts["host"];
       $port = $url_parts["port"];
       // Now (HTTP-)GET $documentpath at $host";

       if (empty( $port ) ) $port = "80";
       $socket = @fsockopen( $host, $port, $errno, $errstr, 30 );
       if (!$socket)
       {
           return(false);
       }
       else
       {
           fwrite ($socket, "HEAD ".$documentpath." HTTP/1.0\r\nHost: $host\r\n\r\n");
           // ab hier muss das script geändert werden...
           $http_response = fgets( $socket, 22 );

           if ( ereg("200 OK", $http_response, $regs ) )
           {
               return(true);
               fclose( $socket );
           } else
           {
//                echo "HTTP-Response: $http_response<br>";
               return(false);
           }
       }
   }
?> 

Verfasst: 08.07.2004 10:10
von Tekknotrip
Ahhh, danke....
Habe mittlerweile n anderes Problem, dass mich mein eigener Webserver nicht mehr durchlässt (falscher Header von Server 1 zu 2 :-) )

Ich mach jetzt einach immer einen 30 sek. check (ist das file 30 sek. alt? -> Wen ja, dann hol von server 2 das neue)