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

    scrittura buffer 'rovesciata'

    Salve a tutti,

    spiego subito il mio problema cercando di riassumere:

    Sto realizzando una pagina php che crea un file PDF e lo mostra nella pagina del browser.
    Il problema è che il risultato dell'elaborazione non inizia per %PDF- (intestazione tipica di un file in pdf.. )

    Il problema non credo sia dovuto ad errori di codice, infatti ho replicato l'errore in poche semplici righe:

    Codice PHP:
    $i 0;

    // questo simula la sequenza di caratteri %PDF-
    echo "[START]"

    while(
    $i 10){
       
    // questo simula un pdf bello carico nel buffer

       
    echo "\n"$i "----------------------\n\n";
       echo 
    "STRINGA MOOOOLTO LUNGA 50.000 caratteri circa";
       echo 
    $i;


    Ovviamente bisogna sostituire la stringa con una sequenza di circa 50.000 caratteri
    (io ne ho usati 49.093). Questa stringa simula il codice del file pdf per il test.

    Ci si aspetterebbe un output del tipo:

    [START]
    0-------------------------------

    [sequenza di circa 50.000 caratteri]
    1-------------------------------

    [altra sequenza di circa 50.000 caratteri]

    ...

    ...

    9------------------------------


    [solita sequenza]


    Invece il risultato e' qualcosa del tipo:


    [pezzo di una certa sequenza (la settima nel mio caso)]

    8---------------------------------


    [solita sequenza]
    9---------------------------------


    [solita sequenza]
    HTTP/1.1 200 OK <----- compaiono gli headers!!!!
    Date: Thu, 08 Dec 2011 01:18:15 GMT
    Server: Apache/2.2.17 (Win32) PHP/5.3.4
    X-Powered-By: PHP/5.3.4
    Keep-Alive: timeout=5, max=100
    Connection: Keep-Alive
    Transfer-Encoding: chunked
    Content-Type: text/html
    [start] (<---- NOTARE DOVE STA LA PRIMA RIGA)
    0---------------------------------


    [solita sequenza]
    1---------------------------------

    eccetra...

    Ragazzi non so se mi sono spiegato ma è come se da un certo punto in poi, smettesse di scrivere "in fondo" e incominciasse a scrivere dall'inizio...

    Se si porta while a ciclare fino a 6 non succede nulla di strano.

    Nel php.ini ho output_buffering = On, ve lo segnalo perchè ho pensato che si trattasse di un limite del buffer.

    Spero di aver dato la giusta quantità di informazioni...

  2. #2
    Utente di HTML.it L'avatar di garakkio
    Registrato dal
    Dec 2011
    residenza
    Roma
    Messaggi
    480
    Scusa ma perché mandi la pagina come text/html? Dovresti mandarla come application/pdf, che il tipo mime giusto per i file pdf.
    E poi il pdf in che modo lo generi? Usi una qualche libreria?

  3. #3
    Ciao garakkio, grazie per l'interessamento,

    Rimando la pagina come text/html perché è un test,
    che simula solo la scrittura di un pdf, ma avevo bisogno di vedere chiaramente cosa veniva dato in output scrivendo caratteri a caso,
    quello che mi interessa con il test e' riprodurre il problema,
    ovvero il fatto che scrivendo tanti caratteri in una precisa sequenza, ad un certo punto php inizia a scrivere dall'inizio..

    esempio

    Codice PHP:

    echo "[1] hjjhhkkjj( x 50.000)"

    echo "[2] hjjhhkkjj( x 50.000)"

    echo "[3] hjjhhkkjj( x 50.000)" 
    viene

    codice:
    [3] hjjhhkkjj( x 50.000)
    
    [headers]
    
    [1] hjjhhkkjj( x 50.000)
    
    [2] hjjhhkkjj( x 50.000)
    Per generare il pdf utilizzo ezpdf perché già presente sul framework (tiki-wiki ),
    ma ho provato anche con FPDF.

    Il problema non sta nella libreria, perché nel test non uso alcuna libreria, solo un while e degli echo....

    Credo sia un problema di Buffer pieno, ma non ci capisco più..

  4. #4
    Ragazzi un piccolo aggiornamento,

    ho provato a modificare il codice come segue:

    Codice PHP:

    $i 
    0

    // questo simula la sequenza di caratteri %PDF- 
    echo "[START]";  

    while(
    $i 10){ 

       
    ob_start(); // <----- QUI parte modificata

       // questo simula un pdf bello carico nel buffer 

       
    echo "\n"$i "----------------------\n\n"
       echo 
    "STRINGA MOOOOLTO LUNGA 50.000 caratteri circa"
       
       
    $i++; 

       
    ob_end_flush(); // <----- QUI parte modificata

    Ora, non sono praticissimo di Output Buffering, però mi sembra che così il buffer venga svuotato in continuazione, ma il risultato e' lo stesso, nella risposta trovo del testo, poi le varie headers e poi dell'altro testo, non capisco secondo me il mio server e' posseduto

    Spero che qualcuno sappia darmi qualche suggerimento in merito..

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 © 2026 vBulletin Solutions, Inc. All rights reserved.