- Home
- Categorie
- Coding e Sistemistica
- PHP
- Script per cancellare file con caratteri speciali su Aruba
-
Infatti poi me ne ero accordo e avevo già provato anche con quel percorso...non funziona lo stesso!
Magari potrebbe essere utile farti vedere com'è il codice del file.php che gestisce l'upload dei file:
<?php
$marca=$_POST['marca'];
$cassa=$_POST['cassa'];
$movimento=$_POST['movimento'];
$descrizione=$_POST['commento'];
$email=$_POST['email'];
//Get the uploaded file information
$name_of_uploaded_file =
basename($_FILES['uploaded_file']['name']);function rimuovi_caratteri_speciali($name_of_uploaded_file) {
return preg_replace('/^\w+$/', '_', $name_of_uploaded_file);
}//get the file extension of the file
$type_of_uploaded_file =
substr($name_of_uploaded_file,
strrpos($name_of_uploaded_file, '.') + 1);$size_of_uploaded_file =
$_FILES["uploaded_file"]/1024;//size in KBs//Settings
$max_allowed_file_size = 9100; // size in KB
$allowed_extensions = array("jpg", "jpeg", "gif", "bmp");//Validations
if($size_of_uploaded_file > $max_allowed_file_size )
{
$errors .= "\n Size of file should be less than $max_allowed_file_size";
}//------ Validate the file extension -----
$allowed_ext = false;
for($i=0; $i<sizeof($allowed_extensions); $i++)
{
if(strcasecmp($allowed_extensions*,$type_of_uploaded_file) == 0)
{
$allowed_ext = true;
}
}if(!$allowed_ext)
{
$errors .= "\n The uploaded file is not supported file type. ".
" Only the following file types are supported: ".implode(',',$allowed_extensions);
}
//copy the temp. uploaded file to uploads folder
$path_of_uploaded_file = $upload_folder . $name_of_uploaded_file;
$tmp_path = $_FILES["uploaded_file"]["tmp_name"];if(is_uploaded_file($tmp_path))
{
if(!copy($tmp_path,$path_of_uploaded_file))
{
$errors .= '\n error while copying the uploaded file';
}
}$to = "[email protected]";
// IL SOGGETTO DELLA MAIL
$subject = "Offerta orologio";// COSTRUZIONE DEL CORPO DEL MESSAGGIO
$body = "Contenuto del modulo:\n\n";$body .= "Marca: " . trim(stripslashes($_POST["marca"])) . "\n";
$body .= "Cassa: " . trim(stripslashes($_POST["cassa"])) . "\n";
$body .= "Movimento: " . trim(stripslashes($_POST["movimento"])) . "\n";
$body .= "Descrizione: " . trim(stripslashes($_POST["commento"])) . "\n";
$body .= "email: " . trim(stripslashes($_POST["email"])) . "\n";
$body .= "File: " . trim(stripslashes($_FILES['uploaded_file']['name'])) . "\n";if(@mail($to, $subject, $body)) { // SE L?INOLTRO E? ANDATO A BUON FINE?
echo "L'invio ? andato a buon fine, premi indietro per tornare alla pagina precedente!";
} else {// ALTRIMENTI?
echo "Si sono verificati dei problemi nell?invio della mail.";
}?>
-
PS
Ci ho aggiunto la funzione che mi avevi detto tu e quella funziona alla grande! grazie...
-
@franz1386 said:
PS
Ci ho aggiunto la funzione che mi avevi detto tu e quella funziona alla grande! grazie...Figurati, anche se non ho capito come hai fatto a testarla visto che in quel codice non l'hai usata... ti posto l'algoritmo che hai postato "corretto" secondo le tue esigenze.
[php]
<?php
function rimuovi_caratteri_speciali($name_of_uploaded_file) {
return preg_replace('/^\w+$/', '_', $name_of_uploaded_file);
}
$marca = $_POST['marca'];
$cassa = $_POST['cassa'];
$movimento = $_POST['movimento'];
$descrizione = $_POST['commento'];
$email = $_POST['email'];//Get the uploaded file information
$name_of_uploaded_file = rimuovi_caratteri_speciali(basename($_FILES['uploaded_file']['name']));//get the file extension of the file
$type_of_uploaded_file = substr($name_of_uploaded_file, strrpos($name_of_uploaded_file, '.') + 1);$size_of_uploaded_file = $_FILES["uploaded_file"] / 1024; //size in KBs
//Settings
$max_allowed_file_size = 9100; // size in KB
$allowed_extensions = array("jpg", "jpeg", "gif", "bmp");
//Validations
if ($size_of_uploaded_file > $max_allowed_file_size) {
$errors .="\n Size of file should be less than $max_allowed_file_size";
}
//------ Validate the file extension -----
$allowed_ext = false;
for ($i = 0; $i < sizeof($allowed_extensions); $i++) {
if (strcasecmp($allowed_extensions*, $type_of_uploaded_file) == 0) {
$allowed_ext = true;
}
}
if (!$allowed_ext) {
$errors .="\n The uploaded file is not supported file type. " . " Only the following file types are supported: " . implode(',', $allowed_extensions);
}//copy the temp. uploaded file to uploads folder
$path_of_uploaded_file = $upload_folder . $name_of_uploaded_file;
$tmp_path = $_FILES["uploaded_file"]["tmp_name"];
if (is_uploaded_file($tmp_path)) {
if (!move_uploaded_file($tmp_path, $path_of_uploaded_file)) {
$errors .='\n error while copying the uploaded file';
}
}
$to = "[email protected]";// IL SOGGETTO DELLA MAIL
$subject = "Offerta orologio";// COSTRUZIONE DEL CORPO DEL MESSAGGIO
$body = "Contenuto del modulo:\n\n";
$body .="Marca: " . trim(stripslashes($_POST["marca"])) . "\n";
$body .="Cassa: " . trim(stripslashes($_POST["cassa"])) . "\n";
$body .="Movimento: " . trim(stripslashes($_POST["movimento"])) . "\n";
$body .="Descrizione: " . trim(stripslashes($_POST["commento"])) . "\n";
$body .="email: " . trim(stripslashes($_POST["email"])) . "\n";
$body .="File: " . trim(stripslashes($_FILES['uploaded_file']['name'])) . "\n";
if (@mail($to, $subject, $body)) {// SE L?INOLTRO E? ANDATO A BUON FINE?
echo"L'invio ? andato a buon fine, premi indietro per tornare alla pagina precedente!";
} else {// ALTRIMENTI?
echo"Si sono verificati dei problemi nell?invio della mail.";
}
?>
[/php]EDIT: il mio script non funziona? Ti dà sempre Errore 500 - Internal Server Error o un altro errore?
-
Ah...io l'avevo incollata lì in mezzo al codice, poi ho provato a inviare un file dal modulo e aveva funzionato...ora comunque ho usato il tuo che è sicuramente meglio! grazie...
Comunque mi dà sempre Errore 500....
-
Hai incluso anche lo slash finale nel percorso che ti ho dato per il tuo dominio (/web/htdocs/w w w . comproorologi.org/home**/**)?
Se si, hai possibilità nel pannello di Aruba di guardare il log degli errori del webserver per vedere la descrizione dell'errore 500?EDIT: nel caso, prova a spostare i file in una sottocartella /files/, modifica il percorso in /web/htdocs/w w w . comproorologi.org/hom./files/, e a dare alla cartella files almeno i permessi 775.
-
Sì, ce l'ho messo lo slash... gli errori che mi da sono questi:
[TABLE="class: questionTab, width: 95%"][TD][Thu Mar 14 15:20:15 2013] [error] [client 2.225.24.53:55078] - w w w . comproorologi . org - End of script output before headers: cancella.php[/TD]
[/TR][TD][Thu Mar 14 15:20:15 2013] [error] [client 2.225.24.53:55078] - w w w . comproorologi . org - AH01215: suexec policy violation: see suexec log for more details[/TD]
[/TR][TD][Thu Mar 14 15:07:52 2013] [error] [client 2.225.24.53:54340] - w w w . comproorologi.org - script not found or unable to stat: /web/htdocs/w w w . comproorologi.org/home/cancella.php
E cmq non me li fa nemmeno spostare in una cartella...non ci posso proprio far niente con quei file, qualsiasi cosa faccio mi dice che non posso![/TD]
[/TR]
[/TABLE]
-
Quindi Aruba utilizza suExec per la gestione dei permessi. Questa mi mancava. Mi puoi dire quali permessi sono impostati su quei files?
-
Fai te che io non so nemmeno cosa sia suExec....comunque i permessi su quei file ( che non mi fa modificare!!! ) sono 644...
-
@franz1386 said:
Fai te che io non so nemmeno cosa sia suExec....comunque i permessi su quei file ( che non mi fa modificare!!! ) sono 644...
Non te li fa modificare? E l'errore restituito sarebbe? Vai nel pannello di Aruba, vedi che c'è un tasto per ripristinare i permessi di files e cartelle, cliccalo, fagli ripristinare i permessi e verifica se quei 644 si modificano in qualcosa d'altro.
-
Mi restituiva sempre lo stesso errore qualsiasi cosa faccia: 553 Prohibited file name: 1526'r+r$.jpg
Però la cosa dei permessi ha funzionato e adesso i permessi sono 755...ho riprovato a richiamare il file.php con il tuo codice e adesso non mi da più l'errore...però mi restituisce una pagina bianca ed i file non si cancellano...
-
Probabile io abbia sbagliato la regex... preg_match non restituisce un booleano, mi sono sbagliato. Prova a sostituire l'algoritmo con il seguente. Ho cambiato anche la funzione di rinominazione e cancellazione, se non riesce a cancellare ora ti dà un messaggio.
[php]
<?php
function contiene_caratteri_speciali($stringa) {
if (preg_match('/['^£$%&()}{@#~?><>,|=_+¬-]/', $stringa)) return true;
else return false;
}
function rimuovi_caratteri_speciali($stringa) {
return preg_replace('/['^£$%&()}{@#~?><>,|=_+¬-]/', '', $stringa);
}
$percorso = "/web/htdocs/w w w .comproorologi.org/home/"; // specifica qui il percorso della cartella che contiene i files
$operazione = "c"; // c sta per cancella e r sta per rinomina
if (!is_dir($percorso)) {
echo "Non è una cartella";
exit();
}
$dir = opendir($percorso);
if (!$dir) {
echo "Non posso accedere alla cartella, controlla i permessi";
exit();
}
while (($file = readdir($dir)) !== FALSE) {
if (!is_dir($file) && $file != ".." && $file != ".") {
if (contiene_caratteri_speciali($file)) {
if ($operazione == "c") {
if (!unlink($percorso . $file)) echo "Impossibile cancellare il file $file<br>";
else echo "$file cancellato.<br>";
}
if ($operazione == "r") {
$nuovonome = rimuovi_caratteri_speciali($file);
if (!rename($percorso . $file, $percorso . $nuovonome)) echo "Impossibile rinominare il file $file<br>";
else echo "$file rinominato in $nuovonome<br>";
}
}
}
}
closedir($dir);
?>
[/php]
-
Adesso ha funzionato!!!! sei un grande....non capisco perchè non mi funziona in un altro sito che ho ma in quello ha funzionato!!! grazie mille...