glcummins
asked on
PHP copy() and a 4GB limit
On a FreeBSD 6.2 system, my PHP scripts are encountering a 4GB filesize limit when using copy(). The copy process simply fails when 4 gigabytes have been transferred.
The attempted transfer is from a local file to a local file, and the filesystem is UFS (which has a 1TB filesize limit).
I have been unable to find any documentation regarding such a limit in PHP or FreeBSD. Can anyone provide a work-around for copying large files within PHP? Shelling out and using system commands is a possibility, but I would prefer to stay in PHP if possible.
PHP version is 5.1.6 with the Suhosin patch.
The attempted transfer is from a local file to a local file, and the filesystem is UFS (which has a 1TB filesize limit).
I have been unable to find any documentation regarding such a limit in PHP or FreeBSD. Can anyone provide a work-around for copying large files within PHP? Shelling out and using system commands is a possibility, but I would prefer to stay in PHP if possible.
PHP version is 5.1.6 with the Suhosin patch.
I'm no php expert, but reading your question, made me think that the limit is PHP itself. That being the case, I would split the file into managable sizes, and unsplit (if needed) in the destination location.
ASKER
I agree that this sounds like a PHP limit. However, I have been unable to find anything in the PHP documentation that would indicate such a limit.
Unfortunately, splitting the file is not an option in this case. A confirmation from someone that they have encountered a similar issue would be enough to determine that this is a system (rather than a user) error.
Unfortunately, splitting the file is not an option in this case. A confirmation from someone that they have encountered a similar issue would be enough to determine that this is a system (rather than a user) error.
You can always use shell_exec to run shell commands with php
http://us3.php.net/shell_exec
There will be no limit as you are basically running a shell command, and it uses php.
http://us3.php.net/shell_exec
There will be no limit as you are basically running a shell command, and it uses php.
ASKER
Shelling out is a possibility, but I would prefer to stay in PHP if I can.
If no other solution presents itself, however, this will be the only option I can see.
If no other solution presents itself, however, this will be the only option I can see.
can you do a df -h in bash and post the results here? im wondering if your /tmp dir only has 4gb available.
also, if you are using a fat32 filesystem, it does not support files larger than 4gb.
ASKER
I am using ufs which should have a 1TB filesize limit. Here is the output of df:
Filesystem Size Used Avail Capacity Mounted on
/dev/ad4s1a 190M 57M 117M 33% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/ad4s4d 74G 42G 26G 62% /usr
/dev/ad4s3d 69G 56M 64G 0% /var
/dev/ad5s1 144G 35G 97G 27% /var/db/mysql
If the file copy process was dependent on the /tmp directory it would fail much sooner than 4GB, I think, since the / directory has only 190M in total size.
Filesystem Size Used Avail Capacity Mounted on
/dev/ad4s1a 190M 57M 117M 33% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/ad4s4d 74G 42G 26G 62% /usr
/dev/ad4s3d 69G 56M 64G 0% /var
/dev/ad5s1 144G 35G 97G 27% /var/db/mysql
If the file copy process was dependent on the /tmp directory it would fail much sooner than 4GB, I think, since the / directory has only 190M in total size.
have you tried a similar transfer with something large, but not as large as 4gb? (ex. 1gb).
ASKER
Yes, I have tested with a range of file sizes, and anything up to 4GB works.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
@michel-angelo:
That's an idea. I'll give it a try and report back.
That's an idea. I'll give it a try and report back.
ASKER
I apologize for the delay in closing this question. Thank you for your assistance.