Regarding the stat() on files larger than 2GB on 32 bit systems not working, note that the behavior appears to differ between Linux and Windows. Under Windows there's so way to know whether or not this failed.
It's been my experience that under Linux, performing a stat() on files that are too large for the integer size generates a warning and returns false. However under Windows it silently truncates the high order bits of the size resulting in an incorrect number. The only way you'd ever know it failed is in the event that the truncation happened to leave the sign bit on resulting in a negative size. That is, there is _no_ reliable way to know it failed.
This is true of filesize() as well.
Tom