Re: mmap in php_passthru_fd in file.c ?

From: Date: Fri, 18 May 2001 05:23:29 +0000
Subject: Re: mmap in php_passthru_fd in file.c ?
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-55703@lists.php.net to get a copy of this message
> >>>If a system has mmap() a readfile() will mmap the entire file to memory > >>>and then dump that while without mmap it will read it one block at a time. > >>>That's a siginificant memory difference and one that may not be expected. > >>> > >>>Obviously the mmap will be faster, but if as in bug #10701, someone is > >>>adding headers or doing something else to really large files, things are > >>>going to break. Since readfile() already has an opotional argument I > >>>think the right approach is a separate function that turns the mmap off > >>>and reads the file block by block. fpassthru() doesn't have an optional > >>>arg, so we could toggle it there for that function. > >>> > >>>Comments? > >>> > >>> > >> > >>Well, out of the solutions, I think the optional argument to fpassthru() > >>would be the best. However, why not, as you stated in response to the > >>bug report, read the file with a custom function and output it, > >>therefore avoiding the mmap() as well? > >> > > > > Well, the one problem with that is that it can be very inefficient because > > it stops reading when it hits a newline and you end up always reading > > partial buffers if the file has newlines in it. Having a function that > > quickly reads/dumps a file block by block would make this much more > > efficient. > > > > fread() should handle this, no? True. But I guess my main issue is still that the behaviour changes radically based on a hidden configure check (ie. whether mmap is there or not) and that ensuring a block-by-block read in user space is inefficient for huge files. -Rasmus

« previous php.dev (#55703) next »