Solved

Trouble uploading files that are over 2 megPHP, Apache, Linux

Posted on 2009-05-18
10
263 Views
Last Modified: 2013-12-16
OK, we have recently upgraded servers and now I am unable to upload files larger then 2M. I am using php, but I am not getting any errors at all. I have looked in the httpd.conf file to see if anything stuck out, but nothing. I am assuming there are three levels of restrictions from Linux, Apache, and PHP. I have tried setting the file up with:

if(!ini_get('safe_mode'))
{
      ini_set("memory_limit","512M");
      ini_set("max_execution_time", "90");
      ini_set('display_errors', 1);
      error_reporting(E_ALL);
}
 but again I am not getting any PHP errors, and I know that this condition is resolving true, so safe_mode is not the problem. I am thinking this may be in Apache or Linux. Any ideas?
0
Comment
Question by:tech1984
  • 3
  • 3
  • 2
  • +2
10 Comments
 
LVL 4

Expert Comment

by:bljak
ID: 24412950
Try doing this:
ini_set("upload_max_filesize","512M");
0
 
LVL 11

Expert Comment

by:BrianMM
ID: 24412957
also check the ini parameters:

file_uploads = On
upload_max_filesize = 10M //needs to be in {x}M format
0
 
LVL 4

Expert Comment

by:trencH87
ID: 24413074
"upload_max_filesize" can not be set at runtime. "post_max_size" should also be set to the same as "upload_max_filesize" in either the global php.ini or a .htaccess file.
0
 
LVL 108

Expert Comment

by:Ray Paseur
ID: 24413130
Run this and look at the output to find the max sizes that are in effect at runtime.

<?php phpinfo(); ?>
0
 
LVL 108

Accepted Solution

by:
Ray Paseur earned 500 total points
ID: 24413157
Here is a file upload example that shows how to use MAX_FILE_SIZE.  When you're looking at the output of phpinfo() scan the page for "max" and you'll save some time reading!

Best regards, ~Ray
<?php // RAY_upload_example.php

error_reporting(E_ALL);
 

// MANUAL REFERENCE PAGES

// http://docs.php.net/manual/en/features.file-upload.php

// http://docs.php.net/manual/en/features.file-upload.common-pitfalls.php

// http://docs.php.net/manual/en/function.move-uploaded-file.php

// http://docs.php.net/manual/en/function.getimagesize.php
 

// ESTABLISH THE NAME OF THE 'uploads' DIRECTORY

$uploads = 'uploads';
 

// ESTABLISH THE BIGGEST FILE SIZE WE CAN ACCEPT

$max_file_size = '8192000';  // EIGHT MEGABYTE LIMIT ON UPLOADS
 

// ESTABLISH THE KINDS OF FILE EXTENSIONS WE CAN ACCEPT

$file_exts = array('jpg', 'gif', 'png', 'txt');
 

// ESTABLISH THE NUMBER OF FILES WE CAN UPLOAD

$nf = 3;
 
 
 

// THIS IS A LIST OF THE POSSIBLE ERRORS THAT CAN BE REPORTED in $_FILES[]["error"]

$errors	= array(

	0=>"Success!",

	1=>"The uploaded file exceeds the upload_max_filesize directive in php.ini",

	2=>"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",

	3=>"The uploaded file was only partially uploaded",

	4=>"No file was uploaded",

	6=>"Missing a temporary folder",

	7=>"Cannot write file to disk"

);
 
 
 

// IF THERE IS NOTHING IN $_POST, PUT UP THE FORM FOR INPUT

if (empty($_POST))

{

	?>

	<h2>Upload a file</h2>
 

	<!--

		SOME THINGS TO NOTE ABOUT THIS FORM...

		NOTE THE CHOICE OF ENCTYPE IN THE HTML FORM STATEMENT

		MAX_FILE_SIZE MUST PRECEDE THE FILE INPUT FIELD

		INPUT NAME= IN TYPE=FILE DETERMINES THE NAME YOU FIND IN $_FILES ARRAY

	-->
 

	<form name="UploadForm" enctype="multipart/form-data" action="<?=$_SERVER["REQUEST_URI"]?>" method="POST">

	<input type="hidden" name="p" value="1" />

	<input type="hidden" name="MAX_FILE_SIZE" value="<?=$max_file_size?>" />

	<p>

	Find the file(s) you want to upload and click the "Upload" button below.

	</p>
 

	<?php for ($n = 0; $n < $nf; $n++)

		{

			echo "<input name=\"userfile$n\" type=\"file\" size=\"80\" /><br/>\n";

		}

	?>

	<br/>Check this box <input autocomplete="off" type="checkbox" name="overwrite" /> to <b>overwrite</b> existing files.

	<input type="submit" name="_submit" value="Upload" />

	</form>

	<?php

	die();

}
 
 
 

else // WE HAVE GOT SOMETHING IN $_POST

{
 

// THERE IS POST DATA - PROCESS IT

	echo "<h2>Results: File Upload</h2>\n";
 

// ACTIVATE THIS TO SEE WHAT IS COMING THROUGH

//	echo "<pre>"; var_dump($_FILES); var_dump($_POST); echo "</pre>\n";
 

// ITERATE OVER THE CONTENTS OF $_FILES

	foreach ($_FILES as $my_uploaded_file)

	{
 

// SKIP OVER EMPTY SPOTS - NOTHING UPLOADED

		$error_code	= $my_uploaded_file["error"];

		if ($error_code == 4) continue;
 

// SYNTHESIZE THE NEW FILE NAME

		$f_type	= trim(strtolower(end    (explode( '.', basename($my_uploaded_file['name'] )))));

		$f_name	= trim(strtolower(current(explode( '.', basename($my_uploaded_file['name'] )))));

		$my_new_file	= getcwd() . '/' . $uploads . '/' . $f_name .'.'. $f_type;

		$my_file	= $uploads . '/' . $f_name .'.'. $f_type;
 

// OPTIONAL TEST FOR ALLOWABLE EXTENSIONS

		if (!in_array($f_type, $file_exts)) die("Sorry, $f_type files not allowed");
 

// IF THERE ARE ERRORS

		if ($error_code != 0)

		{

			$error_message = $errors[$error_code];

			die("Sorry, Upload Error Code: $error_code: $error_message");

		}
 

// GET THE FILE SIZE

		$file_size	= number_format($my_uploaded_file["size"]);
 

// MOVE THE FILE INTO THE DIRECTORY

// IF THE FILE IS NEW

		if (!file_exists($my_new_file))

		{

			if (move_uploaded_file($my_uploaded_file['tmp_name'], $my_new_file))

			{

				$upload_success = 1;

			}

			else

			{

				$upload_success = -1;

			}
 

// IF THE FILE ALREADY EXISTS

		}

		else

		{

			echo "<br/><b><i>$my_file</i></b> already exists.\n";
 

// SHOULD WE OVERWRITE THE FILE? IF NOT

			if (empty($_POST["overwrite"]))

			{

				$upload_success = 0;
 

// IF WE SHOULD OVERWRITE THE FILE, TRY TO MAKE A BACKUP

			}

			else

			{

				$now	= date('Y-m-d');

				$my_bak = $my_new_file . '.' . $now . '.bak';

				if (!copy($my_new_file, $my_bak))

				{

					echo "<br/><b>Attempted Backup Failed!</b>\n";

				}

				if (move_uploaded_file($my_uploaded_file['tmp_name'], $my_new_file))

				{

					$upload_success = 2;

				}

				else

				{

					$upload_success = -1;

				}

			}

		}
 

// REPORT OUR SUCCESS OR FAILURE

		if ($upload_success == 2) { echo "<br/>It has been overwritten.\n"; }

		if ($upload_success == 1) { echo "<br/><b><i>$my_file</i></b> has been saved.\n"; }

		if ($upload_success == 0) { echo "<br/><b>It was NOT overwritten.</b>\n"; }

		if ($upload_success < 0)  { echo "<br/><b>ERROR <i>$my_file</i> NOT SAVED - SEE WARNING FROM move_uploaded_file() COMMAND</b>\n"; }

		if ($upload_success > 0)

		{

			echo "$file_size bytes uploaded.\n";

			if (!chmod ($my_new_file, 0755))

			{

				echo "<br/>chmod(0755) FAILED: fileperms() = ";

				echo substr(sprintf('%o', fileperms($my_new_file)), -4);

			}

			echo "<br/><a href=\"$my_file\">See the file $my_file</a>\n";

		}

// END ITERATOR

	}

}

?>

Open in new window

0
Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

 

Author Comment

by:tech1984
ID: 24413524
Ray_Paseur:

Sorry, Upload Error Code: 1: The uploaded file exceeds the upload_max_filesize directive in php.ini  
was the error I got, I guess it was php after all. I will bump it up in the ini file and see what that does real quick.
0
 

Author Comment

by:tech1984
ID: 24413830
Yup, that was it, I am still not sure why PHP didn't give me that error, nor why I can't use ini_set for anything.
0
 

Author Closing Comment

by:tech1984
ID: 31582632
This gave me the error I need. That lead me to the answer. If you are having problems with uploading files, just use this script to get a better idea of what is going on.
0
 
LVL 4

Expert Comment

by:trencH87
ID: 24413976
Give your points to the one that actually gave the solution, and not the one with the longest(really unnessasary) thread.
0
 
LVL 4

Expert Comment

by:trencH87
ID: 24414020
Btw, take a look at this for ini directives: http://www.php.net/manual/en/ini.list.php
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
PHP string issue 5 18
php namespace question with Twilio 4 16
Post xml via PHP Soap Client 3 10
How to fetch your row in php 14 13
If your site has a few sections that need to be secure when data is transmitted between the server and local computer, such as a /order/ section for ordering or /customer/ which contains customer data, etc it would of course be recommended to secure…
Nothing in an HTTP request can be trusted, including HTTP headers and form data.  A form token is a tool that can be used to guard against request forgeries (CSRF).  This article shows an improved approach to form tokens, making it more difficult to…
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.

746 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

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now