ciao a tutti,
ho uno script che permette l'upload e il download dei file sul mio sito, premetto che successivamente lo metterò in una pagina con password per evitare problemi.
lo script è formato da due file e una cartella disposti in questo modo:
>upload
>>>uploaded(contiene i file uppati)
>>>upload.php ( è la pagina alla quale bisogna accedere per uppare i file)
>>>uploader.php (è la pagina delle configurazioni)
questi sono i codici delle pagine:
upload.php
Codice PHP:
Codice PHP:
<?
include("uploader.php"); // Don't put anything above this line or you'll get errors
?>
<p><strong><span style="background: #fff; color: #000"><? if($_REQUEST["message"] == "") echo "seleziona un file da caricare con il tasto sfoglia."; else echo $_REQUEST["message"]?></span></strong></p>
<form action="upload.php" enctype="multipart/form-data" id="upload" method="post">
<p><input id="userfile" name="userfile" size="45" type="file" /><input name="upload" type="submit" value="Upload File" /><br /></p>
<p>estensioni file accettate: <strong><?=$file_extensions_list?></strong> se hai la necessità di caricare file con altre estensioni invia un email a webmaster@angeliperungiorno.it indicando l'estensione del file che vuoi caricare</p>
<p>dimensione massima file: <strong> (<?=round($maximum_file_size/1048576)?>MB)</strong></p>
</form>
<p><strong>file caricati</strong></p>
<table style="border: 2px dotted #000; width: 100%">
<? if($uploaded_files == "") echo " <tr>
<td colspan=\"2\" style=\"background: #fff; color: #000; text-align: center\"><br /><strong>non hai ancora caricato nessun file.</strong><br /><br /></td>
</tr>
"; else echo $uploaded_files ?>
</table>
uploader.php:
Codice PHP:
Codice PHP:
<?
/*
Silentum Uploader v1.3.0
Modified November 23, 2007
uploader.php copyright 2005-2007 "HyperSilence"
*/
// Begin options
$allow_file_deletion = true; // To allow visitors to delete files, leave this at true; otherwise, change it to false
$file_extensions = array(".doc", ".gif", ".htm", ".html", ".jpg", ".png", ".txt"); // Add or delete the file extensions you want to allow
$file_extensions_list = ".doc, .gif, .htm, .html, .jpg, .png, .txt"; // Type the same as above, without the quotes separating them
$max_length = 30; // The maximum character length for a file name
$maximum_file_size = "26214400"; // In bytes
$upload_log_file = "upload_log.txt"; // Change this to the log file you want to use
// End options
$folder_directory = "http://angelibrescia.altervista.org/upload/";
$message = "";
$set_chmod = 0;
$site_uri = "http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"];
$upload_directory = "uploaded/";
$upload_uri = "http://angelibrescia.altervista.org/uploaded";
if($allow_file_deletion == true) $status = "enabled";
else $status = "disabled";
if($_REQUEST["delete"] && $allow_file_deletion) {
$resource = fopen($upload_log_file,"a");
fwrite($resource,date("F d, Y / h:i:sa")." - ".$_REQUEST["delete"]." deleted by ".$_SERVER["REMOTE_ADDR"]."\n");
fclose($resource);
if(strpos($_REQUEST["delete"],"/.") > 0);
elseif(strpos($_REQUEST["delete"],$upload_directory) === false);
elseif(substr($_REQUEST["delete"],0,6) == $upload_directory) {
unlink($_REQUEST["delete"]);
$message = "File has been deleted.";
header("Location: $site_uri?message=$message");
}
}
elseif($_FILES["userfile"]) {
$resource = fopen($upload_log_file,"a");
fwrite($resource,date("F d, Y / h:i:sa")." - ".$_FILES["userfile"]["name"]." "
.$_FILES["userfile"]["type"]." uploaded by ".$_SERVER["REMOTE_ADDR"]."\n");
fclose($resource);
$file_type = $_FILES["userfile"]["type"];
$file_name = $_FILES["userfile"]["name"];
$file_ext = strtolower(substr($file_name,strrpos($file_name,".")));
@chmod($upload_uri."".$file_name, 0755);
if($_FILES["userfile"]["size"] > $maximum_file_size) {
$message = "ERROR: il file che stai cercando si caricare supera il limite di ".$maximum_file_size." bytes. carica un file più piccolo";
}
elseif($file_name == "") $message = "ERROR: devi selezionare un file da caricare.";
elseif(strlen($file_name > $max_length)) $message = "ERROR: il nome del file è troppo lungo il massimo è ".$max_length." caratteri. cambia il nome e prova a ricaricarlo";
elseif(!preg_match("/^[A-Z0-9_.\- ]+$/i",$file_name)) $message = "ERROR: il nome del tuo file contiene caratteri non ammessi.";
elseif(!in_array($file_ext, $file_extensions)) $message = "ERROR: <ins>$file_ext</ins> questa estensione del file non è permessa. manda un email a [email]webmaster@angeliperungiorno.it[/email] indicando l'estensione del file (<ins>$file_ext</ins>)";
else $message = upload_file($upload_directory, $upload_uri);
header("Location: $site_uri?message=$message");
}
elseif(!$_FILES["userfile"]);
else $message = "ERROR: file non valido.";
$open = opendir($upload_directory);
$uploaded_files = "";
while($file = readdir($open)) {
if(!is_dir($file) && !is_link($file)) {
$uploaded_files .= " <tr>
<td style=\"background: #fff; color: #000; text-align: left; width: 70%\"><a href=\"$upload_directory$file\" title=\"$file (".filesize($upload_directory.$file)." bytes)\">".$file."</a> (".filesize($upload_directory.$file)." bytes)</td>";
if($allow_file_deletion)
$uploaded_files .= "
<td style=\"background: #fff; color: #000; text-align: right; width: 30%\"><a href=\"?delete=$upload_directory".urlencode($file)."\" title=\"Delete File\">Delete File</a></td>";
else
$uploaded_files .= "
<td style=\"background: #fff; color: #000; text-align: right; width: 30%\"><del><strong>Delete File</strong></del></td>";
$uploaded_files .= "
</tr>
<tr>
<td colspan=\"2\" style=\"background: #eee; color: #000; text-align: left; text-indent: 20px\">Uploaded <strong>".date("F d, Y / h:ia", filemtime($upload_directory.$file))."</strong></td>";
$uploaded_files .="
</tr>
";
}
}
function upload_file($upload_directory, $upload_uri) {
$file_name = $_FILES["userfile"]["name"];
$file_name = str_replace(" ","_",$file_name);
$file_path = $upload_directory.$file_name;
$temporary = $_FILES["userfile"]["tmp_name"];
$result = move_uploaded_file($temporary, $file_path);
if(!chmod($file_path,0777))
$message = "ERROR: A folder to place the files was not found, or the files need to be CHMODed to 777. si prega di inviare un email a [email]webmaster@angeliperungiorno.it[/email]";
else $message = ($result)?"file caricato con successo." : "An error has occurred.";
return $message;
}
?>
spiegati tutti i componenti veniamo ai problemi:
1) come potete vedere nel file uploader e precisamente in questa stringa
Codice PHP:
Codice PHP:
$file_extensions = array(".doc", ".gif", ".htm", ".html", ".jpg", ".png", ".txt"); // Add or delete the file extensions you want to allow
$file_extensions_list = ".doc, .gif, .htm, .html, .jpg, .png, .txt"; //
vi è un elenco di estensioni consentite, io vorrei però fare in modo che siano accettate tutte le estensioni eccetto quelle che io inserirò, esempio php o altri che permetterebbero azioni pericolose per il sito, come devo fare?
2) come potete vedere in fondo alla pagina upload http://angelibrescia.altervista.org/upload/upload.php vi è un elenco di tutti i file uppati con il tasto per cancellarli, però se anche premo il pulsante non vengono cancellati, come devo fare per risolvere il problema? (P.S. provate pure a cancellare i file, quelli che ho uppato sono solo di prova e contengono solo parole a caso)
3) se si preme sul nome di un file questo viene aperto o scaricato a seconda dell'estensione, se si preme su un file con estensione .txt questo viene aperto nel browser se invece si preme su un file .zip questo viene scaricato, io volevo fare che il file venisse scaricato indistintamente dal tipo di estensione, si può fare?