+ Rispondi alla Discussione
Risultati da 1 a 16 di 16

Script per cancellare file con caratteri speciali su Aruba

Ultimo Messaggio di franz1386 il:
  1. #1
    User L'avatar di franz1386
    Data Registrazione
    Dec 2009
    Messaggi
    102

    Script per cancellare file con caratteri speciali su Aruba

    Ciao a tutti, praticamente gestisco un sito con Hosting Linux su Aruba, in questo sito c' un form tramite il quale si pu fare l'Upload di file....a volte capita che questi file abbiamo dei caratteri speciali nel loro nome ( basta un apostrofo! ), quando succede questo sia che acceda tramite FTP sia che lo faccia dal pannello di controllo di Aruba, non posso ne rinominare ne scaricare e nemmeno cancellare quel file!!!
    Ho provato a fare una ricerca ed in effetti capita anche ad altri, alcuni hanno elaborato degli Script in PHP per cancellare i file in questione ( vedi ad esempio: w w w . guidepc . it/2010/12/aruba-pure-ftpd-caratteri-speciali/ ) per li ho provati tutti ma non funzionano....qualcuno sa come fare?
    Grazie mille dell'attenzione!

  2. #2
    User L'avatar di Francesco Di Caprio
    Data Registrazione
    Mar 2013
    Localit
    Caserta
    Messaggi
    217
    Segui Francesco Di Caprio su Twitter Aggiungi Francesco Di Caprio su Google+ Aggiungi Francesco Di Caprio su Facebook Aggiungi Francesco Di Caprio su Linkedin
    Perch li vuoi cancellare? Se l'upload gestito dal PHP, quest'ultimo ti consente di rinominarlo. La funzione che copia il file definitivamente sul webserver la move_uploaded_file(). Il suo secondo parametro, come puoi vedere dalla documentazione, il percorso completo che vuoi dare al file e quindi anche il suo nome. Prendi questa funzione:

    Codice PHP:
    function rimuovi_caratteri_speciali($stringa) {
         return 
    preg_replace('/^\w+$/'''$stringa);

    ed applicala alla variabile che trovi come secondo parametro della funzione move_uploaded_file().
    Per quanto riguarda i files che hai gi caricato, metti in un file php il seguente script che ti posto, ed in base ai commenti che ti ci metto decidi se rinominarli togliendo i caratteri speciali oppure se cancellarli.

    Codice PHP:
    <?php
    function contiene_caratteri_speciali($stringa) {
        return 
    preg_match('/^\w+$/'$stringa);
    }
    function 
    rimuovi_caratteri_speciali($stringa) {
        return 
    preg_replace('/^\w+$/'''$stringa);
    }
    $percorso "/home/htdocs/dominio.it/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") {
                    
    unlink($percorso $file);
                    echo 
    "$file cancellato.<br>";
                }
                if (
    $operazione == "r") {
                    
    $nuovonome rimuovi_caratteri_speciali($file);
                    
    rename($percorso $file$percorso $nuovonome);
                    echo 
    "$file rinominato in $nuovonome<br>";
                }
            }
        }
    }
    closedir($dir);
    ?>
    AVVERTIMENTO: non l'ho testato. La regex che ho messo in preg_match e preg_replace quella che include tutti i caratteri speciali tranne il punto e l'underscore. Fai prima un backup dei file contenuti in quella cartella, prima di far passare questo script.

    EDIT: il secondo parametro della preg_replace serve a specificare un carattere da sostituire al carattere speciale trovato. Non ci ho messo nulla, ma se ci vuoi un underscore, mettilo tra gli apici...

  3. #3
    User L'avatar di franz1386
    Data Registrazione
    Dec 2009
    Messaggi
    102
    Ciao Francesco, grazie mille della risposta...anche con questo codice quando richiamo il file.php da browser mi da sempre lo stesso errore:
    Internal Server Error

    The server encountered an internal error or misconfiguration and was unable to complete your request.
    Please contact the server administrator at postmaster comproorologi.org to inform them of the time this error occurred, and the actions you performed just before this error.
    More information about this error may be available in the server error log.

    Non so se magari sbaglio a mettere il percorso della cartella....i file in questione sono della cartella principale del mio sito ( w w w . comproorologi.org )...io nel tuo codice ho semplicemente sostituito 'dominio.it' con 'comproorologi.org'....

  4. #4
    User L'avatar di Francesco Di Caprio
    Data Registrazione
    Mar 2013
    Localit
    Caserta
    Messaggi
    217
    Segui Francesco Di Caprio su Twitter Aggiungi Francesco Di Caprio su Google+ Aggiungi Francesco Di Caprio su Facebook Aggiungi Francesco Di Caprio su Linkedin
    Citazione Originariamente Scritto da franz1386 Visualizza Messaggio
    io nel tuo codice ho semplicemente sostituito 'dominio.it' con 'comproorologi.org'....
    No, la variabile $percorso io l'ho assegnata per farti capire cosa ci dovevi mettere, ma dovevi personalizzarla tu. Sicuramente il tuo path non sar quello che io ho stabilito... se sei su un Aruba Hosting Linux, il percorso della root : /web/htdocs/w w w . comproorologi.org/home/ . Prova a utilizzare questo percorso. Ovviamente togli gli spazi tra le tre w, il Forum non mi ha dato possibilit di postare il percorso correttamente.

  5. #5
    User L'avatar di franz1386
    Data Registrazione
    Dec 2009
    Messaggi
    102
    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"]["size"]/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[$i],$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.";
    }




    ?>

  6. #6
    User L'avatar di franz1386
    Data Registrazione
    Dec 2009
    Messaggi
    102
    PS
    Ci ho aggiunto la funzione che mi avevi detto tu e quella funziona alla grande! =) grazie...

  7. #7
    User L'avatar di Francesco Di Caprio
    Data Registrazione
    Mar 2013
    Localit
    Caserta
    Messaggi
    217
    Segui Francesco Di Caprio su Twitter Aggiungi Francesco Di Caprio su Google+ Aggiungi Francesco Di Caprio su Facebook Aggiungi Francesco Di Caprio su Linkedin
    Citazione Originariamente Scritto da franz1386 Visualizza Messaggio
    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.

    Codice 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_filestrrpos($name_of_uploaded_file'.') + 1);

    $size_of_uploaded_file $_FILES["uploaded_file"]["size"] / 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[$i], $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.";
    }
    ?>
    EDIT: il mio script non funziona? Ti d sempre Errore 500 - Internal Server Error o un altro errore?

  8. #8
    User L'avatar di franz1386
    Data Registrazione
    Dec 2009
    Messaggi
    102
    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....

  9. #9
    User L'avatar di Francesco Di Caprio
    Data Registrazione
    Mar 2013
    Localit
    Caserta
    Messaggi
    217
    Segui Francesco Di Caprio su Twitter Aggiungi Francesco Di Caprio su Google+ Aggiungi Francesco Di Caprio su Facebook Aggiungi Francesco Di Caprio su Linkedin
    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.
    Endelab - Web Development

  10. #10
    User L'avatar di franz1386
    Data Registrazione
    Dec 2009
    Messaggi
    102
    S, ce l'ho messo lo slash... gli errori che mi da sono questi:
    [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
    [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
    [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!

  11. #11
    User L'avatar di Francesco Di Caprio
    Data Registrazione
    Mar 2013
    Localit
    Caserta
    Messaggi
    217
    Segui Francesco Di Caprio su Twitter Aggiungi Francesco Di Caprio su Google+ Aggiungi Francesco Di Caprio su Facebook Aggiungi Francesco Di Caprio su Linkedin
    Quindi Aruba utilizza suExec per la gestione dei permessi. Questa mi mancava. Mi puoi dire quali permessi sono impostati su quei files?
    Endelab - Web Development

  12. #12
    User L'avatar di franz1386
    Data Registrazione
    Dec 2009
    Messaggi
    102
    Fai te che io non so nemmeno cosa sia suExec....comunque i permessi su quei file ( che non mi fa modificare!!! ) sono 644...

  13. #13
    User L'avatar di Francesco Di Caprio
    Data Registrazione
    Mar 2013
    Localit
    Caserta
    Messaggi
    217
    Segui Francesco Di Caprio su Twitter Aggiungi Francesco Di Caprio su Google+ Aggiungi Francesco Di Caprio su Facebook Aggiungi Francesco Di Caprio su Linkedin
    Citazione Originariamente Scritto da franz1386 Visualizza Messaggio
    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.
    Endelab - Web Development

  14. #14
    User L'avatar di franz1386
    Data Registrazione
    Dec 2009
    Messaggi
    102
    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...

  15. #15
    User L'avatar di Francesco Di Caprio
    Data Registrazione
    Mar 2013
    Localit
    Caserta
    Messaggi
    217
    Segui Francesco Di Caprio su Twitter Aggiungi Francesco Di Caprio su Google+ Aggiungi Francesco Di Caprio su Facebook Aggiungi Francesco Di Caprio su Linkedin
    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.

    Codice 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);
    ?>
    Endelab - Web Development

  16. #16
    User L'avatar di franz1386
    Data Registrazione
    Dec 2009
    Messaggi
    102
    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...

+ Rispondi alla Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] Attivato
  • Il codice [VIDEO] Attivato
  • Il codice HTML Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.