Back to top

Autore Topic: Salvare immagine da url  (Letto 10346 volte)

Offline james81

  • Appassionato
  • ***
  • Post: 475
  • Sesso: Maschio
    • Mostra profilo
Salvare immagine da url
« il: 03 Mar 2010, 19:13:12 »
Ciao a tutti
ho uno script in php con il quale salvo le url dell immagini all'interno del mio db, volevo sapere come si fà a salvare l'immagine direttamente nel mio spazio web, e salvare il relativo percorso nel mio db.

Graciess

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #1 il: 03 Mar 2010, 23:29:05 »
ciao james81,
 sinceramente non ho capito...
ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline james81

  • Appassionato
  • ***
  • Post: 475
  • Sesso: Maschio
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #2 il: 03 Mar 2010, 23:49:08 »
vorrei riuscire a salvare delle immagini che si trovano online (www.sitoonline.it/immagine1.gpj) nel mio spazio web (Es. cartella www.miosito.it/media/immagine1.jpg)

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #3 il: 04 Mar 2010, 10:48:18 »
premesso che immagino tu sappia che puoi fare una cosa del genere solo se i siti sono tuoi, devi modificare lo script in modo che una volta ottenuto l'url legga l'immagine remota, vedi fopen su php.net

ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline james81

  • Appassionato
  • ***
  • Post: 475
  • Sesso: Maschio
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #4 il: 04 Mar 2010, 11:10:28 »
ehehe sì sì il sito è mio, spiego meglio:

ho un gestionale interno che mi pubblica tramite un file xml la lista prodotti presente nel mio db.

tramite uno script esterno importo i dati del file xml all'interno del mio db. Il problema è che per le immagini mi importa solo il collegamento al mio gestionale.

Purtroppo la banda che ho in ufficio non è sufficentemente potente per caricare le immagini dall'esterno, allora volevo esportarle direttamente nel mio spazio web.

Ho già provato a leggere l'fopen ma non capisco come salvare l'immagine :(

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #5 il: 04 Mar 2010, 12:13:23 »
vediamo se ho capito:

il sito di origine si trova presso la tua azienda e contiene le immagini dei prodotti, in questo il gestionale scrive il file xml.

il sito di destinazione si trova presso un provider e carica il file xml inserendo i dati nel db.

che ne dici di caricare le immagini in ftp (anche in batch) sul sito di destinazione e modificare lo script di importazione perchè modifichi l'url in uno 'locale'?

ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline james81

  • Appassionato
  • ***
  • Post: 475
  • Sesso: Maschio
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #6 il: 04 Mar 2010, 12:44:02 »
due sono le problematiche, la pima è che in azienda non posso far girare script (che mi diventa un casino, e volevo quin di far eseguire tutto dallo script esterno.

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #7 il: 04 Mar 2010, 14:15:11 »
in tal caso devi fare come detto sopra. guarda anche la pagina di fread per un esempio completo di come leggere un file remoto.

ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline james81

  • Appassionato
  • ***
  • Post: 475
  • Sesso: Maschio
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #8 il: 04 Mar 2010, 14:56:32 »
per leggerlo pensavo di seguire questa strada:

la variabile che contiene l'url dell'immagine si chiama $immagine

la stringa per la laettura la compongo così:

$readimage=fopen($immagine,"r");

è che poi non sò come fare

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #9 il: 04 Mar 2010, 15:40:32 »
php.net/manual/en/function.fread.php

trovi l'esempio e la spiegazione di come leggere files remoti.

ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline james81

  • Appassionato
  • ***
  • Post: 475
  • Sesso: Maschio
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #10 il: 04 Mar 2010, 17:11:40 »
per la lettura quell'esempio lo avevo trovato

$filename = "c:\\files\\somepic.gif";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);

una volta che mi sono messo il mio contenuto binario nella variabile $contents  come lo scrivo in uno nuovo file all'interno di una cartella ?

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #11 il: 04 Mar 2010, 18:18:30 »
leggila tutta la pagina e con attenzione: hai sbagliato esempio: "c:\\files\\somepic.gif"  non mi pare un file remoto!!

e poi se non è fprint sarà fwrite  ;D ;D ;D

ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline james81

  • Appassionato
  • ***
  • Post: 475
  • Sesso: Maschio
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #12 il: 10 Mar 2010, 12:32:08 »
si ho sbagliato a postare, il miko caso è:

$filename = $big;
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);

ho trovato questo (è corretto)??

fwrite();
La funzione fwrite(); scrive una stringa nel file di testo che abbiamo aperto.
Esempio:
<?
$var=fopen("nome_file.txt","a+");
fwrite($var, "stringa di prova");
?>
In questo caso abbiamo aperto un file di testo (nome_file.txt) per aggiungere e lettura (a+) ed abbiamo scritto "stringa di prova" alla fine dei dati già scritti.
Nel caso il file non esista il server lo crea e vi scrive la frase da inserire.
« Ultima modifica: 10 Mar 2010, 12:35:14 da james81 »

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #13 il: 11 Mar 2010, 09:44:15 »
mamma mia james!!
php.net/manual/en/function.fread.php, due righe sotto al codice che hai postato tu vi è 'Example #3 Remote fread() examples' a questo basta aggiungere l'fwrite

risulta qualcosa di simile a questo:

Codice: [Seleziona]
$url = "http://www.example.com/";
$img = "img.jpg";
$path = "/var/www/www.sito.com/images";


$handle = fopen("$url/$img", "rb");
$contents = '';
while (!feof($handle)) {
  $contents .= fread($handle, 8192);
}
fclose($handle);

$handle = fopen("$path/$img", 'wb');
fwrite($handle, $contents);
fclose($handle);


senza controlli di errore, e senza controllo di che cosa esista già, il che non va d'accordo con la banda limitata.

ma soprattutto questo codice NON HA CONTROLLI DI SICUREZZA su che si carica e su dove lo si mette.

date le tue competenze, e dato che si tratta di attività d'impresa, ti consiglierei di farlo tu.
ti dico ciò con sincerità e senza presunzione, dato che, nonostante ti avessi segnalato l'errore, hai ancora sbagliato il codice; quello che hai indicato non può lavorare sugli stream (nella link citato: when reading remote files [...] reading will stop after a packet is available) e che non puoi conoscere la dimensione di un file remoto tramite http. inoltre il file da scrivere non deve essere aperto per lettura ed aggiunta ma solo per scrittura ed in modalità binaria. ma hai letto?

ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline james81

  • Appassionato
  • ***
  • Post: 475
  • Sesso: Maschio
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #14 il: 12 Mar 2010, 14:26:25 »
rieccomi!

gracies mille Marco con i tuoi super consigli sono riuscito a risolvere! :)

ho fatto qualche modifica allo script per estrapolarmi solo il nome dell'immagine e salvarlo nel db! :)

come segnalato giustamente da te, c'è comunque un problema di fondo legato al controllo se il file è già presente nella cartella, il che non è da poco visto che altrimenti ogni volta si dovrebbe lavorare circa 1700 imamgini! :P

posto la mia soluzione

$str1 = $img1 ;
$ar1= explode('/',$str1);
$imgmed = $ar1[count($ar1)-1];
$nomemed = $imgmed;
 if (file_exist($nomemed))
 {
 } else {
$handle = fopen("$img1", "rb");
$contents = '';
while (!feof($handle)) {
  $contents .= fread($handle, 8192);
}
fclose($handle);
$handle = fopen("$path/$imgmed", 'wb');
fwrite($handle, $contents);
fclose($handle);
}
« Ultima modifica: 12 Mar 2010, 15:28:05 da james81 »

Offline = odino =

  • Instancabile
  • ******
  • Post: 5696
  • Sesso: Maschio
  • "In realtà li trasforma in menomati" Danzel
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #15 il: 14 Mar 2010, 12:19:27 »
lasciando perdere tutto il resto, dato che non ho seguito il discorso in toto...

al primo if prima verifichi se la condizione è vera, per poi non far fare nulla allo script, poi invece verifichi se quel file non c'è, facendo allora fare tutto il lavoro di salvataggio immagine...

sostituisci questa logica sbagliata con un
Codice: [Seleziona]
!file_exists

Offline james81

  • Appassionato
  • ***
  • Post: 475
  • Sesso: Maschio
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #16 il: 08 Apr 2010, 17:43:21 »
alla fine ho risolto, volevo chiedervi se qualcuno sa' come fare per impostare uno script sche ogni 100 secondi si interrompa, e si riavvii ???

Offline = odino =

  • Instancabile
  • ******
  • Post: 5696
  • Sesso: Maschio
  • "In realtà li trasforma in menomati" Danzel
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #17 il: 08 Apr 2010, 17:55:39 »
imposta un timeout dello script a 99 secondi e un crontab che lo richiami ogni 100

Offline james81

  • Appassionato
  • ***
  • Post: 475
  • Sesso: Maschio
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #18 il: 08 Apr 2010, 17:59:39 »
umh...hai un esempio per vedere come fare?

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #19 il: 08 Apr 2010, 18:33:32 »
scusa, ma perché vuoi fare ciò? non è che ti può bastare usare set_time_limit ad ogni ciclo?

ciao,
marco


mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline james81

  • Appassionato
  • ***
  • Post: 475
  • Sesso: Maschio
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #20 il: 08 Apr 2010, 18:42:24 »
ho un ciclo while con il quale estrapolo i vari prodotti e con un'altro sottociclo mi vado a salvare tutte le immagini del prodotto.

Purtroppo per ogni prodotto ci possono essere anche 10 Mb di immagini.

dove devo inserirlo set_time_limit(0) , in quale script?

Offline james81

  • Appassionato
  • ***
  • Post: 475
  • Sesso: Maschio
    • Mostra profilo
Re:Salvare immagine da url
« Risposta #21 il: 09 Apr 2010, 09:26:33 »
UP

 



Web Design Bolzano Kreatif