Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Sessioni e headers - per esperti -

    Ciao,
    ho un problema che non mi fa dormire...
    In una applicazione PHP servo files agli utenti attraverso gli headers con queste semplici 3 righe:
    header('Content-Type: application/save');
    header('Content-Disposition: attachment; filename=$flName');
    readfile($file);

    Tutto funziona perfettamente con NS ma non con IE.
    O meglio.... Queste 3 righe da sole funzionano con entrambi ma non se lo script è preceduto da
    session_start();
    Dopo mille tentativi sugli headers (ho trovato mille diverse proposte di dichiarazione degli headers per il download dei files) ho scoperto che l'inghippo è il
    session_start();

    Qualcuno ha mai avuto un problema del genere?
    Suggerimenti?

    Ciao, grazie.
    ... Quando il dito indica la luna l'imbecille guarda il dito...

  2. #2
    Dai..... suu.... Non ci credo che nessuno sappia niente...
    ... Quando il dito indica la luna l'imbecille guarda il dito...

  3. #3
    ma se la sessione la fai partire dopo gli header funziona tutto bene?

  4. #4
    Utente bannato
    Registrato dal
    Apr 2004
    Messaggi
    1,392
    Originariamente inviato da carmineabomb
    ma se la sessione la fai partire dopo gli header funziona tutto bene?

    Ma il session_start() deve essere SEMPRE PRIMA di qualsiasi output, headers compresi.

    @ lame_user: Il tuo webserver ti dà errori?

  5. #5

    QUESTA E' UNA PERLA

    DUE giorni di debugging....
    Allora, la questione sta in questi termini.
    IE fa casino con le cache nel momento in cui fai session_start se poi dichiari certi headers.
    Così funziona:

    session_start();
    header("Content-disposition: attachment; filename=$flName");
    header("Content-type: application/octetstream");
    header("Pragma: no-cache");
    header("Pragma: public");
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header("Expires: 0");
    $size = filesize("$file");
    header("Content-Length: $size");
    $hdl = fopen($file , "r");
    fpassthru($hdl);
    exit;

    [ Ovviamente $flName e $file te li calcoli da qualche parte. ]
    Quindi, oltre a dover dichiarare in un certo modo gli headers per la cache, non puoi (non chiedetemi perchè) servire il file con

    readfile($file);

    Come facevo nella prima versione (che funziona regolarmente per tutti i browser ma non per IE) ma devi farlo con

    $hdl = fopen($file , "r");
    fpassthru($hdl);

    ... Se fate qualche ricerchina in giro, trovate decine di post di persone che hanno avuto questo problema....
    ... Quando il dito indica la luna l'imbecille guarda il dito...

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.