Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    problemi con header("content-type: ...")

    Ciao a tutti,
    ho un applicazione web in php e MySql in cui devo visualizzare una lista di articoli con le relative immagini...
    Per definire il content-type dell'immagine in php l'unico modo che ho trovato e che conoscevo è usare l'header:

    Codice PHP:
    <?php Header("Content-Type: image/tiff"); ?>
    Che voi sappiate esiste un'alternativa agli header? in quanto, nella pagina in cui visualizzo la lista degli articoli mi dà sempre il classico warning:

    Warning: Cannot modify header information - headers already sent by (output started at C:\web\xampp\htdocs\file.php:11) in C:\web\xampp\htdocs\file in cui chiamo l'header on line 1

    ovviamente è scontato che in alcuni file inclusi, come il controllo sessioni e altri, ci siano deglia altri output.


    Grazie a tutti per l'aiuto.
    Ciao

  2. #2
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Ciao,
    diciamo che hai omesso diverse cose...
    - per quale motivo hai la necessità di usare header() per visualizzare una immagine? La estrai dal db?

    - perchè se lo script in questione deve solo inviare l'immagine in output ha altri file inclusi ( con possibili output ) ?

    Tanto per cominciare ti consiglio questo articolo sul problema headers already sent ( si, l'ho scritto io... ), trovi la soluzione che fa al caso tuo, giusto per non tenerti sulle spine, devi utilizzare ob_start() .

    Ciao

  3. #3
    Ciao Razorblade,
    cerco di rispondere alle tue domande:

    per quale motivo hai la necessità di usare header() per visualizzare una immagine? La estrai dal db?
    Le immagini non vengono estratte dal db, nel db c'è solo il link alla directory in cui risiedono fisicamente le immagini.
    le immagini hanno estensione TIF. Per poter gestire questo tipo di immagini, da quello che ho trovato in rete, devo dichiarare il content-type:image/tiff, e l'unico modo che ho trovato è stato quello dell'utilizzo della funzione headers() che come giustamente dici tu nel tuo articolo, causa non pochi malesseri, soprattutto se il relativo warning ti dice che l'output è già stato inviato da un altro file in cui NON esiste nessun tipo di output, nessuna riga vuota, salvato in codice ANSI...nel mio file incriminato c'è solo scritto questo:
    Codice PHP:
    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    2.    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    3. <html xmlns="http://www.w3.org/1999/xhtml">
    4. 
    5. 
    <head>
    6. 
    7. 
    <title></title>
    8. <link rel="stylesheet" type="text/css" href="main.css">
    9. 
    10. 
    </head>
    11. </html
    e indovina l'output secondo il warning dell'headers inizia? alla riga 11.

    - perchè se lo script in questione deve solo inviare l'immagine in output ha altri file inclusi ( con possibili output ) ?
    il file in cui io costruisco la tabella di visualizzazione della lista di immagini, è incluso nella pagina principale in cui visualizzo l'output. In questa pagina php c'è incluso il file che ti ho postato sopra.
    Intanto mi incornicio il tuo articolo sugli headers.

    Ho appena scoperto, siccome le sfighe non vengono mai da sole, che i browsers non visualizzano le immagini TIFF, nelle mille ricerche che ho fatto ho trovato che un modo per convertire i file tiff in un altro formato (jpg,png,gif...) al volo in php sarebbe utilizzare le classi di ImageMagick...ma non trovo la classe di conversione file.....
    Tu sai niente di ImageMagick o hai qualche altro suggerimento?

    Grazie per qualsiasi indizio mi darai.
    Ciao

  4. #4
    Razorblade prima ho dimenticato di dirtelo...ho provato la funzione ob_start() su un'altra pagina php e funziona alla grande...
    adesso mi rimane il problema tiff
    Ciao

  5. #5
    E' molto semplice: prima invii gli header, poi invii l'ouput. Se invii ouput prima di qualche header, c'e' qualcosa che non va nella logica del tuo codice.

  6. #6
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Come dice k.b, è la logica che usi che è errata.
    Lo script che restituisce l'immagine dovrebbe fare solo quello e niente altro.
    Il listato lo dovresti poi costruire in questo modo

    Codice PHP:
    <html>
    varie intestazioni html ecc ]

    [
    img]file_php_che_restituisce_l_immagine.php?parametri_vari[/img]
    [
    img]file_php_che_restituisce_l_immagine.php?parametri_vari[/img]

    </
    html
    Il "file_php_che_restituisce_l_immagine.php" invia solo l'output dell'immagine.

    Inoltre:



    nel mio file incriminato c'è solo scritto questo

    il "solo questo" sono ben 11 righe di output , il parser di php sta anche cercando di dirtelo .

    Se qualcosa non ti è chiaro io sono qui.

    Ciao

  7. #7
    Avete proprio ragione ragazzi, stavo sbagliando la logica del mio codice...ma il cervello era andato in loop dopo gli 800000 tentativi per trovare disperatamente una soluzione....per scoprire poi che il problema era nelle Tiff.

    Abbiate pazienza ma non sono un esperta di php... ho ripreso il linguaggio dopo 7 anni dalla prima volta che l'ho usato...e aggiungerei FINALMENTE!

    Razorblade grazie mille anche per il suggerimento dell'invio dell'output delle immagini, non sapevo si potesse applicare anche lì...quel tipo di sintassi l'ho usata solo negli headers() e link.

    Giacchè che ci siamo, consigli e trucchi per imparare a programmare bene il php?
    visto che a lavoro mi hanno dato questa occasione, ne approfitterei ad approfondire le conoscenze sul linguaggio


    Grazie mille k.b e Razorblade per il preziosissimo aiuto!
    Ciao ciao

  8. #8
    Esistono molte guide / articoli per comprendere bene le dinamiche e le funzioni del php

    Php ha molti vantaggi, ma ha dei limiti, per fare qualcosa con php (usando solo php) devi effettuare un cambio di pagina, esistono dei sistemi per integrare php con javascript (preso come esempio), per ridurre queste limitazioni.

    Non esiste una guida per "imparare bene a programmare", ci sono dei consigli da seguire di solito in base di programmazione per avere un codice pulito, ben strutturato, sicuramente l'utilizzo dei commenti è sempre consigliato.

    Se ti dovesse capitare di riprendere in mano il codice dopo un pò di tempo l'avere dei commenti potrebbe aiutarti a ricordarti cosa avevi fatto e/o potrebbe aiutare altre persone.

    Un codice ben strutturato e ben diviso sicuramente renderà il programma più leggibile (sia da te che da altre persone), ed in caso di bug o successive modifiche renderà il lavoro più facile.

    Inoltre ora hai risolto un problema, la prossima volta questo "problema" non sarà più tale, almeno per te.

    Ti direi di iniziare da tutte le varie guide sul sito di html.it, inoltre per problemi specifici potresti guardare nelle pillole (nel topic in alto nella sezione php), o più in generale provare a fare delle ricerche per capire se e come hanno risolto un dato problema.

  9. #9
    Grazie goikiu!

    Posso solo dirti che in quanto a commenti abbondo, in quanto mi è capitato più volte, per esigenze lavorative, di dover metter mano a codice sviluppato a mille mani e senza uno straccio di commento...e c'è da diventar matti...memore di questo i commenti nel mio codice non manca.

    Seguirò i tuoi consigli...grazie ancora.

    Ciao

  10. #10
    La base di un codice pulito è l'indentazione, i commenti ed una strutturazione organizzata.

    Non c'è bisogno che mi ringrazi, non ho fatto niente di eccezionale.

    A volte leggi articoli anche di cose non inerenti ai tuoi problemi attuali, il vedere come altre persone scrivono codice e/o risolvono un problema può aiutarti a trovare un metodo migliore per scrivere una parte del tuo codice.

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.