Estoy buscando una forma sencilla de importar / copiar imágenes desde un servidor remoto a una carpeta local usando PHP. No tengo acceso FTP al servidor, pero se puede acceder a todas las imágenes remotas a través de HTTP (es decir, http://www.mydomain.com/myimage.jpg ).
Ejemplo de uso: un usuario desea agregar una imagen a su perfil. La imagen ya existe en la web y el usuario proporciona una URL directa. No deseo vincular la imagen, sino importar y servir desde mi dominio.
Respuestas:
Si tiene PHP5 y el contenedor de flujo HTTP habilitado en su servidor, es increíblemente simple copiarlo en un archivo local:
copy('http://somedomain.com/file.jpeg', '/tmp/file.jpeg');
Esto se encargará de cualquier canalización, etc.que sea necesario. Si necesita proporcionar algunos parámetros HTTP, hay un tercer parámetro de 'contexto de transmisión' que puede proporcionar.
fuente
http://desmond.imageshack.us/Himg100/scaled.php?server=100&filename=desertoh.jpg&res=crop
???utilizar
$imageString = file_get_contents("http://example.com/image.jpg"); $save = file_put_contents('Image/saveto/image.jpg',$imageString);
fuente
PHP tiene una función incorporada file_get_contents (), que lee el contenido de un archivo en una cadena.
Si desea almacenar el archivo en una base de datos, simplemente use la variable $ content y no guarde el archivo en el disco.<?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); ?>
fuente
Tienes estas cuatro posibilidades:
Archivos remotos . Esto debe
allow_url_fopen
estar habilitado en php.ini, pero es el método más sencillo.Alternativamente, puede usar cURL si su instalación de PHP lo admite. Incluso hay un ejemplo .
Y si realmente quieres hacerlo manualmente usa el módulo HTTP .
Ni siquiera intente usar enchufes directamente .
fuente
Esta es la forma más básica:
$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);
Pero si está haciendo mucho, mucho de esto (o su host bloquea el acceso a archivos a sistemas remotos), considere usar CURL, que es más eficiente, ligeramente más rápido y está disponible en más hosts compartidos.
¡También puede falsificar el agente de usuario para que parezca un escritorio en lugar de un bot!
$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);
Con ambos casos, es posible que desee pasarlo a través de GD para asegurarse de que realmente sea una imagen.
fuente
curl_exec($ch)
antescurl_close($ch)
yfclose($ch)
debe colocarse al final en lugar de antescurl_close($ch)
, eso significa cerrar el archivo antes de que no se haya escrito nada en el archivo, por lo tanto, solo obtendrá un archivo vacío.Es extremadamente simple usar file_get_contents . Simplemente proporcione la URL como primer parámetro.
fuente
crear carpeta y nombrarla ejemplo de enemigo descargar libreta abierta e insertar este código
solo cambie http://www.google.com/aa.zip a su archivo y guárdelo en m.php, por ejemplo
chamod el archivo php a 666 y la carpeta de descarga a 777
<?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); ?>
finalmente desde su navegador ingrese a estas URL http://www.example.com/download/m.php
Verá en la carpeta de descarga el archivo descargado desde otro servidor
Gracias
fuente
Utilice una solicitud GET para descargar la imagen y guardarla en un directorio accesible desde la web en su servidor.
Como está utilizando PHP, puede utilizar
curl
para descargar archivos del otro servidor.fuente
Como ha etiquetado su pregunta como 'php', asumiré que está ejecutando php en su servidor. Su mejor opción es si controla su propio servidor web, luego compile cURL en php. Esto permitirá que su servidor web realice solicitudes a otros servidores web. Esto puede ser bastante peligroso desde el punto de vista de la seguridad, por lo que la mayoría de los proveedores de alojamiento web básico no tendrán esta opción habilitada.
Aquí está la página de manual de php sobre el uso de cURL . En los comentarios puede encontrar un ejemplo que descarga un archivo de imagen.
Si no desea usar libcurl, puede codificar algo usando fsockopen. Esto está integrado en php (pero puede estar deshabilitado en su host) y puede leer y escribir directamente en sockets. Consulte Ejemplos en la página de manual de fsockopen .
fuente
Para aquellos que necesitan conservar el nombre de archivo y la extensión originales
$origin = 'http://example.com/image.jpg'; $filename = pathinfo($origin, PATHINFO_FILENAME); $ext = pathinfo($origin, PATHINFO_EXTENSION); $dest = 'myfolder/' . $filename . '.' . $ext; copy($origin, $dest);
fuente
Esta respuesta me ayudó a descargar la imagen del servidor al lado del cliente.
<a download="original_file.jpg" href="file/path.jpg"> <img src="file/path.jpg" class="img-responsive" width="600" /> </a>
fuente