Checked php.ni and the filesize is set plenty high enough. However I still could not upload a 2 mb picture.
I don't know if you were aware, but there are three variables that will come into play here:
memory_limit - The maximum memory available to a script -- I recommend a bit more than twice
post_max_size, especially with smaller limits. Based upon my 16MB upload size suggestion, set to 50MB. Depending on how your scripts handle uploads, you may find that this can be dialed back to 32MB without restricting a 16MB upload.
post_max_size - The maximum size of an HTTP POST response (essentially the buffer for a POST response). Based upon my 16MB upload size suggestion, set to 24MB.
upload_max_file_size - The maximum allowed size for uploaded files (about 2/3 size of post_max_size can be a good start). I suggest at least 16MB to allow for tutorial uploads.
Two other variables that can also come into play are
max_execution_time and
max_input_time, especially with larger uploads and/or slow connections which can require more time.
On my primary web server these are rather astronomical figures (up to 320MB for memory_limit) due to users who need to routinely move large files (up to 144MB) via email (SquirrelMail) and their personal web storage area (also via SquirrelMail).
You will probably want to aim for a max_file_size of around 16-32MB to allow for Tutorial uploads and so forth and adjust the other variables accordingly.
My max_execution_time is 1h20m (for your purposes 10-15m is probably better) my max_input_time is 10m (you may wish to start with 5-10min).
Over time you can experiment with increasing/reducing these values until everything is dialed in. You basically want values large enough to insure that 99.999% of legitimate activity can complete without hassle while keeping them low enough to protect the server during modest scripted attacks (there is no practical defense against a heavy attack -- that must be handled at the router level).
If you are using a PHP Accellerator, then there may be other relevant variables, though most accellerators will use the memory and timings already defined in php.ini.
I apologize for not taking the time to write this all up yesterday, but I was just about to nod off at the time and I only just woke up (I do best with 36-48hr days, so my bedtime is a bit longer than most).
Steve's suggested quick-and-dirty PHP phpinfo script is also an excellent tip for verifying your changes have taken effect and are not being overridden elsewhere. This is a common developer hack with PHP (I have a custom made equivalent for PERL that I wrote years ago).
HTH - And thanks for all the hard work.
Edit: I give times for max_execution_time and max_input_time in human format (1h20m) the actual php.ini values should be in seconds. I don't know if PHP converts 10m to 600 (sec) off hand, so convert to seconds for your php.ini value to be safe.
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)