2010-01-05 12 views
6

In PHP usando GD o imagemagick come posso caricare una foto da un URL, voglio costruire una funzione che posso passare in pochi parametri e ingrandire l'immagine, I può currentyl risalire a una grande immagine, ridimensionarla, ridimensionarla e ridimensionarla in tutte le posizioni da 1 immagine, ma vorrei aggiungere la possibilità di ottenere un'immagine da un URL e quindi eseguire il mio codice su di essa per ridimensionare e fare pollici.Come posso caricare un'immagine da un URL in PHP

dovrei usare ricciolo o qualcos'altro alcun esempio o idee sarebbe molto apprezzato

risposta

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 
} 

La @ su entrambe le funzioni è quello di evitare PHP da gettare errori se l'URL non è un'immagine valida.

+1

dovrebbe probabilmente aggiungere il flag' FILE_BINARY' ... – Rob

+0

@Rob: FILE_BINARY: Questa ** è l'impostazione predefinita ** e non può essere utilizzata con FILE_TEXT. Per non parlare del fatto che si applica solo a PHP 6. –

+0

Questo sembra meraviglioso se funziona come voglio, Quindi in questo caso l'immagine $ ha effettivamente il file nella memoria del mio server, proprio come se dovessi caricare con un modulo di posta ? – JasonDavis

2

A seconda della configurazione di PHP, fopen può o non può consentire direttamente: http://php.net/manual/en/function.fopen.php

In alternativa, è possibile aprire una presa (http://php.net/manual/en/book.sockets.php) e scrivere/leggere HTTP (http://www.faqs.org/rfcs/rfc2616.html) direttamente. Non userei il ricciolo a meno che tu non stia MOLTO attento alle autorizzazioni (specialmente all'esecuzione), o puoi garantire che nessun malintenzionato abbia accesso allo strumento, in quanto aprirai efficacemente una potenziale via di attacco (beh, in senso stretto, tu già sono, ma questo ha diversi modi può essere abusato)

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

// assumendo uRL fopen involucri sono abilitati

+0

Questo funziona, ma 'file_get_contents' è preferibile di gran lunga –

Problemi correlati