Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542

    Come riprendere l'output a video dopo header('Content-Disposition: attachment...

    Cioa a tutti, spero che dal codice si capisca il problema.
    come faccio a riprendere l'output dopo aver creato il file e eseguito il download?

    (La creazione del file e il dowload funzionano)

    Codice PHP:
    <?php
    header
    ('Content-type: text/plain; charset=ISO-8895-1');
            
    header('Content-Disposition: attachment; filename="nomefile.txt"');
            
            
    scrivi_nel_file_qualcosa_con_il_comando_eco();
            
    // dopo aver creato il file e fatto il downoad vorrei scrivere a video la stringa "fatto" ma questa viene accodata in nomefile.txt
           // qual'è il comando che interrompe il flusso di output in nomefile.txt?
           
    echo "Fatto";
    ?>
    Sono su Apache Web Server Version 2.2.4
    PHP Script Language Version 5.2.3

    Grazie
    Guidino

  2. #2
    ho detto una boiata... fammi pensare

    Sai che temo non si possa fare? Perché tu setti un header che è un file. Il browser interpreta quella pagina semplicemente come un file fisico vero e proprio e non come un codice. Quindi non può esserci altro output dopo.

    Temo che ci sia da architettare qualcosa in Ajax, una sorta di controllo sui byte scaricati. Una volta completato il download ti dà l'output...

    Domanda interessante. Ora devo uscire, ma prometto che ci penso, a meno che non ti illumini qualcun altro prima.
    Non c'è niente di più immenso del nulla.
    Dunque parlatemi del nulla se non volete mai annoiarmi.


    Nozioni: PHP, ASP, HTML, XHTML, DHTML, XML, Javascript, Actionscript, Ajax, CSS, MySQL, Photoshop, Flash, Dreamweaver, 3D Studio Max, FL Studio, Illustrator, Corel Draw, insomma.... chiedete e basta.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542
    Un bel problema, perchè in realtà nel file di testo voglio fare il backup del database, le funzioni che eseguono il dump ci sono e funzionano bene.

    in realtà oltra alla stringa "fatto" nel file di otuput viene accodato tutto l'html della pagina.

    Se durante la giornata ti illumini fammelo sapere, Nel frattempo penso anch'io a qualche strada diversa.

    Grazie
    Guidino

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    35

    Re: Come riprendere l'output a video dopo header('Content-Disposition: attachment...

    Prova mettendo exit;
    Codice PHP:
    <?php
    header
    ('Content-type: text/plain; charset=ISO-8895-1');
            
    header('Content-Disposition: attachment; filename="nomefile.txt"');
            
            
    scrivi_nel_file_qualcosa_con_il_comando_eco();
            
    // dopo aver creato il file e fatto il downoad vorrei scrivere a video la stringa "fatto" ma questa viene accodata in nomefile.txt
           // qual'è il comando che interrompe il flusso di output in nomefile.txt?
           
    exit;
           echo 
    "Fatto";
    ?>

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542
    Grazie ella risposta.

    exit interrompe l'esecuzione dello script e non esegue il comando echo "Fatto"
    Guidino

  6. #6
    Ok, allora, vediamo se ti piace questo e se ti fa venire in mente qualcosa:

    Pagina 1 in HTML

    Javascript:
    codice:
    <script>
    function tryToDownload(url) {
    	oIFrm = document.getElementById('myIFrm');
    	oIFrm.src = url;
    }
    window.onload = setTimeout('tryToDownload("file.php")', 500);
    </script>
    Dentro il body:
    codice:
    <iframe id="myIFrm" src="" style="visibility:hidden"></iframe>


    Mentre dentro file.php:
    Codice PHP:
    <?php 
    header
    ("Content-Type: application/force-download\n");
    header("Content-Disposition: attachment; filename=nomefile.txt");

    readfile("nomefile.txt");
    ?>

    A meno che tu non voglia eseguire l'output una volta COMPLETATO il download (è possibile anche questo, ma più difficile). Fammi sapere.
    Non c'è niente di più immenso del nulla.
    Dunque parlatemi del nulla se non volete mai annoiarmi.


    Nozioni: PHP, ASP, HTML, XHTML, DHTML, XML, Javascript, Actionscript, Ajax, CSS, MySQL, Photoshop, Flash, Dreamweaver, 3D Studio Max, FL Studio, Illustrator, Corel Draw, insomma.... chiedete e basta.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542
    Ciao, ho provato il tuo suggerimento.

    Il meccanismo funziona nel senso che parte lo script del file.php ma non carica la pagina fatto.html (perchè ho pensato di fare una pagina html con il messaggio "fatto...") nell'iframe.

    Ho provato così:
    Codice PHP:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <
    html>
      <
    head>
      <
    meta http-equiv="content-type" content="text/html; charset=windows-1250">
      <
    meta name="generator" content="PSPad editor, [url]www.pspad.com[/url]">
      <
    title></title>
      <
    script>
        function 
    tryToDownload(url) {
           
    oIFrm document.getElementById('myIFrm');
           
    oIFrm.src url;
           
    oIFrm.style.visibility='visible';
        }
        
    window.onload setTimeout('tryToDownload("file.php")'500);
        
    </script>

      </head>
      <body>
            <iframe id="myIFrm" src="fatto.html" style="visibility:hidden" width="300" height="300"></iframe>
      </body>
    </html> 
    Poi stranamente il nome del file di download viene forzato a file.php anche se l'header del file.php è:
    $nomeFile = "nomeFile_".date('YmdHis').'.txt';
    header("Content-Type: application/force-download\n");
    header("Content-Disposition: attachment; $nomeFile");
    echo "ecc.";

    Ammesso che funzioni il tutto, come faccio a caricare la pagina fatto.html nell'iframe dopo aver eseguito il download?

    Grazie per il grande aiuto
    Guidino

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542
    Rettifico:
    con firefox 3.6.6 non carica la pagine fatto.html nell'iframe

    in internet explorer 7 si

    Quindi grazie del suggerimento, funziona.

    Ma se volessi caricare la pagina nell'frame dopo aver eseguito il download?

    Tu stesso mi hai accennato a questa possibilità. Se vorrai indicarmi la strada ti sarei molto grato.

    Grazie dell'aiuto
    Guidino

  9. #9
    Dopo il download dici? Beh, sì. Tutto è possibile... ma temo che per quello tocca preparare un applet Java, anche se sicuramente se ne trovano già fatte. Perché il punto è sapere quando i byte scaricati sono uguali a byte totali. Basterebbe pescare il codice di una progress bar e togliere il superfluo.
    Non ricordo se si può fare con actionscript addirittura, ma dubito, mi pare che gestisca solo lo stato delll'upload, come jQuery del resto...


    Prova anche quest'altro medoto...

    codice:
    <script>
    function tryToDownload(url) {
    	document.getElementById('mylink').style.display = "none";
    	document.getElementById('output').setAttribute('src', "fatto.html");
    	document.getElementById('output').style.display = "";
    }
    </script>
    
    <body>
    Scarica file
    <iframe id="output" src="" style="display:none; position:absolute; z-index:100; margin:0px; top:0; left:0; width:100%; height:100%" frameborder="0" ></iframe>
    </body>
    Non c'è niente di più immenso del nulla.
    Dunque parlatemi del nulla se non volete mai annoiarmi.


    Nozioni: PHP, ASP, HTML, XHTML, DHTML, XML, Javascript, Actionscript, Ajax, CSS, MySQL, Photoshop, Flash, Dreamweaver, 3D Studio Max, FL Studio, Illustrator, Corel Draw, insomma.... chiedete e basta.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542
    Ciao psycho54h,
    ho provato e riprovato il secondo metodo per far apparire il messaggio dopo il download ma non funziona.

    Nei primi post mi hai parlato di Ajax, potresti indicarmi questa strada?
    Però non posso fare il conteggio sui byte in quanto non conosco la dimensione del file perchè viene creato ogni volta.
    E' possibile con Ajax organizzare un dialogo in modo da far partire il messaggio al termine della procedura che crea il file ?

    Grazie
    Guidino

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.