Depending on the directive, PHP settings can be changed by the php.ini file, a php_flag setting in an httpd.conf or .htaccess file, or by the function ini_set. Certain directives can be changed by functions specific to them, such as error_reporting
Now that I think about it, I don't know offhand if phpinfo reports the settings as they are when it is called, or as they are because of all files and previous calls. I think it's the latter, but I'm not sure.
Part of the reason for that is I use ini_get to check configuration settings specifically in code.
EDIT: File upload related settings must be set by an ini file or by the webserver via php_flag. They can't be changed at runtime.