2010-01-05 5 views
6

En PHP en utilisant GD ou imagemagick comment puis-je télécharger une photo à partir d'une URL, je veux construire une fonction que je peux passer dans quelques paramètres et uplaod l'image, je Je peux actualiser une grande image, la redimensionner plus petite, puis redimensionner d'autres vignettes et enregistrer tous les emplacements dans une image, mais je voudrais ajouter la possibilité d'obtenir une image à partir d'une URL, puis exécuter mon code sur redimensionner et faire des pouces.Comment puis-je télécharger une image à partir d'une URL en PHP

Est-ce que je CURL ou autre chose d'exemple ou des idées seraient grandement appréciés

Répondre

11
$image = @ImageCreateFromString(@file_get_contents($imageURL)); 

if (is_resource($image) === true) 
{ 
    // image is valid, do your magic here 
} 

else 
{ 
    // not a valid image, show error 
} 

Le @ sur les deux fonctions sont là pour éviter que PHP lancer des erreurs si l'URL n'est pas une image valide.

+1

devrait probablement ajouter le drapeau' FILE_BINARY' ... – Rob

+0

@Rob: FILE_BINARY: Ce ** est le paramètre par défaut ** et ne peut pas être utilisé avec FILE_TEXT. Sans compter que cela ne s'applique qu'à PHP 6. –

+0

Cela semble génial si ça fonctionne comme je le veux, Donc dans ce cas, $ image a effectivement le fichier sur la mémoire de mes serveurs, comme si je devais télécharger avec un post de formulaire ? – JasonDavis

2

En fonction de votre configuration PHP, fopen peut ou non permettre directement: http://php.net/manual/en/function.fopen.php

Vous pouvez ouvrir un socket (http://php.net/manual/en/book.sockets.php) et écrire/lire HTTP (http://www.faqs.org/rfcs/rfc2616.html) directement. Je n'utiliserais pas curl à moins que vous soyez très prudent au sujet des permissions (en particulier exécuter), ou que je puisse garantir que personne ne puisse accéder à l'outil, car vous ouvrirez effectivement une avenue potentielle d'attaque (enfin, à proprement parler, sont, mais cela a quelques différentes façons dont il peut être abusé)

0
$img = ''; 
$fp = fopen($url, 'rb'); 
if($fp) { 
    while($buf = fread($fp, 1024)) { 
     $img .= $buf; 
    }  
} 
fclose($fp); 

// url en supposant fopen wrappers sont activés

+0

Cela fonctionne, mais 'file_get_contents' est de loin préférable –

Questions connexes