anche a me dà qualche problema, soprattutto con i nomi dei file strani.
il codice che uso su
http://www.thousand.altervista.org
è (la presenza del [$key] è dovuta all'upload di file multipli, la funzione è inserita in un ciclo):
Codice PHP:
if (($HTTP_POST_FILES['file']['type'][$key] == "image/gif" OR $HTTP_POST_FILES['file']['type'][$key] == "image/pjpeg"
OR $HTTP_POST_FILES['file']['type'][$key] == "image/jpeg" OR $HTTP_POST_FILES['file']['type'][$key] == "application/octet-stream")
AND $HTTP_POST_FILES['file']['size'][$key] < 1024000)
{
if (is_uploaded_file($HTTP_POST_FILES['file']['tmp_name'][$key]))
{
//a file was uploaded
if ($HTTP_POST_FILES['file']['size'][$key] > 1024000)
{
unlink($HTTP_POST_FILES['file']['tmp_name'][$key]);
echo "La dimensione del file ".$HTTP_POST_FILES['file']['name'][$key]." è superiore ai 1024 KBytes, ridurre la dimensione del file!";
}
else
{
//File has passed all validation, copy it to the final destination and remove the temporary file:
//invalid chars
$file_ext_pos = strrpos($HTTP_POST_FILES['file']['name'][$key], '.');
$ext = substr($HTTP_POST_FILES['file']['name'][$key],$file_ext_pos);
$file_name = substr($HTTP_POST_FILES['file']['name'][$key],0,$file_ext_pos);
if ($HTTP_POST_FILES['file']['name'][$key] != str_replace("+"," ",urlencode($HTTP_POST_FILES['file']['name'][$key])))
{
$new_name = preg_replace('/[^a-z0-9_\-\.]/i', ' ',$file_name);
echo "Il file ".$HTTP_POST_FILES['file']['name'][$key]." contiene caratteri speciali e sarà pubblicato col nome ".$new_name.".<BR>";
}
else
{
$new_name = $file_name;
}
if (file_exists($_POST['name'].$new_name.$ext))
{
$i = 2;
while (file_exists($_POST['name'].$new_name."(".$i.")".$ext))
{
$i++;
}
$new_name = $new_name."(".$i.")".$ext;
echo "Il file ".$HTTP_POST_FILES['file']['name'][$key]." esiste già sul server e sarà pubblicato col nome ".$new_name.".<BR>";
}
else
{
$new_name = $new_name.$ext;
}
$HTTP_POST_FILES['file']['name'][$key] = $new_name;
if (move_uploaded_file($HTTP_POST_FILES['file']['tmp_name'][$key],$_POST['name'].$HTTP_POST_FILES['file']['name'][$key])==false)
echo "Alert! Il file ".$HTTP_POST_FILES['file']['name'][$key]." non è stato pubblicato correttamente.";
else
echo "Upload del file ".$HTTP_POST_FILES['file']['name'][$key]." avvenuto con successo.";
$file_name = $_POST['name'].$HTTP_POST_FILES['file']['name'][$key];
}
}
else
{
if (copy(stripslashes($HTTP_POST_FILES['file']['name'][$key]),
$_POST['name'].basename($HTTP_POST_FILES['file']['name'][$key]))==false)
echo "Alert! Il file ".$HTTP_POST_FILES['file']['name'][$key]." non è stato pubblicato correttamente.";
else
echo "Upload del file ".$HTTP_POST_FILES['file']['name'][$key]." avvenuto con successo.";
$file_name = $_POST['name'].basename($HTTP_POST_FILES['file']['name'][$key]);
}
}
else
{
if ($HTTP_POST_FILES['file']['size'][$key] > 1024000)
echo "Alert! Questo formato (".$HTTP_POST_FILES['file']['type'][$key].") non è supportato, il file ".$HTTP_POST_FILES['file']['name'][$key]." non sarà pubblicato.";
else
echo "Alert! Questo file è troppo grande (".$HTTP_POST_FILES['file']['size'][$key]."), e ".$HTTP_POST_FILES['file']['name'][$key]." non sarà pubblicato.";
unlink($HTTP_POST_FILES['file']['tmp_name'][$key]);
echo "Sono ammessi solo file jpg e gif, cambiare il formato del file ".$HTTP_POST_FILES['file']['name'][$key]."!";
}
stringendo:
Codice PHP:
if (move_uploaded_file($HTTP_POST_FILES['file']['tmp_name'][$key],$_POST['name'].$HTTP_POST_FILES['file']['name'][$key])==false)
echo "Alert! Il file ".$HTTP_POST_FILES['file']['name'][$key]." non è stato pubblicato correttamente.";
else
echo "Upload del file ".$HTTP_POST_FILES['file']['name'][$key]." avvenuto con successo.";
mi faresti vedere che codice usi?