|
Posted by shimmyshack on 03/02/07 07:22
On 2 Mar, 00:22, Alex <compuh...@free.fr> wrote:
> Hello,
>
> I'm trying to write a little php script to transfert some
> files from a server to clients (web/http).
>
> It's working fin with small files. But transfering big files
> (try on 1Gb) failed! The transfert is stoped randomly (sometimes
> at 25%, sometimes at 75%,...).
>
> And I don't understand why?! :/
>
> Here, a part of my php script:
>
> - Firstly, I'm sending the http headers
>
> header('HTTP/1.1 200 OK');
> header('Status: 200 OK');
> header("Cache-Control: no-store, no-cache, must-revalidate");
> header("Cache-Control: post-check=0, pre-check=0", false);
> header("Pragma: no-cache");
> header("Expires: ".gmdate("D, d M Y H:i:s", mktime(date("H")+2,
> date("i"), date("s"), date("m"), date("d"), date("Y")))." GMT");
>
> header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
> header('Accept-Ranges: bytes');
> header('Content-Transfer-Encoding: Binary');
> header('Content-Type: application/force-download');
> //header('Content-Type: application/octet-stream');
> header('Content-Disposition: attachment; filename="'.$filename.'"');
> //header("Content-Disposition: inline; filename=$name");
> header('Content-Length: '.$length);
>
> - After that, I have a loop to send the content of the file
> (and I'm writing in same time a debuf file on the server)
>
> $fd = fopen("debug.txt", "a");
> fwrite($fd, "start of transfert\n");
> fclose($fd);
>
> while(true) {
> if (connection_aborted()) {
> $fd = fopen("debug.txt", "a");
> fwrite($fd, "connection aborted\n");
> fclose($fd);
> break ;
> } else if (connection_status() != 0) {
> $fd = fopen("debug.txt", "a");
> fwrite($fd, "connection status\n");
> fclose($fd);
> break ;
> } else if (feof($fp)) {
> $fd = fopen("debug.txt", "a");
> fwrite($fd, "end of file\n");
> fclose($fd);
> break ;
> } else {
> print(fread($fp, 1024*8));
> flush();
> }
>
> }
>
> $fd = fopen("debug.txt", "a");
> fwrite($fd, "end of transfert\n");
> fclose($fd);
>
> So, the first thing I've noticed is that
> header('Content-Length: '.$length);
> give the correct file size!
> (wget my_script.php show the correct file size to be transfer).
>
> The second thing is that the debug file contains only this:
> "start of transfer
> start of transfer
> start of transfer
> ..."
> (The wget command re-start the download of the file when
> the transfer is closed before the end and the wget command
> write on the screen: "connection closed").
>
> I'm trying to delete the 2 tests (connection_aborted() and
> connection_status()), but the same bug appears!
> Identically bug when I'm trying to read the file not with
> 1024*8 block size, but with only 1024 size.
>
> Someone has an genius idea for me?
>
> Thanks (ans sorry for my bad english),
>
> --
> Alex
Firstly try to support resume, since you send headers that imply you
do. This will help, but why reinvent the wheel there are great http
servers written in php, one of which is
http://nanoweb.si.kz/
Navigation:
[Reply to this message]
|