Schnaps: Automatischer Bilderdownload

Moin,

ich habe eine Homepage gemacht auf der ich auch einen Content Service benutze der täglich neue News automatisch einblendet, das geht auch alles.

Seit kurzem wird von diesem Service auch ein Bild zu den jeweiligen Atikeln angeboten. Die jeweiligen Bilder sind in einem Passwortgeschützen bereich, und werden über einen bestimmten Pfad runtergeladen, nur der name des Bildes (eine steigende Zahl) ändert sich.

An die Zahl komme ich auch ran und kann so die einzelnden Bilder ansprechen, was ich nun aber brauche ist ein Script das mir die jeweiligen Bilder aus diesem Ordner auf dem anderen Server auf meinen Server runterlädt und es dabei direkt umbenennt.

Wie gehe ich da ran, welche Befehle gibt es dafür, hab so etwas in der Art noch nicht gemacht mit PHP.

MFG
Schnaps

[b]EDIT[/b]

Ich habe auch weiter bei Google gesucht  aber nichts richtiges gefunden, einer hat etwas ähnliches gehabt und mit dem Befehl copy() gearbeitet, ich habe mir diesen dann mal im Manual angeschaut und danach diesen Code geschrieben, das Bild an dieser Stelle gibt es 100%ig, ich habe heir natürlich mein pw ausge x t.

[quote]<?php
$file="hier.jpg";
if (!copy("http://xxxx:xxxx@contentservice.wortundbildverlag.de/WUBPICS/big/13997.jpg", $file)) {
   print ("failed to copy $file...<br>\n");
}
?> [/quote]

Ist an dem Aufruf etwas falsch, oder bin ich sogr komplett auf dem Holzweg?

Etwas Hilfe wäre nett

MFG
Schnaps

  1. Hallo,

    if (!copy("http://xxxx:xxxx@contentservice.wortundbildverlag.de/WUBPICS/big/13997.jpg", $file))

    Das Schema username:passwort@www.example.com ist in HTTP falsch.
    Es "funktioniert" - noch - zufaellig in ein paar _Browsern_,
    aber nicht mit PHP.
    (Im MS IE wird es vermutlich mit den neuesten Service Packs
    nicht mehr funktionieren.)

    Man kann aber auch mit PHP "Browser spielen", d.h. per HTTP
    gewisse Anfragen an Webserver schicken und dann die Antworten,
    die ebenfalls per HTTP reinkommen, auswerten.
    Auch die "Credentials" (Benutzername und Passwort) fuer
    Basic Authentication kann man so uebermitteln.

    In den Benutzerkommentaren auf der Manual-Seite zu fsockopen()
    http://www.php.net/manual/de/function.fsockopen.php
    hat es ein paar Beispiele.
    Ich selbst verwende die folgende Funktion (Vorgeschlagen von Ben Blazely),
    um aus einem passwortgeschuetzten Bereich eines Webservers
    (Text-)Daten abzuholen:

    function connecttourl($addr, $port, $path, $user="", $pass="", $timeout="30")
           {
            $urlHandle = fsockopen($addr, $port, $errno, $errstr, $timeout);
            if ($urlHandle)
              {
                    socket_set_timeout($urlHandle, $timeout);
                    if ($path)
                    {
                            $urlString = "GET $path HTTP/1.0\r\nHost: $addr\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)\r\n";
                            if ($user)
                                    $urlString .= "Authorization: Basic ".base64_encode("$user:$pass")."\r\n";
                            $urlString .= "\r\n";
                            // folgende Zeile nur zur Veranschaulichung:
                            echo "<pre>".htmlentities($urlString)."</pre>\n";

    fputs($urlHandle, $urlString);
                            $response = fgets($urlHandle);
                            if (substr_count($response, "200 OK") > 0)      // Check the status of the link
                            {
                                    $endHeader = false;                     // Strip initial header information
                                    while ( !$endHeader)
                                    {
                                            if (fgets($urlHandle) == "\r\n")
                                                    $endHeader = true;
                                    }
                                    return $urlHandle;                      // All OK, return the file handle
                            }
                            else if (strlen($response) < 15)                // Cope with wierd non standard responses
                            {
                                    fclose($urlHandle);
                                    return -1;
                            }
                            else                                            // Cope with a standard error response
                            {
                                    fclose($urlHandle);
                                    return substr($response,9,3);
                            }
                    }
                    return $urlHandle;
              }
            else
                    return 0;
           } // Ende der Funktion connecttourl

    /* Und so greife ich auf die Funktion zu: */

    $addr="www.example.com";
    $port="80";
    $path="/verzeichnis/datei.xyz?bla=1&foo=2";
    $user="Benutzername";
    $pass="Passwort";

    $urlhandle=connecttourl($addr, $port, $path, $user, $pass);
    $inhalt="";
    if (($urlhandle<1) OR (is_numeric($urlhandle)))
      {
       echo "<p>Problem mit der Seite <a href='http://$addr$path'>$addr$path</a> - urlhandle=($urlhandle).</p>\n";
      }
    else
      {
       echo "<p>Seite <a href='http://$addr$path'>$addr$path</a> erreicht; urlhandle=($urlhandle).</p>\n";
       while (!feof($urlhandle))
        {
         $inhalt.=fgets($urlhandle,128);
        }
       fclose($urlhandle);
      }

    Wenn alles geklappt hat, steht nun die ganze Antwort des Webservers
    in der Variable $inhalt

    Diese koennte man nun also mit den geeigneten Datei-Funktionen
    in eine Datei auf dem eigenen Server schreiben.
    Bei Dir sind Bilder im Spiel, also binaere Daten.
    Das macht es evtl. etwas komplizierter, aber das Prinzip bleibt gleich.

    HTH, Gruesse,

    Thomas

    --
    Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
    Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
    Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/