I'm implementing a file upload system using cakephp. I'm using php 5.2.5 and cakephp 1.2. Below I have mentioned the maximum file sizes that I have given in php.ini.
post_max_size = 2000M
upload_max_filesize = 1800M
memory_limit = 3328M
But I need to upload 5 GB files and when I change the file upload sizes to 5GB in php.ini web server doesn't respond.
Is there any method that I can use to upload 5 GB files to my system? and How can I calculate the maximum size of the file that I can configure in php.ini.
By migrating to php 5.3 will I able to support more capacity for file uploading.
Cheers !!!!
AFAIK uploading 5GB with a HTML-Form is really big. Don't forget that the binary data is normally read in raw 8-bits but the TCP/IP stack only support a 7-bit charset to transport. So all your data is wrapped in another code BASE64 which adds about 40% overhead to your data so it's 6+ GB. I dont't know if upload size should include this overhead but you can try to add this to post max size because according to the documentation post max size should be double the size of upload size. I also to suggest you to use lighttpd + fast-cgi.
And you are going to upload those 5GB using a webform? It would take ages. You should probably use FTP.
Set the max_input_time variable as well, otherwise PHP may exceed the input time while reading the uploaded file, and stop execution.
Use flash uploader (uploadify may do the trick) - because the browser will hang up and won't wait for the server response.
Related
Is there a restriction on the file size to send through the REST API?
I have a file field in a web form in my Drupal Website and sending the uploaded file to the SugarCRM application through REST API using base64_encode function.
This is working fine for the small files. But when we try to upload files around 2 MB the file, it is sending an empty value.
Is there a limit on file size that can be sent through REST API? If so, is there any other way I can send a big file(at least 2MB) to my SugarCRM application?
Google did not help me this time. If someone could, that would be great.
If you have root access on your machine, this is the most reliable and universal approach to increasing the maximum file upload. Find the php.ini file. The most common location for php.ini is /etc/php.ini. If the file is not there, you can determine where php.ini lives by using the phpinfo() function.
Once you've located php.ini, there are two settings you need to change, the max post size and max file upload size.
Maximum size of POST data that PHP will accept.
post_max_size = 2M;
Maximum allowed size for uploaded files.
upload_max_filesize = 2M;
Change these values to the maximum upload size you would like to allow. After making the changes check that the changes have been applied by checking phpinfo()
in your admin panel, you need to edit upload.php file to increase the input upload value size.
your question is not clear, if you can - provide some code's that's are creating problems or post a error logs.
My host is on a shared server so therefore i cannot change the php.ini. My goal is to upload files of upto 100mb but the servers upload_max_filesize is set to 6mb which i cannot change..
My quetsion is, is it possible to bypass this by uploading in chunks using something like https://github.com/blueimp/jQuery-File-Upload?
Many thanks in advance.
Ok I've now figured it..
By default chunking is not enabled.. you have to enable it in the jquery options, here is the source to do that https://github.com/blueimp/jQuery-File-Upload/wiki/Chunked-file-uploads
For testing purposes i've changed my php.ini settings to accept only 1mb and i'm successfully loading files that surpass that max upload.
Any idea on how big the file size could one file uploaded using php and html5?
And
Is there any suggestions on good components or example to do this?
thanks a lot!
On the server side the maximum upload size is limited by php post_max_size and upload_max_filezize.
Also your webserver can limit the maximum size of your post body. E.g. Apache limitrequestbody which defaults to 0 = unlimited or nginx client_max_body_size which defaults to 2MB
If you are planning to upload large files using html5 you might want to have a look at file.slice which is supported by all modern browsers
Support for .slice in the File API
Firefox supports the Blob API and the .slice APIs that come with it. This can help people who want to process parts of large File objects from JavaScript without having to load the whole file into the memory. People who reliably upload large files can use some server and JS code to split a large file into sections and upload chunks, including re-retrying failed sections, or even uploading several sections, in parallel.
Using this, you could upload giant files in chunks and merge them on the server-side again.
EDIT
Found this great article which explains html5 uploads by streaming via xhr
http://www.webiny.com/blog/2012/05/07/webiny-file-upload-with-html5-and-ajax-using-php-streams/
This procedure has a very low memory footprint, you might still run into the webserver and php upload limits because this is done with a single request. The code should give you an idea on how the whole technology works.
PHP's pretty crappy when it comes to large file uploads, particularly because you have to a memory limit higher than the size of the file. As well, Apache on 32bit systems tends to have a 2gig file limit itself, so even if PHP could handle the upload, Apache will choke.
You need to set the value of upload_max_filesize and post_max_size in your php.ini :
; Maximum allowed size for uploaded files.
upload_max_filesize = 40M
; Must be greater than or equal to upload_max_filesize
post_max_size = 40M
If you can't change your php.ini, you're out of luck. You cannot change these values at run-time; uploads of file larger than the value specified in php.ini will have failed by the time execution reaches your call to ini_set.
See the Description of core php.ini directives.
The maximum size of an uploaded file is integer.
When an integer is used, the value is measured in bytes
The maximum file size value is defined in phi.ini file.
search this in php.ini
Maximum allowed size for uploaded files.
upload_max_filesize = 32M
I know you can control the size of uploads in PHP using $_FILES['userfile']['size'] > XXX
My question I suppose is performance related.
When you upload a file, my understanding is the whole file gets uploaded to a temporary location, and then you have access to $_FILES
What happens if a user attempts to upload a 10gb file? (as an example of a very large file)
If a large file is attempted to be uploaded, does this waste server bandwidth as the file needs to be uploaded before it can be processed/validated.
I know PHP has like timeouts etc but I'm curious if there is a performance impact from users attempting to upload very large files, even if (for example) the max file size is 2mb.
Is this a concern or something unavoidable and just to not worry.
Thanks.
Both apache and php have max-post limitation to prevent such behavior.
from php.ini:
; Maximum allowed size for uploaded files.
upload_max_filesize = 4M
; Maximum size of POST data that PHP will accept.
post_max_size = 8M
Actually, the [size] isn't there for control, it's simply the size of the uploaded file. By the time your script gets fired up to check that, PHP (and the webserver) have already handled the uploaded and applied their own internal limits (Apache's LimitRequestBody, PHP's upload_max_size, etc...).
PHP will allow all uploads to proceed, if they've been enabled via the file_uploads INI setting. Since you can't really trust the client, the client-provided size will be ignored and the upload will proceed until it either completes or hits the upload limit. So, yes, it can waste your bandwidth.
If you allow uploads, then it can be abused. But, there's no real difference between someone uploading a 10gig file or someone doing a POST with 10gig of bogus data. Either way, you've got 10gig of data coming your way.
What is standard size to upload an image.When user are uploading a large image to my website upload time error is occurring.I am resizing image at the time of uploading also.I want to modify my code as if large image will go to upload then image upload should not occur.
So what is standard size of image to upload on server for any website ? So that way i will fix my code.
Thanks in advance
php.ini controls file uploads with several configuration directives.
file_uploads controls whether uploading files is allowed. Yes, 1 is the default.
upload_tmp_dir is the temporary directory used for storing files when doing file upload. Must be writable by whatever user PHP is running as. If not specified PHP will use the system's default. The default is NULL.
upload_max_filesize is what you're interested in. It's the largest upload allowed. The default is 2M. If you supply only an integer, it is assumed to be bytes. Or you can change it using a shortcut, like this:
upload_max_filesize = 10M
max_file_uploads is the max number of files that can be uploaded simultaneously. The default is 20.
Another setting that affects uploading files is the max size of POST data which is controlled with post_max_size.
If you do not need / want to change your php.ini file, you can set these values for the duration of your scripts execution using string ini_set ( string $varname , string $newvalue ).
This returns the old value if you succeeded in changing the value, and it returns false if the change didn't succeed. So, to change upload_max_filesize to 10M you could do :
if ( ini_set('upload_max_filesize', '10M') )
{
// Do stuff that requires big files to be uploaded
}
As a foot note to changing these memory values:
PHP allows shortcuts for bit values, including K (kilo), M (mega) and G (giga). PHP will do the conversions automatically if you use any of these. Be careful not to exceed the 32 bit signed integer limit (if you're using 32bit versions) as it will cause your script to fail.
Most times php is configured to accept no more the 2mb files.
Check here for solution
For the memory problem try:
ini_set("memory_limit","80M"); //or any amount of ram but do not go to high
Your thumbnailer probably uses to much ram because of the high resolution of your image.So giving more memory to php is a quick hack to make it work. But big enough images will still crash.