Carga de archivos

DiegoSolo
16 de Agosto del 2003
Tengo el siguiente formulario para cargar un archivo:

echo " <form method=POST action=?tab=agregaritem enctype="multipart/form-data">rn";
echo " <input type=file name=foto></input><br><br>rn";
echo " <input type=hidden name=max_file_size value=100000>rn";
echo " <input type=submit value=Agregar> <input type=reset value=Borrar>rn";
echo " </form><br>rn";

Y para la subida del archivo el siguiente script:

if ($foto != "")
{
$filepath = "fotos/".$codigo.".jpg";
chmod($filepath, 0777);
if (!copy($foto, $filepath))
{
echo "No se pudo subir el archivo.";
exit;
}
}

Resulta, que observando el módem me doy cuenta de que el archivo si sube al servidor, y luego pasa tranquilamente a la siguiente página dando el mensaje de que el archivo se ha subido satisfactoriamente pero cuando busco el archivo por todo el host no lo puedo encontrar. Lo probé en mi PC con Windows y andaba bien. Sospecho que puede tener algo que ver con la ruta, pero he probado ponerlo en el mismo directorio (sacando "fotos/") y me ha dado el mismo resultado. Si alguien tiene idea de qué está pasando por favor que me avise. Gracias...

DiegoSolo
16 de Agosto del 2003
Encontré la solución al problema: Resulta que el código tal como lo tenía originalmente funciona bien cuando navego la página en la máquina donde corro el Apache, la cual es mi PC. Pero al subir la web a un server donde no utilizan el sistema operativo Windows ocurre el problema. La cosa es que en la segunda parte de la página yo recuperaba la variable del archivo como POST, así:

$foto = $HTTP_POST_VARS["foto"];

if ($foto != "")
{
$filepath = "fotos/".$codigo.".jpg";
chmod($filepath, 0777);
if (!copy($foto, $filepath))
{
echo "No se pudo subir el archivo.";
exit;
}
}

Y esto funciona bien cuando la PC que navega la página es la misma que la hostea, pero al subirla al server las cosas cambian, y la forma correcta de recuperar las variables es:

$foto = $HTTP_POST_FILES['userfile']['tmp_name'];

A partir de PHP 4.1.0 se puede utilizar la variable corta $_FILES y la cosa quedaría así:

$foto = $_FILES['userfile']['tmp_name'];

Espero les ayude. Bye...

DiegoSolo
16 de Agosto del 2003
Perdón... una corrección a lo anterior: Donde dice 'userfile' iría el nombre de la variable, para el ejemplo anterior sería 'foto'.