Scusate il doppio post, anche se ci fosse la possibilità di disattivare il php sarebbe solo un rimedio è non una soluzione, in quanto è vero che APACHE esegue un php ma è anche vero che cose del tipo file.gif.png non sono veri file.. Si dovrebbe filtrare con una lista di file permessi... Immaginiamo di lavorare con la cartella di default per i file temporanei, passare il file con una lista di estensiozioni e salvarlo nella cartella immagini.
Codice PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>upload</title>
</head>
<body>
<?php
if (isset($_FILES['userfile']['name'][0],$_FILES['userfile']['tmp_name'][0])) {
$id = 100000000;
foreach ($_FILES['userfile']['error'] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES['userfile']['tmp_name'][$key];
$name = $_FILES['userfile']['name'][$key];
$file = explode('.',$name);
if(($split = count($file)) == 1){
$file[1] = '';
}
else{
$split -= 1;
}
$file[0] = (string)$id.time();
$i = 1;
$start[0] = false;
for (; $i <= $split;) {
if(($start[$i] = (stripos($file[$i],'gif') === 0 || stripos($file[$i],'png') === 0 || stripos($file[$i],'jpeg') === 0 || stripos($file[$i],'jpg') === 0 || stripos($file[$i],'tgz') === 0 || stripos($file[$i],'tar') === 0) && $start[$i-1] === false) || $start[$i-1] === true && stripos($file[$i-1],'tar') === 0 && stripos($file[$i],'gz') === 0) {
$file[$i] = strtolower($file[$i]);
}
else{
$start[$i] = true;
echo '<p>file non permesso</p>';
unset($id,$temp_name,$name,$file,$split,$start,$_FILES['userfile']);
break(2);
}
$i++;
}
$name = implode('.',$file);
move_uploaded_file($tmp_name,"immagini/$name");
}
}
}
?>
<!-- Tipo di codifica dei dati, DEVE essere specificato come segue -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
<!-- MAX_FILE_SIZE deve precedere campo di input del nome file -->
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<!-- Il nome dell'elemento di input determina il nome nell'array $_FILES -->
Send this file: <input name="userfile[]" type="file" />
<input type="submit" value="Send File" />
</form>
</body>
</html>
Nel form html al posto di "__URL__" inserite il vostro script php.
È un esempio che sfrutta la logica dei codici di errori.. Creo un fantomatico id (simulò una richiesta da un database, dite che 900 milioni di account potrebbero bastare? :D, per ordinare gli id sarebbe bene impostare l'autoincremto al primo numero disponibile in fase di registrazione)
Se il file ricevuto non contiene errori allora verifico che sia gif,.png,.jpeg,.jpg,.tgz,.tar.gz.. Se lo sono rinomino l'estensioni in minuscolo e poi procedo spostandolo nella cartella designita il nome sarà id+timestamp.estensione.