• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1642
  • Last Modified:

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.
0
glcummins
Asked:
glcummins
1 Solution
 
chingmdCommented:
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.

0
 
glcumminsAuthor Commented:
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.
0
 
smueller72Commented:
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.
0
Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

 
glcumminsAuthor Commented:
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.
0
 
smueller72Commented:
can you do a df -h in bash and post the results here? im wondering if your /tmp dir only has 4gb available.
0
 
smueller72Commented:
also, if you are using a fat32 filesystem, it does not support files larger than 4gb.
0
 
glcumminsAuthor Commented:
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.
0
 
smueller72Commented:
have you tried a similar transfer with something large, but not as large as 4gb? (ex. 1gb).
0
 
glcumminsAuthor Commented:
Yes, I have tested with a range of file sizes, and anything up to 4GB works.
0
 
michel-angeloCommented:
If this is a PHP limitation and you would like to stay within the script (No exec""), could you use fopen and fread to copy the file in chuncks?
0
 
glcumminsAuthor Commented:
@michel-angelo:

That's an idea. I'll give it a try and report back.
0
 
glcumminsAuthor Commented:
I apologize for the delay in closing this question. Thank you for your assistance.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now