Solved

PHP copy() and a 4GB limit

Posted on 2008-10-13
12
1,506 Views
Last Modified: 2013-12-06
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
Comment
Question by:glcummins
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
12 Comments
 
LVL 9

Expert Comment

by:chingmd
ID: 22703445
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
 
LVL 24

Author Comment

by:glcummins
ID: 22703488
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
 
LVL 3

Expert Comment

by:smueller72
ID: 22703503
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
Secure Your WordPress Site: 5 Essential Approaches

WordPress is the web's most popular CMS, but its dominance also makes it a target for attackers. Our eBook will show you how to:

Prevent costly exploits of core and plugin vulnerabilities
Repel automated attacks
Lock down your dashboard, secure your code, and protect your users

 
LVL 24

Author Comment

by:glcummins
ID: 22703537
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
 
LVL 3

Expert Comment

by:smueller72
ID: 22704934
can you do a df -h in bash and post the results here? im wondering if your /tmp dir only has 4gb available.
0
 
LVL 3

Expert Comment

by:smueller72
ID: 22704951
also, if you are using a fat32 filesystem, it does not support files larger than 4gb.
0
 
LVL 24

Author Comment

by:glcummins
ID: 22705031
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
 
LVL 3

Expert Comment

by:smueller72
ID: 22705397
have you tried a similar transfer with something large, but not as large as 4gb? (ex. 1gb).
0
 
LVL 24

Author Comment

by:glcummins
ID: 22705567
Yes, I have tested with a range of file sizes, and anything up to 4GB works.
0
 
LVL 2

Accepted Solution

by:
michel-angelo earned 500 total points
ID: 22705699
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
 
LVL 24

Author Comment

by:glcummins
ID: 22705753
@michel-angelo:

That's an idea. I'll give it a try and report back.
0
 
LVL 24

Author Comment

by:glcummins
ID: 22976200
I apologize for the delay in closing this question. Thank you for your assistance.
0

Featured Post

What Is Transaction Monitoring and who needs it?

Synthetic Transaction Monitoring that you need for the day to day, which ensures your business website keeps running optimally, and that there is no downtime to impact your customer experience.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Password hashing is better than message digests or encryption, and you should be using it instead of message digests or encryption.  Find out why and how in this article, which supplements the original article on PHP Client Registration, Login, Logo…
Introduction This article is intended for those who are new to PHP error handling (https://www.experts-exchange.com/articles/11769/And-by-the-way-I-am-New-to-PHP.html).  It addresses one of the most common problems that plague beginning PHP develop…
Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
Learn how to find files with the shell using the find and locate commands. Use locate to find a needle in a haystack.: With locate, check if the file still exists.: Use find to get the actual location of the file.:

717 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question