Re: PHP cuts download process prematurely

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Feb 25, 2008 at 10:39 PM, Manuel Barros Reyes <manuca@xxxxxxxxx> wrote:
[snip!]
>  I guess the download is stoped by some timeout and not because of the
>  amount of kb downloaded because the size varies slightly. If that
>  timeout exists it should be of apox. 5-10 seconds.

    Check the values in php.ini for the following:
        default_socket_timeout
        max_execution_time
        memory_limit

    And since you're uploading, also check these values in php.ini:
        max_input_time
        file_uploads
        upload_max_filesize

    Then, presuming you use Apache, check your httpd.conf file to see
if the value of Timeout is sufficient.  The default is 300.

>  I use this function to perform the upload $contenido is the content of
>  the file and to that variable I assign the big chunk of output from
>  the report, $nombre_archivo is the optional name for the file. I can
>  paste more code but I think the problem is here.

    Here's a rewrite of your function, which you can see working live
at http://www.pilotpig.net/code-library/stream-file-with-checking.php.
 Sorry if my Spanish isn't very good in the code itself. :-\

<?
// Illustrates a way to serve a CSV file and ensure
// that the client is still active.
// Originally written for Manuel Barros Reyes on php-general


function enviarArchivo($contenido, $nombre_archivo = "") {
        ignore_user_abort(1);

        if($nombre_archivo == "") {
                 $nombre_archivo = date("dmyHi").".csv";
        }

        header("Content-Type: application/octet-stream");
        header("Content-Disposition: attachment; filename=$nombre_archivo");
        header("Content-Length: ".strlen($contenido));

        $arsenal_contenido = explode("\n",$contenido);

        for($i=0;$i<count($arsenal_contenido);$i++) {
                if(connection_status() != 0) {
                        $err  = "La conexion ha estado cerrada.  ";
                        $err .= "Estos datos no podian ser enviados:\n";
                        $err .= $arsenal_contenido[$i];
                        file_put_contents('error.txt',$err);
                        exit;
                }
                echo $arsenal_contenido[$i]."\n";
        }
}

enviarArchivo(file_get_contents('test.csv'));
?>

-- 
</Dan>

Daniel P. Brown
Senior Unix Geek
<? while(1) { $me = $mind--; sleep(86400); } ?>

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux