Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - Verificare se uno script php restituisce come output un immagine
Forum - PHP - Verificare se uno script php restituisce come output un immagine

Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 0:20
Lunedì, 24/09/2012
Salve oggi mi sono trovato davanti allo sviluppo di una classe per la gestione di immagini, attraverso le librerie GD. Ho fatto in modo che la classe possa caricare file di tipo png, gif, jpg e jpeg, poi mi sono chiesto, e se volessi lavorare importando un immagine generata da un file php? beh la mia prima reazione è stata, il problema si risolve da solo in quanto quando in php do come output un immagine impostando prima gli header (es header('Content-type: image/png')) quindi se cerco di ottenere la tipologia di file con mime_content_type essa mi restituera image/png... Sono stato troppo speranzoso, in quanto il valore di ritorno è text/x-php in primo piano mi potreste spiegare perche mi arriva questo tipo di mine e non quello impostato negli header? e in secondo luogo come posso fare per capire se una pagina php mi restituisce un immagine?
Grazie mille in anticipo a tutti e aggiungo che spero in una risposta XD

PM Quote
Avatar
Sevenjeak (Normal User)
Pro


Messaggi: 91
Iscritto: 03/01/2012

Segnala al moderatore
Postato alle 9:15
Lunedì, 24/09/2012
Strano che ti restituisce quel Content-type, in ogni volta che ho usato la libreria gd non ho mai ottenuto una cosa del genere, potresti postare il tuo codice?

Rispondendo alla tua seconda domanda, la prima non è stata abbastanza chiara, se il php restituisce un'immagine si riconosce al punto dal tipo di header passato al browser.

In ogni caso sai che la funzione header(), visto che definisce l'intestazione del file, deve essere dichiarata prima di ogni output?

P.S.: Non conosco la funzione mime_content_type() ma dovrebbe restituire il mime-type ( originale ) del file, in questo caso con header non modifichi im contet-type() originare del file, ma modifichi il content-type del file inviato dal server al browser, almeno credo.


Ultima modifica effettuata da Sevenjeak il 24/09/2012 alle 9:32
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 14:24
Lunedì, 24/09/2012
Testo quotato

Postato originariamente da Sevenjeak:
Rispondendo alla tua seconda domanda, la prima non è stata abbastanza chiara, se il php restituisce un'immagine si riconosce al punto dal tipo di header passato al browser.


Se prima mi scrivi questo e poi
Testo quotato

Postato originariamente da Sevenjeak:
P.S.: Non conosco la funzione mime_content_type()...


non credi che sia ovvio che la domanda per te non sia abbastanza chiara?!
Testo quotato

Postato originariamente da Sevenjeak:
In ogni caso sai che la funzione header(), visto che definisce l'intestazione del file, deve essere dichiarata prima di ogni output?


Si si, infatti lo script che genera l'immagine non ha problemi e da un risultato corretto. Il probblema sta nello script che va a leggere l'immagine... comunque credo di aver capito perche mi viene restituito quel mine, la funzione va a reperire direttamente il file sul server senza che esso venga interpretato e quindi ovviamente il mine sarà quello del file di testo php. Quindi adesso la domanda che rimane è: come faccio a verificare il mine del file interpretato? mi viene in mente di usare c_url, puo andare? o ci sono metodi piu efficaci?

PM Quote
Avatar
Sevenjeak (Normal User)
Pro


Messaggi: 91
Iscritto: 03/01/2012

Segnala al moderatore
Postato alle 15:14
Lunedì, 24/09/2012
Non te lo so dire, non ho mai usato la funzione per analizzare il mime-type prodotto.

Cmq, nel tuo precedente messaggio avevo capito che avevi problemi a generare l'immagine, mi sembrava al quando strana la cosa.

Spiegati meglio, a cosa ti serve il Content-type generato dal file? devi per caso utilizzarlo per rigenerale l'immagine con lo stesso Content-type o ti serve per altro? se si è possibile adottare un'altra soluzione, molto più semplice.

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 17:05
Lunedì, 24/09/2012
Chiedo scusa, mi sembrava di essermi spiegato bene. Ho parlato di importare un immagine quindi con funzioni come imagecreatefrompng quindi la determinazione del mine mi serve per scegliere la funzione adatta per importare suddetta immagine

PM Quote
Avatar
Sevenjeak (Normal User)
Pro


Messaggi: 91
Iscritto: 03/01/2012

Segnala al moderatore
Postato alle 8:40
Martedì, 25/09/2012
Ah, si scusa, infatti leggendo bene il tuo precedente post ho capito meglio cosa vuoi fare.

In poche parole te effettui l'upload di un file immagine, ma dove la salvi l'immagine, in un database, visto che la rigeneri successivamente con un'altro script.

Nel caso la salvi nel database non hai considerato l'idea di salvare, durante l'uppload dell'immagine, anche il suo mime-type.

Se postavi lo script il tuo problema si capiva subito.

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 13:29
Martedì, 25/09/2012
No non parlo di db, io sto scrivendo una classe, o se meglio voglaimo dire una libreria che possa manipolare delle immagini, il costrutto per il momento è il seguente
Codice sorgente - presumibilmente Php

  1. public function __construct($pathorimage) {
  2.                 if(is_resource($pathorimage)) {
  3.                         $this->image=$pathorimage;
  4.                         $this->path=date("H:i:S_d/m/Y", time()).".png";
  5.                 } elseif(is_string($pathorimage)) {
  6.                         if(file_exists($pathorimage)) {
  7.                                 switch(mime_content_type($pathorimage)) {
  8.                                         case "image/png":
  9.                                                 $this->image=imagecreatefrompng($pathorimage);
  10.                                         break;
  11.                                         case "image/jpeg":
  12.                                                 $this->image=imagecreatefromjpeg($pathorimage);
  13.                                         break;
  14.                                         case "image/gif":
  15.                                                 $this->image=imagecreatefromgif($pathorimage);
  16.                                         break;
  17.                                         default:
  18.                                                 trigger_error("Il file <strong>".$pathorimage."</strong> non è supportato", E_USER_ERROR);
  19.                                         break;
  20.                                 }
  21.                                 $this->path=$pathorimage;
  22.                         } else trigger_error("Il file <strong>".$pathorimage."</strong> non esiste", E_USER_ERROR);
  23.                 } else trigger_error("Il parametro passato non è valido", E_USER_ERROR);
  24.         }


Puo caricare direttamente una risorsa gd oppure creare una nuova risorsa da un immagine, se l'immagine è una png, gif o jpg essa viene caricata senza problemi, se invece cerco di caricare un immagine generata da un altro script php es
Codice sorgente - presumibilmente Plain Text

  1. $image=imagecreatefrompng("bg.png");
  2.  
  3. imagesavealpha($image, true);
  4.  
  5. header("Content-type: image/png");
  6. imagepng($image);


essa viene identificata dal mio script come un file php in quanto non è ancora stata interpretata.
Adesso hai capito? Voglio aggiungere la possibilità di importare nelle mie librerie anche un immagine generata da un altro script php.

PM Quote
Avatar
Sevenjeak (Normal User)
Pro


Messaggi: 91
Iscritto: 03/01/2012

Segnala al moderatore
Postato alle 11:59
Mercoledì, 26/09/2012
Ora ho capito meglio la cosa, la funzione cUrl potrebbe anche andare bene per recuperare l'header del file, te sai come fare questo? ma non saprei il risultato prodotto, visto che non la usa da molto tempo la funzione, nel caso restituisce i byte dell'immagine dovresti cambiare anche il metodo per stampare l'immagine a video in questo modo:

Codice sorgente - presumibilmente Plain Text

  1. header("Content-type: header_file");
  2. echo $bytes_file;


Ultima modifica effettuata da Sevenjeak il 26/09/2012 alle 11:59
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 14:18
Mercoledì, 26/09/2012
Gia cUrl sembra poter funzionare ma ho paura che mi distrugga i principi del costrutto della classe per le altre immagini.... dovrei trovare una funzione che permetta di ottenere l'interpretazione di un file direttamente sul server

Edit:
Dopo svariati tentativi finalmento ho capito come risolvere il problema, ho riportato l'immagine all'interno della classe stessa e con il controllo del buffer l'ho isolata e l'ho ricreata dalla stringa ottenuta
Codice sorgente - presumibilmente PHP

  1. [...]
  2.         case "text/x-php":
  3.                 ob_start();
  4.                 include($pathorimage);
  5.                 $image=ob_get_contents();
  6.                 header("Content-type: text/html");
  7.                 ob_end_clean();
  8.                 if(@!$this->image=imagecreatefromstring($image)) trigger_error("Il file <b>".$pathorimage."</b> non è supportato", E_USER_ERROR);
  9.                 $pathorimage=preg_replace("/\.php$/", ".png", $pathorimage);
  10.         break;
  11. [...]


Posto il codice se puo interessare a qualcuno come ho risolto

Ultima modifica effettuata da Roby94 il 26/09/2012 alle 18:06
PM Quote