upload image tramite url e cache

luigithen

Utente Attivo
31 Mar 2020
66
3
8
ciao ragazzi eccomi di nuovo qui con un problema che non riesco a risolvere, ho creato con successo sia il form

HTML:
  <form class="form-inline" action="logo-upload.php" method="post">
      <div class="form-group mr-4">
          <input type="text" class="form-control" name="img_url" placeholder="Inserisci Url Img">
      </div>
      <input type="submit" name="get_image" value="Salva">
  </form>
che upload
PHP:
<?php
if(isset($_POST['get_image']))
{
 $url=$_POST['img_url'];
 $data = file_get_contents($url);
 $new = 'images/logo.png';
 file_put_contents($new, $data);
 header('Location: index.php');
}
?>
il tutto funziona mi carica l'immagine nella cartella ma il mio problema è che ogni volta devo pulire la cache per poter visualizzare la nuova immagine, come posso fare per vedere subito l'immagine senza dover pulire la cache ?
 

Hormus

Utente Attivo
26 Giu 2020
83
10
8
imposta in maniera random il nome della cartella percorso url dove sarà salvato e poi mostrato al browser. Qui al posto di asterisco qualcosa a 10 cifre images/*logo.png
 

macus_adi

Utente Attivo
5 Dic 2017
1.313
88
48
IT/SW
Qui al posto di asterisco qualcosa a 10 cifre images/*logo.png
Scusa @Hormus ed i refusi?? immagina di avere 100 attori che caricano 100 immagini di profilo a testa.... Hai praticamente 10000 immagini e ne usi solo 100? Non credo che la gestione sia corretta....




il tutto funziona mi carica l'immagine nella cartella ma il mio problema è che ogni volta devo pulire la cache per poter visualizzare la nuova immagine, come posso fare per vedere subito l'immagine senza dover pulire la cache ?
Per ovviare a questo problema ti invito a strutturare lo script in maniera tale da separare le logiche tra "Controller" e quantomeno le "View", ossia:
Il controller (valida i dati), in teoria salva l'img e torna una vista....
Nella vista basterebbe aggiungere il tag img con un parametro alla fine di "src"

PHP:
echo '<img src="'.$img.'?v='.time().'" />';
In questo modo il client ad ogni richiesta scaricherà la risorsa corretta in quanto corredata dal parametro "v" contenente il timestamp...
 
  • Like
Reactions: luigithen

luigithen

Utente Attivo
31 Mar 2020
66
3
8
grazie a tutti per le risposte.

imposta in maniera random il nome della cartella percorso url dove sarà salvato e poi mostrato al browser. Qui al posto di asterisco qualcosa a 10 cifre images/*logo.png
il nome dell'immagine è univoca quindi ogni volta che sarà caricata l'immagine tramite url questa sarà sempre logo.png e verrà sovrascritta



PHP:
echo '<img src="'.$img.'?v='.time().'" />';
In questo modo il client ad ogni richiesta scaricherà la risorsa corretta in quanto corredata dal parametro "v" contenente il timestamp...
[/QUOTE]

effettivamente, seguendo il tuo consiglio ho utilizzato questo
PHP:
<?php echo '<img src="'."images/logo.png".'?v='.time().'" />';?>
ed il tutto funziona in modo corretto
 

Hormus

Utente Attivo
26 Giu 2020
83
10
8
Solitamente i CDN non riconoscono la query string di un file quindi la cache lato server sarà sempre per quel file. Comunque se utilizzo la sequenza numerica in secondi devi semplicemente recuperare v e applicare int. EDIT: sanificazione numero decimale invece di stringa manipolazione da fonte esterna :)
Anche Ajax jquery utilizza la query string timestamp per via di un vecchio bug su internet Explorer (per inibire la cache e parliamo anche semplicemente del solo testo).
Mentre non capisco quale sia il problema nell'utilizzare ad esempio uniqid in un percorso prestabilito. Quando il server dovrà recuperare tutti i file si esegue una regex php.
Mentre ovviamente se ho una lista di 100 immagini da poter caricare (quindi prestabilita) devo assegnare 100 percorsi univoci per quelle 100 immagini predefinite avrò anche il suffisso user (contraddistingue l'utente). Così i file saranno sempre 100 in memoria ma avrò più url per utente e se accede con più account avrà sempre la prima visualizzazione del file (magari con scritto il nome utente etc, ovviamente si modifica l'immagine in memoria e se ne crea un'altra).
 
Ultima modifica:

macus_adi

Utente Attivo
5 Dic 2017
1.313
88
48
IT/SW
Scusa @Hormus ,
occhio a quello che scrivi, ci sono imprecisioni importati e farle passare per buone non è corretto per coloro non sono ferrati in materia...

la vedo dura ad accedere al filesystem con un intero decimale
Scusa ma cosa stai dicendo? la vedo dura passare "INTERO DECIMALE" come parametro.... O intero o decimale.... Ma poi recuperare il parametro "v" per fare cosa? a che serve?

Se proprio vogliamo fare i maghetti, strutturando il "progetto" e non un FILE PHP, ogni utente ha una collezione di IMG, che vengono gestite da un TRAIT che viene aggiunto nei model che utilizzano risorse di tipo immagine...
Ogni elemento ha: collection , morph, path, name, url, temp_url, shared_url,props....

Qui siamo andati fuori... Scusate, credo che @luigithen abbia risolto....
 
Ultima modifica:

Hormus

Utente Attivo
26 Giu 2020
83
10
8
Grazie ho corretto il messaggio precedente. Certo ti spiego, php usa diversi tipi di origini che poi vengono trasformati in numero decimale.
1)numero decimale
2)numero ottale
3)numero esadecimale
4)numero binario
5)numero decimale con underscore tra sequenza numerica da php 7.4 (dicasi intero letterale). Tutti avranno un valore numero decimale (restituiscono).
Mentre per sisistema numerico decimale si intende il sistema di numerazione posizionale a base 10.
Dopo questa premessa per me si può anche chiamare intero decimale dal momento che esiste binario decimale letterale che anch'esso impuro.
Recupero v poiché l'agente utente invia una stringa ma dal codice può solo essere numero decimale, quindi effettuo la conversione (sanificazione di una variabile che potrebbe dare noia, ovviamente per un sistema più complesso ove sia necessario memorizzare in un database e poi recuperarlo).
Non è una competizione ma creare un codice che sia sempre funzionante, purtroppo se lavori con i CDN inibiscono la query string. Vedi tu se è qualcosa che potrai inserire in un CMS (lì i CDN sono molto usati).
 
Ultima modifica:

luigithen

Utente Attivo
31 Mar 2020
66
3
8
quello che stiamo realizzando è un cms interno alla nostra azienda e si accede solo tramite password perchè la cartella stessa è protetta e tale servizio è solo per inviare il classico codice dipendente, una immagine e lo stesso form dovrà inviare (mi è stato detto ieri) anche file, non sarà online per questo per me è risolto con la soluzione fornita da macus
 

macus_adi

Utente Attivo
5 Dic 2017
1.313
88
48
IT/SW
Replico, sperando nella conclusione...
PHP è un linguaggio interpretato, di conseguenza non può usare, interpreta l'informazione il che è un tantino differente sulla semantica utilizzata...
Stando quanto da te detto, possiamo dire che gli operatori ternari siano dei modus operandi dei sistemi operativi???? non credo, è semplicemente PHP che interpreta quella sintassi...

Detto questo, e andando avanti.... Ancora non mi è chiaro questo punto!
Recupero v poiché l'agente utente invia una stringa ma dal codice può solo essere numero decimale, quindi effettuo la conversione (sanificazione di una variabile che potrebbe dare noia, ovviamente per un sistema più complesso ove sia necessario memorizzare in un database e poi recuperarlo).
l'agente utente = UserAgent?
ma dal codice può solo essere numero decimale = Quindi passando v=macus non funzionerebbe??
memorizzare in un database e poi recuperarlo = Memorizzi i dati in GET?????

a cosa serve sanificare la stringa su una risorsa...

Vedi tu se è qualcosa che potrai inserire in un CMS (lì i CDN sono molto usati).
É possibile aggiungere un parametro custom non valutabile???
La risposta è si, e utilizzando un CMS (wp, joomla, magento, etc...) basta semplicemente aggiungere un after_middleware.

per me è risolto
Buona giornata!
 
Ultima modifica:
  • Like
Reactions: luigithen