I want to get a text file upto size 20 Mb via browser.
My php code is:
$allowedExts = array("txt");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
$file_name=$_FILES["file"]["name"];
if ((
($_FILES["file"]["type"] == "text/plain"))
&& ($_FILES["file"]["size"] < 5243000)
&& in_array($extension, $allowedExts))
{ echo "Uploaded : " . $_FILES["file"]["name"] . "<br>";}
else {echo "Invalid file";}
Note: my php ini settings are :
ini_set("upload_max_filesize", "20M");
ini_set("memory_limit", "32M");
ini_set("post_max_size","20M");
but My browser throwing : Invalid File. even for 3 Mb file (less than 2 Mb is working fine)
Extension is .txt only,
I am sure extension is not a problem.
What might be the one and solution for it?
UPDATE:
my PHP.ini says: Maximum allowed size for uploaded files. upload_max_filesize = 20M
but my php info(); still says: upload_max_filesize local 2M master 2M
You cannot change the upload_max_filesize variable using ini_set (as you can see in this list: List of php.ini directives). Change the php.ini configuration instead.
Make sure below things with print_r($_FILES)
1) $_FILES["file"]["type"] exact match to "text/plain"
2) $_FILES["file"]["size"] is less than 5243000
3) $extension value is txt ( Caps matter in this case )
4) check all the settings with ini_get after ini_set to make sure that settings has been changed
5) If still is ok then please past your print_r($_FILES) output here
Related
I've been pulling hairs on this one. I am creating a quit simple file upload application. On a specific point, the files are not uploaded and I receive the message: "Sorry, your file is too large.". I am uploading a file of ±2MB.
The relevant parameters in the php.ini are:
file_uploads On
max_execution_time 60
max_file_uploads 20
post_max_size 32M
upload_max_filesize 32M
So, there shouldn't be a problem there. Anybody an idea?
Used code:
if (isset($_POST['fileUploadBtn'])) {
echo 'File Size: '.$_FILES['file']['size'];
if(isset($_FILES['file']['error'])) {
echo $error_types[$_FILES['file']['error']].'<br>';
}
if(isset($_FILES["file"])) {
if($_FILES["file"]["name"] != '') {
uploadFile($mysqli, $orderid, $md5, $_FILES["file"], 'weefontwerp');
}
}
}
In your code, did you check the file size?
like this:
if ($_FILES['fileToUpload']['size'] > 500000) {
echo 'file too large.';
}
Or, did you restart php to reload the php.ini?
OK, the problem was in the downloaded upload function. There was the check, I forgot to check. I'm terribly sorry to post this here!
On my XAMPP server, copy() and move_uploaded_file() fail to work if any file uploaded via http request is over 30kB even thought the php.ini post_max_size and upload_max_size values are well over 30kB.
$tmpfile = $_FILES['fileupload']['tmp_name'];
$fileExtension = 'txt';
$newfilename = '01234';
if (!move_uploaded_file($tmpfile, "files/" . $newfilename . "." . $fileExtension)) {
echo "Failed to upload.";
} else {
echo 'Uploaded successfully.';
}
And the php.ini looks like:
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize=70M
; Maximum number of files that can be uploaded via a single request
max_file_uploads=20
; Post form size limit
post_max_size=80M
I can't see what I'm doing wrong here, does anyone know how to fix this?
Description :
I have given the interface to the user where he/she can upload pdf,doc,docx,img files perfectly.
Every thing is done except I have a confusion on one little piece of code. So before knowing any reason why its done I cant just write it in my php.
While uploading any file at first we do check the type of file before taking any further actions.
Now there are two ways by which we can check one is
$ext = end(explode(".",$_FILES['upload'][name]));
if(in_array($ext,$array_name_of_all_allowed_extensions))
OR
if($_FILES['upload']['type'] == "application/pdf")
{
//any action
}
but every where I see the code for uploading the file is as
$allowedExts = array("pdf", "doc", "docx");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "application/pdf")
|| ($_FILES["file"]["type"] == "application/msword"))
&& ($_FILES["file"]["size"] < 20000000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}
every one seems to be using the both .. the if condition for the type and in_array() as well.
Can any one tell me why is that. I mean using any one of them in_array() preferred should do the job
Is this understandable :
$ext = end(explode(".",$_FILES['upload'][name]));
if(in_array($ext,$array_name_of_all_allowed_extensions))
the above piece of code my fellow programmer is to check the extension of the file user uploaded it can be any weird extension that you don't your web app to upload so you define an array that only the files that end with ".jpeg , .jpg , .pdf" etc are allowed to be uploaded
if ((($_FILES["file"]["type"] == "application/pdf")
this above line of code checks the type of uploaded file that whether it is the type you allow or not
you can write .exe at the end of any pdf file and it will update the name of the file to mypdf.exe how ever the type of the file will still remain pdf document and it will open as regular as it should ... So checking through if is just a little work that the file being uploaded has a correct name and not been tampered with ...
Its entirely your choice otherwise if you make an array of the allowed file type and then use in_array() that is enough too ... hope that helps :) ile that whether
i was making an upload script when i tested an image file wit this extension .JPG, i don't know whats the difference between jpg or jpeg, but it seems that $_FILES don't recognize this file type.
I've read several threads that $_FILES ins't that reliable when it comes to mime type, so i decided to used the php's mime type function mime_content_type(), php's getimagesize(), pathinfo(), though pathinfo returns a file name, and type, but i need the path of the file which is NOT present, all of the functions are being passed with $_FILES['file']['tmp_name'] as parameters.
So this problem came up when i decided to upload an image file e.g sample.JPG, i think most of this files are raw from the camera <-- that's what i think though but nevertheless what is more important is that i can upload them .JPG, .jpg, jpeg, .png. all of them works fine except for .JPG.
Main problem is that field ['tmp_name'] in $_FILES has no values when .JPG is to be uploaded.
Any of you guys who have encountered this problem please do share your workaround or "how did you do it" kind of thing.
If $_FILES[$field]['tmp_name'] is empty then the file hasn't been uploaded. You should look at $_FILES[$field]['error'] to see why.
FWIW, and as far as I understand it, the mime-type in $_FILES[] is provided by the browser.
Update: here is a bit of potted code to handle all file upload errors:
$message = 'Error uploading file';
switch( $_FILES['newfile']['error'] ) {
case UPLOAD_ERR_OK:
$message = false;;
break;
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
$message .= ' - file too large (limit of '.get_max_upload().' bytes).';
break;
case UPLOAD_ERR_PARTIAL:
$message .= ' - file upload was not completed.';
break;
case UPLOAD_ERR_NO_FILE:
$message .= ' - zero-length file uploaded.';
break;
default:
$message .= ' - internal error #'.$_FILES['newfile']['error'];
break;
}
if( !$message ) {
if( !is_uploaded_file($_FILES['newfile']['tmp_name']) ) {
$message = 'Error uploading file - unknown error.';
} else {
// Let's see if we can move the file...
$dest .= '/'.$this_file;
if( !move_uploaded_file($_FILES['newfile']['tmp_name'], $dest) ) { // No error supporession so we can see the underlying error.
$message = 'Error uploading file - could not save upload (this will probably be a permissions problem in '.$dest.')';
} else {
$message = 'File uploaded okay.';
}
}
}
Check your php.ini and in particular this setting
; Maximum allowed size for uploaded files.
; http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize
upload_max_filesize = 6M
Or do this in your Apache Config:
<Directory "/var/www/vhosts/path/to/your/directory/import/">
php_value post_max_size 6M
php_value upload_max_filesize 6M
</Directory>
I would also say that it is poor that PHP doesn't report an error in the error logs if you upload a file that is larger than your php.ini upload_max_filesize setting. For example, if you upload a 6MB file when you have it set at 2M (which I think is the default).
Posting an answer because my rating is too low.
Remember to restart your server after setting the max file size cap in your php.ini. I spent hours on this issue thinking that it wasn't a file size problem meanwhile I forgot to restart. After restart everything worked.
I hope this can help someone.
I was having the same problem and being familiar with mostly .NET platform makes you forget about stuff that happens in the client side html.
My problem was my form is having a MAX_FILE_SIZE hidden input which has some value lesser than file's equavalent bytes.
Your form should have this;
Other than that, your form tag must include enctype="multipart/form-data"
I was thining that max file size was in kb, but it's in bytes, thanks to some other page in stackoverflow.
The other reason that might cause this problem your php.ini settings that people have mentioned in previous comments. You should can post_max_size = 200M to php.ini file too.
If you are developing on Windows like me, you can see a dump file that showing errors at C:\Windows\Temp called as "php**VERSION**_errors.log". It helps.
Seems as though it's a random problem because while I was making a script to upload CSV files, some CSV files would have no problem uploading but in other cases, $_FILES['file'][tmp_name] would be empty.
I faced the issue with $_FILES field 'tmp_name' having no value for .JPG file extension and successfully fixed it in few steps. These measures may help someone in the future.
First of all, I implemented the Switch Case solution offered by the
user 'staticsan'. Link here -
https://stackoverflow.com/a/14472801/3681985. This solution helped me
trace the potential issues such as parameters in php.ini file and
folder permissions.
The php.ini file was named php.ini.default. Changing the parameters upload_max_filesize and post_max_size didn't yield any result, until I renamed the file to php.ini. Remember to experiment with parameter values.
After fixing the file name issue, I encountered a challenge with the permissions to the folder in which the uploaded temp image has to be moved. I have changed the permissions and was able to see the image uploaded in to the folder.
Just try this and see what happens,
if (($_FILES['file']['type']) == "image/jpg" || ($_FILES['file']['type']) == "image/jpeg") {
//do uploading stuff here
}else{
echo 'File is not a valid JPG,JPEG';
}
I'm trying to upload an image to a php script. I have a, non-persistent, bug that results in some of the images uploaded has a file size of 0. I have tried to print the _FILES array to my log file, and it shows the error code being 0, which should be ok.
These lines:
foreach($_FILES['image_file'] as $key => $val){
error_log(date('j/n/o H:i:s')." ". $key ." => ".$val. "\n", 3,$log_path);
}
Give me these in the log file:
3/10/2012 12:12:54 name => 59175248636.jpg
3/10/2012 12:12:54 type => image/jpeg
3/10/2012 12:12:54 tmp_name => C:\WINDOWS\Temp\php411F.tmp
3/10/2012 12:12:54 error => 0
3/10/2012 12:12:54 size => 0
As can be read from the log file, this script runs on a Windows machine, of which I have limited knowledge. I have already changed the post_max_size to 10M, as well as upload_max_size to 10M in the php.ini.
I am flabbergasted about this issue. When I test from my own devices, it works fine, but for some reason, when my testers try it out, it fails.
EDIT - Try this:
I think you may need to change $_FILES['file'] to $_FILES['image_file'] to work with your setup. I have left it as below for ease of reading...
if ($_FILES['file']['error'] === UPLOAD_ERR_OK && $_FILES['file']['size'] > 0){
... upload was successful ...
}elseif($_FILES['file']['error'] === UPLOAD_ERR_OK && $_FILES['file']['size'] == 0){
die("Upload failed, random upload issue... please try again);
// change this error to something more useful... (leave this error in for testing)
}else {
die("Upload failed with error code " . $_FILES['file']['error']);
}
This doesn't solve the random filesize issue, but it will allow your code / process to continue. Treat it as a failed upload and tell the user to try again...
Used code from this stackoverflow post posted by Marc B
Since I run into this from time to time, I guess I'll just post one reason this could happen: Size and error 0 can occur if you try drag and dropping a file from a Windows Explorer view of a zipped file (double click a zipped file and it opens up just like a folder) to your uploader. I use DropzoneJS a lot and by default, it processes these files immediately and pushes it to my server, which ends up seeing a 0 bytes file with no file upload errors. So if your users are doing the above, that could be the reason why you end up with such files.