2012-03-21 47 views
15

¿Cómo puedo usar php para descargar una imagen desde la URL (por ejemplo: https://www.google.com/images/srpr/logo3w.png) y luego guardarla? Esto es lo que se me ocurrió hasta ahora, me da un error en la función 'file_put_contents'.Descargar la imagen de la URL usando el código php?

<form method="post" action=""> 
<textarea name="text" cols="60" rows="10"> 
</textarea><br/> 
<input type="submit" class="button" value="submit" /> 
</form> 

<?php 
    $img = "no image"; 
    if (isset($_POST['text'])) 
    { 
    $content = file_get_contents($_POST['text']); 
    $img_path = '/images/'; 
    file_put_contents($img_path, $content);  
    $img = "<img src=\"".$img_path."\"/>"; 
    } 
    echo $img; 
?> 

Me da el error:

[function.file-put-contents]: failed to open stream: No such file or directory in C:\wamp\www\img.php

/images/ El directorio se encuentra en el mismo directorio del archivo PHP y se puede escribir.

+0

4 respuestas en 1min !! Espero que tus problemas se resuelvan rápidamente. –

+0

¿nunca ha aceptado ninguna respuesta? Amablemente vota y acepta las respuestas que te ayudaron. –

+0

@Rohit Lo siento, pero ¿cómo acepto las respuestas? – Sarah

Respuesta

30

No puede guardar la imagen con su código existente porque no proporciona un nombre de archivo. Es necesario hacer algo como:

$filenameIn = $_POST['text']; 
$filenameOut = __DIR__ . '/images/' . basename($_POST['text']); 

$contentOrFalseOnFailure = file_get_contents($filenameIn); 
$byteCountOrFalseOnFailure = file_put_contents($filenameOut, $contentOrFalseOnFailure); 
+0

Gracias por responder. Ya usé 'file_get_contents' en el código. Funciona bien, pero no puedo guardar la imagen. – Sarah

+0

@Sarah: Mi mal, he leído mal el código. Editado la respuesta mientras tanto. – Jon

+0

Este es el error que obtengo: '[function.file-put-contents]: error al abrir la secuencia: No existe ningún archivo o directorio en C: \ wamp \ www \ img.php en la línea 14' – Sarah

0

file_put_contents() requiere primer parámetro a ser el nombre del archivo no es el camino.

1

¿Cuál es su error? Pero tienes la manera correcta de hacer lo que quieres hacer.

Solo tenga cuidado en su código, puedo ver file_put_contents($img_path, pero $img_path es una ruta a una carpeta. Usted tiene que escribir algo como:

ejemplo

$img_path="home/downloads/my_images"; 
file_put_contents($img_path."/flower.jpg"); 
+0

¡Gracias por responder! ¿Debo especificar el nombre de la imagen en el código? – Sarah

+1

Sí, podría usar su $ _POST ['text'] pero tenga en cuenta los malos contenidos. Necesita desinfectar su $ _POST y luego trabajar en él para obtener el nombre de la imagen. Mira [basename] (http://ca3.php.net/manual/fr/function.basename.php) puede ayudar. – NeeL

+0

Mire la respuesta de Jon;) – NeeL

0
file_put_contents($img_path, $content); 

¿En qué estás poniendo a ?? Creo que ha cometido un error con get y put. o perdidas para especificar la ruta completa, incluido el nombre de archivo y extensión

5

Si ha allow_url_fopen se define como true:

 $url = 'http://example.com/image.php'; 
    $img = '/my/folder/flower.gif'; 
    file_put_contents($img, file_get_contents($url)); 

uso Else cURL:

 $ch = curl_init('http://example.com/image.php'); 
    $fp = fopen('/my/folder/flower.gif', 'wb'); 
    curl_setopt($ch, CURLOPT_FILE, $fp); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_exec($ch); 
    curl_close($ch); 
    fclose($fp); 
+0

Intenté usar cURL, no funcionó. Gracias de todos modos :) – Sarah

+0

comprobar el tiempo has habilitado curl .. – Pushparaj

+6

Esta respuesta parece familiar http://stackoverflow.com/questions/724391/saving-image-from-php-url – Dan

0

añadí una condición de respuesta aceptada para comprobar el tipo de imagen de la siguiente manera,

if (exif_imagetype($_POST['text']) == IMAGETYPE_PNG) { 
    $filename = './images/'.basename($_POST['text']); 
    file_put_contents($filename, $content); 
} 

del ejemplo anterior muestro ho w para comprobar las imágenes png antes de descargar los archivos y para obtener más tipos de contenido puede encontrar here.

Cuestiones relacionadas