PHP_INI_USER Entry can be set in user scripts (like with ini_set()) or in the Windows registry
PHP_INI_PERDIR Entry can be set in php.ini, .htaccess or httpd.conf
PHP_INI_SYSTEM Entry can be set in php.ini or httpd.conf
PHP_INI_ALL Entry can be set anywhere
Here's the list of all of them http://www.php.net/manual/en/ini.list.php
Click through the links on each one and read the notes. There's more to this then you might realize. post_max_size must be larger than upload_max_filesize. If memory limit is enabled by your configure script, memory_limit also affects file uploading. Generally speaking, memory_limit should be larger than post_max_size. Don't host your hosts resources.
So as you have a PHP_INI_PERDIR in there, it would make sense to set all 3 in a .htaccess for an upload directory and keep them together. I'm on IIS so am a bit rusty on .htaccess but something like this should do the trick (with whatever values you need).
Save it as a file called .htaccess. Next make sure your FTP client has the ability to see hidden files and check there is not already an .htaccess file in the directory you're FTPing to, some hosts use them. If there is dl it and add those lines to it, or just FTP it to the upload directory where your upload scripts are.
If you're uploading big files look into the progress bar scripts. There are a few prewritten that should be easy enough to make fit your needs.
Anti Linux rants are usually the result of a lack of Linux experience, while anti Windows rants are usually a result of a lot of Windows experience.
After uploading (or attempting to upload), my script gives an error. Specifically, the $_FILES["file"]["error"] generates 2, meaning the file I'm uploading is larger than the allowed file size. Are there other variables I have to set?