Donwload immagine da url specificato...in una cartella del proprio pc...

pagliacciopazzo

Nuovo Utente
16 Mag 2010
1
0
0
Salve a tutti
questo è il mio primo post... ma spero sia il primo di tanti visto che mi sono avvicinato al mondo php già da un pò e questo mi appassiona molto!!!
D'altra parte giracchio sul sito già da almeno un annetto: da voi ho appreso le basi sull'HTML, XML e adesso anche del PHP
Comunque veniamo a noi...
Sto realizzando uno script semplice semplice che mi dovrebbe consentire di fare il download di una immagine di cui possiedo l'URL direttamente sul pc ovviamente posizionandola su una cartella da ne specificata.
Già anticipo che, essendo alle prime armi, con qualche difficoltò, sul web ho individuato parti di script mettendoli insieme e caricati su uno spazio web di altervista.
Il risultato è che mi scarica l'immagine sul web server senza dargli alcuna dimensione...quindi neanche leggibile...

...ma io la voglio sul mio pc!!!
Ho capito che sicuramente sbaglio nell'indicare la destinazione ma ho provato di tutto.

Di seguito riporto il mio lavoro:

<?php
if (isset($_POST[dom])){
$root=str_replace($_SERVER["PHP_SELF"],"",$_SERVER["SCRIPT_FILENAME"]);//gia' presente all'inizio
$my_save="C:\Documents and Settings\Administrator\Desktop\IMACROS";//scrivere qui la directory, con permessi 775, in cui intendiamo salvare le immagini
function get_data($url)
{//preleva la pagina web data da $url
$ch = curl_init();//inizializza una nuova sessione e restituisce l'handle $ch
$timeout = 10;//5
curl_setopt($ch,CURLOPT_URL,$url);//$url e' l'URL che si desidera far salvare da PHP
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//con 1 per ottenere il trasferimento invece di stamparlo.
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);//fissa il timeout
$data = curl_exec($ch);//acqisisce il contenuto di URL in $data
curl_close($ch);//termina la sessione curl
return $data;//resituisce il contenuto di URL
}
echo "<h1>Elenco Immagini salvate in directory target</h1>";
$dom = $_POST[dom];
$ste = parse_url($dom);//acquisisce parti URL in array $ste
$sito = "http://".$ste[host];//acquisisce hostname dell'URL in $sito
$source=get_data($dom);//legge il contenuto della pagina Web
$doc = new DOMDocument;//alloca lo spazio per contenere un documento
$doc->loadHTML($source);//carica il documento $source
$xpath = new DOMXPath($doc);//inizializza la funzione query per processare il documento $doc
$nodo = $xpath->query('//img[@src]');//seleziona i tag img
$n=0;

foreach ($nodo as $nodo){
$n++;
$imgsrc = $nodo->getAttribute('src');//aquisisce valore di src nel tag img
$ste=parse_url("$imgsrc");
$hostsrc=$ste[host];
//echo "$imgsrc ";
if(empty($hostsrc)){//se non inizia col nome host del sito forma il corretto URL
if(substr($imgsrc,0,2) == "./"){
$imgsrc=$sito.substr($imgsrc,1);
//echo "trasformo in $imgsrc";
}
else if (substr($imgsrc,0,1) == "/"){
$imgsrc="$sito$imgsrc";
//echo "trasformo in $imgsrc";
}
else{
$imgsrc="$sito/$imgsrc";
//echo "trasformo in $imgsrc";
}
}
$nome_file=urlencode(basename("$imgsrc"));
$file_target=$my_save.$nome_file;
$target=$root.$file_target;
$size = getimagesize($imgsrc);//prende info immagine
$X = $size[0]; //larghezza immagine<br />
$Y = $size[1]; //altezza immagine<br />
$file_type= $size['mime'];//tipo di immagine
if("$file_type" == "image/pjpeg" || "$file_type" == "image/jpeg"){
$img=imagecreatefromjpeg($imgsrc);
$file_target=$file_target.".jpg";
imagejpeg ($img, $target.".jpg",100);// 100 stabilisce la max qualita' dell'immagine, 75 e' un buon compromesso tra qualita' e occupazione spazio
}
else if("$file_type" == "image/x-png" || "$file_type" == "image/png"){
$img=imagecreatefrompng($imgsrc);
$file_target=$file_target.".png";
imagealphablending($img, false);
imagesavealpha ($img, true);//imagealphablending e imagesavealpha per mantenere la trasparenza delle png
imagepng ($img, $target.".png",0);//livello di compressione variabile da 0 (nessuna compressione) a 9 (max compressione)
}
else if("$file_type" == "image/gif"){
$img=imagecreatefromgif($imgsrc);
$file_target=$file_target.".gif";
imagegif ($img,$target.".gif");
}
echo "<img src=\"$file_target\" alt=\"$nome_file\" title=\"$nome_file\" border=\"1\"> ";
imagedestroy($img);

}
echo "<hr>";
}
?>
<h3>Per acquisire immagini da una pagina Web e salvarle in una propria Directory</h3>
<form name="form1" method="post" action="" >
Nome completo della pagina Web: <input type="text" name="dom" value="http://">
<input type="submit" value="Invia">
</form>


Questo è tutto...
attendo consigli e istruzioni per risolvere questo problema ma soprattutto accetto consigli per rendere più facile i miei studi sul php...
Grazie
Fabio
:)
PS: ma questi permessi 775 cosa sarebbero precisamente?
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Guarda, la soluzione al tuo problema è molto semplice: non c'è nessuna soluzione. Infatti, per ovvie ragioni di sicurezza, non puoi scaricare in maniera trasparente un file sul computer dell'utente, in nessun linguaggio di scripting/programmazione. E in PHP diventa impossibile anche per questioni tecniche, essendo un linguaggio interpretato dal server e non dal client. Al massimo puoi forzare il download del file, ma comunque l'utente dovrà decidere se scaricarlo o meno. A questo proposito ti consiglio di dare un'occhiata a questo articolo: https://www.mrw.it/php/articoli/forzare-download-file-php_963.html.

Ti presento un esempio di come potrebbe essere il tuo script:
PHP:
<?php
// nome del file (input/outpuut)
$input = 'http://www.nomesito.com/immagine.jpg';
$output = pathinfo($input, PATHINFO_FILENAME) . pathinfo($input, PATHINFO_EXTENSION);

// inizializzo cURL
$ch = curl_init();

// imposto le opzioni
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL, $file);

// eseguo il download
$contents = curl_exec($ch);

// imposto gli header
header('Cache-Control: public');
header('Content-Disposition: attachment; filename= ' . $output);
header('Content-Transfer-Encoding: binary');

// invio i dati
echo $contents;
?>
 
Ultima modifica:

giacomone1

Nuovo Utente
22 Mag 2010
1
0
0
da neofita sarei interessato anche io ad una cosa simile, ma anzichè scaricare l'immagine nel pc, mi servirebbe scaricarla in una cartella del server dichiarata da me.
uso questo script trovato nel web ed effettivamente esegue la procedura e scarica l'immagine nella cartella dove risiede lo script , ma c'è un piccolo particolare l'immagine salvata ha un peso 0 kb, quindi non valida, ora michiedo è colpa dello script o del server ??
il server è altervista con curl e fsockopen abilitati.
un altra cosa cosa va modificato per cambiare la cartella di destinazione ?
grazie.

Codice:
<?php

//function to get image with fsockopen
function GetImg($host,$link)
{
$fp = fsockopen($host, 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr (error number $errno)
\n";
} else {
$out = "GET $link HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Connection: Close\r\n\r\n";
$out .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
$out .= "Accept-Language: en-us,en;q=0.5\r\n";
$out .= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
$out .= "Keep-Alive: 300\r\n";   
$out .= "\r\n";
fwrite($fp, $out);
$contents='';
while (!feof($fp)) {
$contents.= fgets($fp, 1024);
}
fclose($fp);
return $contents;
}
}

//function to get image with CURL
function GetImageFromUrl($link)
 
{
 
$ch = curl_init();
 
curl_setopt($ch, CURLOPT_POST, 0);
 
curl_setopt($ch,CURLOPT_URL,$link);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
$result=curl_exec($ch);
 
curl_close($ch);
 
return $result;
 
} 
//1. Method file_Get contents
$contents= file_get_contents('http://www.google.com/intl/en_ALL/images/logo.gif');
//2.Method fsockopen
	//$contents=GetImg("www.google.com","/intl/en_ALL/images/logo.gif");
	//$contents=strchr($contents,"\r\n\r\n");//removes headers
	//$contents=ltrim($contents);//remove whitespaces from begin of the string
//3. Method CURL
	//$contents = GetImageFromUrl("http://www.google.com/intl/en_ALL/images/logo.gif");
$savefile = fopen('image.jpg', 'w');
fwrite($savefile, $contents);
fclose($savefile);

?>
 
Discussioni simili
Autore Titolo Forum Risposte Data
felino Donwload file CSV con filename Javascript 1
F Aiuto! cambio immagine di sfondo al cambio pagina HTML e CSS 2
gara1 inserire immagine di sfondo in canvas Javascript 0
T Dividere un'immagine in 3 parti orizzontali e salvarle separatamente Photoshop 2
W Immagine come maschera photoshop Photoshop 1
L Ultima immagine Windows e Software 0
A Immagine decentrata con sfondo trasparente Photoshop 0
A Scontornare immagine di bassa qualità. Photoshop 2
B Selezionare un'immagine e salvare la selezione Photoshop 3
F Immagine come fosse selezione attiva Photoshop 1
Y Percorso assoluto file immagine HTML e CSS 9
K Come posso usare un'immagine al posto di un bottone? HTML e CSS 2
M Upload immagine con javascript problemi con FormData() Javascript 1
M Visulizzare immagine con php PHP 8
Stex1967 Salvare una immagine che si trova su porta TCP 8080 di altro sito PHP 7
L Come caricare un'immagine in Canvas dinamicamente Javascript 0
R Cambiare il nome dell'immagine dopo caricamento ftp HTML e CSS 0
L salvare una immagine elaborata in canvas Javascript 1
L salvare una immagine elaborata in canvas Javascript 1
Y Come caricare e visualizzare un'immagine PHP 0
S Testo scrolla su immagine che cambia HTML e CSS 0
M Quando ha l'immagine ingrandita è possibile fare rotazione per ritagliare? Photoshop 0
R Caricamento immagine su cartella remota + mysql PHP 3
R Non riesco a rinnovare l'immagine di sfondo PHP 1
R Non riesco a cambiare l'immagine di sfondo PHP 4
L Upload di un'immagine all'interno di un database usando php PHP 6
G Modifica immagine di sfondo attraverso un bottone PHP 18
F photoshop portable : spostamento immagine Photoshop 0
A Server Apache immagine not found (ERROR 404) Apache 5
P [Photoshop] ritagliare una immagine Photoshop 1
S [PHP] Recupero nome immagine da Form con input file PHP 3
D [Javascript] salvare immagine canvas - paypal Javascript 0
D [HTML] Inviare un link contenente un' immagine HTML e CSS 4
M [PHP] Cercare l'ultima immagine caricata in una cartella datata PHP 15
C [Photoshop] bordi tondi come posso fare per ottenerli come nell'immagine allegata Photoshop 2
M [HTML] Tasto condivisione social e immagine HTML e CSS 2
R [HTML] Effetto carousel di testo su immagine fissa HTML e CSS 2
L [HTML] problema sfondo tutto schermo con immagine HTML e CSS 1
A Php variabile immagine inesistente PHP 4
R [PHP] Testo su immagine al passaggio del mouse PHP 2
L [PHP] controllo dimensione immagine per il resize PHP 2
felino [Wordpress] Immagine di sfondo (sotto il template) WordPress 8
Shyson [HTML] Sovrapporre un'immagine su un'altra HTML e CSS 2
A [PHP] Segnalazione in up-load immagine PHP 2
C [PHP] Scrivere testo su immagine PHP 3
E [HTML] Allineamento immagine agli angoli inferiori di un div HTML e CSS 12
A [WordPress] Link multiplo su immagine WordPress 9
I [Photoshop] Come realizzare immagine tonalità di grigio Photoshop 0
edittaruocco [Photoshop] Immagine in editor grafico Photoshop 0
A Salvare immagine ridimensionata in MySql con GD PHP 12

Discussioni simili