Decia el manual oficial de PHP sobre:
upload_tmp_dir no value
Cita: upload_tmp_dir string
The temporary directory used for storing files when doing file upload. Must be writable by whatever user PHP is running as. If not specified PHP will use the system's default
"si no se indica un directorio ahí .. se tomará como temporar el del sistema" (en windows c:\windows .. en linux suele ser /tmp ..)
RE 1:
mmm
Código PHP:
if(!move_uploaded_file($_FILES['archivo']['tmp_name'], "fotos/".$_FILES['archivo']['name']))
(yo usaría comillas en los indices del array FILES ...)
Otro detalle: hay cosas que haces como obtener la extensión del archivos que no son del todo seguras. Un archivo puede ser de X extensión pero de formato MIME totalmente diferente. Para eso en $_FILES['archivo']['type'] tienes el formato MIME del archivo que subas (tipo : image/jpeg .. o similar ..) Por ahí puedes obtener si es un "jpg" o un "gif" .. o el tipo de archivo que es de forma más segura.
RE 2:
No hay forma .. sólo se puede cambiar desde php.ini (ni con .htacces ..)
RE 3:
No (que yo sepa) desde PHP .. PHP usa ese directorio temporal por seguridad para todo lo subas por HTTP y pase por PHP.
Recomendación
Revisa la versión de PHP que uses .. Las funciones move_uploaded_file() y los arrays superglobales $_FILES están disponibles desde (no me acuerdo) versión de PHP (revisa el manual oficial de PHP ..)
Visita:
http://www.php.net/manual/en/features.file-upload.php
Para más detalles, lee los comentarios de los usuarios que suelen ser interesantes.
Un saludo,