Visualizzazione dei risultati da 1 a 7 su 7

Discussione: file_get_contents()

  1. #1

    file_get_contents()

    Salve,
    scrivo qui ma in realtà la mia domanda è un po' generica e riguarda prevalentemente le codifiche.
    Principalmente vorrei chiedervi delle delucidazioni riguardo alla funzione file_get_contents().
    Questa, come da manuale, estrae il contenuto di un file.
    Il file in questione che sto trattando è un'immagine e il contenuto della variabile a cui assegno il contenuto risulta contenere una serie di caratteri giustamente incomprensibili. Nella guida PHP non è specificato in che codifica la funzione ritorna il contenuto del file. La prima impressione è che sia una sequenza di caratteri ASCII o Unicode(correggetemi se sbaglio) e l'unico modo in cui riesco a stamparlo è utilizzando la seguenti sintassi nel tag immagine:

    codice:
    $img = file_get_contents('immagine.jpg');
    echo "<img src='data:image/jpg;base64,".base64_encode($img)."'/>";
    Sapreste dirmi perchè devo codificare in base64?

    Scusate, qualche funzione potrebbe essere scritta sbagliata ma il codice in questione non è postabile perchè la situazione reale è molto più complessa. Mi sono limitato a sintetizzare il problema, che è più una richiesta di delucidazioni riguardo le codifiche che un'aiuto sul codice vero e proprio.

    Grazie

  2. #2
    Quote Originariamente inviata da Fusic86 Visualizza il messaggio
    Salve,
    scrivo qui ma in realtà la mia domanda è un po' generica e riguarda prevalentemente le codifiche.
    Principalmente vorrei chiedervi delle delucidazioni riguardo alla funzione file_get_contents().
    Questa, come da manuale, estrae il contenuto di un file.
    Il file in questione che sto trattando è un'immagine e il contenuto della variabile a cui assegno il contenuto risulta contenere una serie di caratteri giustamente incomprensibili. Nella guida PHP non è specificato in che codifica la funzione ritorna il contenuto del file. La prima impressione è che sia una sequenza di caratteri ASCII o Unicode(correggetemi se sbaglio) e l'unico modo in cui riesco a stamparlo è utilizzando la seguenti sintassi nel tag immagine:

    codice:
    $img = file_get_contents('immagine.jpg');
    echo "<img src='data:image/jpg;base64,".base64_encode($img)."'/>";
    Sapreste dirmi perchè devo codificare in base64?

    Scusate, qualche funzione potrebbe essere scritta sbagliata ma il codice in questione non è postabile perchè la situazione reale è molto più complessa. Mi sono limitato a sintetizzare il problema, che è più una richiesta di delucidazioni riguardo le codifiche che un'aiuto sul codice vero e proprio.

    Grazie
    Iniziamo dalla sostanza.. qual è la tua esigenza tecnica ?

  3. #3
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Nella guida PHP non è specificato in che codifica la funzione ritorna il contenuto del file.
    Per sapere come gestisce php la questione della codifica dovresti andare a vedere la documentazione circa le stringhe: http://www.php.net/manual/en/languag...string.details
    In sostanza: non la gestisce. Le stringhe per php sono assimilabili ad un mucchio di byte di cui non si conosce ne come sono codificati ne se sono ben formati. file_get_contents() rientra in questa logica: si limita a restituire semplicemente i byte con cui sono stati salvati i file, senza fare qualsiasi operazione aggiuntiva.
    Quindi, in questo caso, se hai il file binario dell'immagine salvato in una variabile, la potresti stampare in questo modo:
    codice:
    header('Content-Type: image/jpeg');
    echo file_get_contents('immagine.jpg');
    o come hai già fatto tu http://en.wikipedia.org/wiki/Data_UR...rowser_support è un valido modo per rendere risorse al browser, se ne vuoi sapere di più: http://tools.ietf.org/html/rfc2397
    Ultima modifica di .Kurt; 07-05-2014 a 10:28

  4. #4
    grazie mille, una rfc molto utile ed esplicativa.

    ora, correggimi se sbaglio, ho capito perchè si usa la base64 cioè per eliminare la rappresentazione di caratteri speciali presenti nel formato "URL" adatto al trasporto (quindi %xx). Non ho capito però se è l'unico modo utile per rappresentare datatype di tipo image/xxx (xxx= estensione immagine). Sono un po' confuso sull'argomento

  5. #5
    Quote Originariamente inviata da Fusic86 Visualizza il messaggio
    speciali presenti nel formato "URL" adatto al trasporto (quindi %xx)
    http://www.php.net/urlencode
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  6. #6
    Ho un'ulteriore dubbio al riguardo.
    La codifica accettata per il rendering di un'immagine dal suo data_URI (secondo il data_URI_scheme dell'RFC 2397) è la sola base_64 o è possibile utilizzarne altre? Eventuali vantaggi/svantaggi?

  7. #7
    Quote Originariamente inviata da Fusic86 Visualizza il messaggio
    Ho un'ulteriore dubbio al riguardo.
    La codifica accettata per il rendering di un'immagine dal suo data_URI (secondo il data_URI_scheme dell'RFC 2397) è la sola base_64 o è possibile utilizzarne altre? Eventuali vantaggi/svantaggi?
    Stai facendo confusione fra un sacco di cose. Da come si codifica un url a come devono essere resi i dati per essere interpretati dal browser.. stai facendo un pastrugno.

    Il browser può ricevere e interpretare i dati in formato binario, basta avvertirlo di quello che arriva.
    Una spiegazione terra terra per bambini:
    tu dici al browser <img src="qualcosa.jpg">..
    lui cosa fa' ? Dato che è furbo capisce che li ci va un'immagine in formato JPEG e che se la deve recuperare all'indirizzo al quale si trova anche la pagina (secondo il percorso relativo, perchè non ci sono indicate cartelle o indirizzi assoluti). Va dal webserver e gli dice: scusi qui c'è scritto che devo prendere il file qualcosa.jpg. Il webserver dice, bene... e gli passa un flusso dati binario dell'immagine. ( Controllando prima se ci sono i permessi etc.. ma vabbè). Quando il browser ha finito di ricevere il file qualcosa.jpg lo restituisce a video.

    Altro scenario:
    tu, giusto per complicarti la vita e per complicarla al browser (magari vuoi vedere quanto è bravo..), gli dici <img src='data:image/jpg;base64,".base64_encode($img)."'/>"
    Il browser cosa fa' ?? Dice, porca paletta (dice proprio così, io lo conosco!) ; dove c'è il tag img ci và un'immagine JPEG e mi arriva codificata secondo la codifica base64. Quindi i caratteri che mi arrivano dopo non li ha messi a caso un pazzo digitando a caso sulla tastiera per mezz'ora ! Prende i caratteri dell'immagine dal primo all'ultimo, li decodifica secondo la base64, ottenendo l'agognato file jpg. Dopo di che procede come al solito (sveglia la libreria jpeg.. decomprime l'immagine.. ) e restituisce a video l'immagine.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.