Ich suche nach einer einfachen Möglichkeit, Bilder mit PHP von einem Remote-Server in einen lokalen Ordner zu importieren / kopieren. Ich habe keinen FTP-Zugriff auf den Server, aber auf alle Remote-Images kann über HTTP zugegriffen werden (dh http://www.mydomain.com/myimage.jpg ).
Anwendungsbeispiel: Ein Benutzer möchte seinem Profil ein Bild hinzufügen. Das Bild ist bereits im Web vorhanden und der Benutzer gibt eine direkte URL an. Ich möchte das Bild nicht per Hotlink verknüpfen, sondern von meiner Domain importieren und bereitstellen.
Antworten:
Wenn Sie PHP5 und den HTTP-Stream-Wrapper auf Ihrem Server aktiviert haben, ist es unglaublich einfach, ihn in eine lokale Datei zu kopieren:
copy('http://somedomain.com/file.jpeg', '/tmp/file.jpeg');
Dies kümmert sich um alle Pipelining usw., die benötigt werden. Wenn Sie einige HTTP-Parameter angeben müssen, können Sie einen dritten 'Stream-Kontext'-Parameter angeben.
quelle
http://desmond.imageshack.us/Himg100/scaled.php?server=100&filename=desertoh.jpg&res=crop
?verwenden
$imageString = file_get_contents("http://example.com/image.jpg"); $save = file_put_contents('Image/saveto/image.jpg',$imageString);
quelle
PHP verfügt über eine integrierte Funktion file_get_contents (), die den Inhalt einer Datei in eine Zeichenfolge liest.
Wenn Sie die Datei in einer Datenbank speichern möchten, verwenden Sie einfach die Variable $ content und speichern Sie die Datei nicht auf der Festplatte.<?php //Get the file $content = file_get_contents("http://example.com/image.jpg");
//Store in the filesystem. $fp = fopen("/location/to/save/image.jpg", "w"); fwrite($fp, $content); fclose($fp); ?>
quelle
Sie haben ungefähr diese vier Möglichkeiten:
Remote-Dateien . Dies muss
allow_url_fopen
in der php.ini aktiviert sein, ist aber die einfachste Methode.Alternativ können Sie cURL verwenden, wenn Ihre PHP-Installation dies unterstützt. Es gibt sogar ein Beispiel .
Und wenn Sie es wirklich manuell tun möchten, verwenden Sie das HTTP-Modul .
Versuchen Sie nicht einmal, Steckdosen direkt zu verwenden .
quelle
Hier ist der grundlegendste Weg:
$url = "http://other-site/image.png"; $dir = "/my/local/dir/"; $rfile = fopen($url, "r"); $lfile = fopen($dir . basename($url), "w"); while(!feof($url)) fwrite($lfile, fread($rfile, 1), 1); fclose($rfile); fclose($lfile);
Wenn Sie jedoch viel und viel davon tun (oder Ihr Host den Dateizugriff auf Remote-Systeme blockiert), sollten Sie CURL verwenden, das effizienter, etwas schneller und auf gemeinsam genutzten Hosts verfügbar ist.
Sie können den Benutzeragenten auch so fälschen, dass er eher wie ein Desktop als wie ein Bot aussieht!
$url = "http://other-site/image.png"; $dir = "/my/local/dir/"; $lfile = fopen($dir . basename($url), "w"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'); curl_setopt($ch, CURLOPT_FILE, $lfile); fclose($lfile); curl_close($ch);
In beiden Fällen möchten Sie es möglicherweise über GD weiterleiten, um sicherzustellen, dass es sich wirklich um ein Bild handelt.
quelle
curl_exec($ch)
zuvor verpasstcurl_close($ch)
undfclose($ch)
sollten am Ende und nicht am Ende platziert werden. Diescurl_close($ch)
bedeutet, dass Sie die Datei schließen müssen, bevor nichts in die Datei geschrieben wurde. Daher erhalten Sie nur eine leere Datei.Mit file_get_contents ist das ganz einfach . Geben Sie einfach die URL als ersten Parameter an.
quelle
Ordner erstellen und benennen Feind Beispiel Download Notizblock öffnen und diesen Code einfügen
Ändern Sie nur http://www.google.com/aa.zip in Ihre Datei und speichern Sie sie beispielsweise in m.php
chamod die PHP-Datei auf 666 und den Ordner auf 777 herunterladen
<?php define('BUFSIZ', 4095); $url = 'http://www.google.com/aa.zip'; $rfile = fopen($url, 'r'); $lfile = fopen(basename($url), 'w'); while(!feof($rfile)) fwrite($lfile, fread($rfile, BUFSIZ), BUFSIZ); fclose($rfile); fclose($lfile); ?>
Geben Sie schließlich von Ihrem Browser aus diese URL ein: http://www.example.com/download/m.php
Im Download-Ordner wird die Datei angezeigt, die von einem anderen Server heruntergeladen wurde
Vielen Dank
quelle
Verwenden Sie eine GET-Anforderung, um das Bild herunterzuladen und in einem über das Internet zugänglichen Verzeichnis auf Ihrem Server zu speichern.
Während Sie PHP verwenden, können Sie
curl
Dateien vom anderen Server herunterladen.quelle
Da Sie Ihre Frage mit "PHP" markiert haben, gehe ich davon aus, dass Ihr PHP auf Ihrem Server ausgeführt wird. Am besten kompilieren Sie cURL in PHP, wenn Sie Ihren eigenen Webserver steuern. Auf diese Weise kann Ihr Webserver Anforderungen an andere Webserver stellen. Dies kann aus Sicherheitsgründen sehr gefährlich sein, sodass die meisten einfachen Webhosting-Anbieter diese Option nicht aktivieren.
Hier ist die PHP-Manpage zur Verwendung von cURL . In den Kommentaren finden Sie ein Beispiel für das Herunterladen und die Bilddatei.
Wenn Sie libcurl nicht verwenden möchten, können Sie mit fsockopen etwas codieren. Dies ist in PHP integriert (kann aber auf Ihrem Host deaktiviert sein) und kann direkt in Sockets lesen und schreiben. Siehe Beispiele auf der Manpage fsockopen .
quelle
Für diejenigen, die den ursprünglichen Dateinamen und die ursprüngliche Erweiterung beibehalten müssen
$origin = 'http://example.com/image.jpg'; $filename = pathinfo($origin, PATHINFO_FILENAME); $ext = pathinfo($origin, PATHINFO_EXTENSION); $dest = 'myfolder/' . $filename . '.' . $ext; copy($origin, $dest);
quelle
Diese Antwort hat mir geholfen, das Bild vom Server auf den Client herunterzuladen.
<a download="original_file.jpg" href="file/path.jpg"> <img src="file/path.jpg" class="img-responsive" width="600" /> </a>
quelle