• User Attivo

    Problema con classe upload

    Ciao a tutti!
    Ho creato una piccola classe per l'upload delle immagini, ma ho due problemi:

    1. nella visualizzazione degli errori, mi da errore sconosciuto
    2. non mi rinomina il file se è gia esistente sul server

    Vi posto il codice di class.Upload.php:

    [PHP]<?php
    /********************/
    //PHP Image Uploader//
    //Il Net-Surfer //
    //2008-2009 //
    //Lunedì 10 Novembre 2008//
    /*******************/
    class Upload
    { //Start class
    public $_error; //Var degli errori
    public $_message; //Var dei messaggi
    public $_new_file_name; //Var nome file
    public $_type; //Var tipo MIME
    public $_ext; //Var estensione
    public $_complete_name_and_path; //Var PATH + NOME
    public $_row_my_query; //Var ARRAY ottenuto con MYSQL_FETCH_ARRAY

    /**
    *
    *
    __construct
    All'apertura di una nuova istanza, controlla se esiste la cartella dei file
    Se non esiste, verrà creata
    *
    *
    **/

    function __construct($_dir_name)
    {
    if(!is_dir($_dir_name))
    {
    mkdir($_dir_name,0777);
    }
    }

    /**
    *
    *
    Upload
    Funzione principale
    Effettua l'upload, la rinominazione del file, lo spostamento e l'inserimento dei files nella cartella
    *
    *
    **/

    function upload($_resource_data,$dir,$mysql)

    {

    $this->_complete_name_and_path = $dir.$_resource_data['name'];
    while(file_exists($_resource_data['name']))
    {

    $id += 1;
    $this->complete_name_and_path = $dir.$id."".$_resource_data['name'];

    }

    if(!@move_uploaded_file($_resource_data['tmp_name'],$this->_complete_name_and_path))
    {

    $this->_error = "Impossibile copiare il file nella directory";

    }

    /*if(!@rename( $this->_new_file_name ,$this->_complete_name_and_path ))
    {

    $this->_error = "Impossibile rinominare il file <b>".$this->_new_file_name."</b>";

    }

    */

    $complete_path = $_SERVER['SERVER_NAME'].substr($_SERVER['REQUEST_URI'],0,-10).$dir.$this->_complete_name_and_path;
    $my_query = mysql_query("INSERT INTO ".$mysql['table_prefix']."images(image_id,image_src,image_new_name,image_complete_path)VALUES(null,'$_resource_data[name]','$this->_new_file_name','$this->_complete_name_and_path')");
    $my_new_query = mysql_query("SELECT * FROM ".$mysql['table_prefix']."images WHERE ".$mysql['table_prefix']."images.image_src='$_resource_data[name]'");
    $this->_row_my_query = mysql_fetch_array($my_new_query);
    $this->_message = "Upload eseguito con successo!";

    }
    /**
    *
    *
    check_correct_files_in_array
    Funzione che restituisce un errore se l'estensione del file uplodato non è contenuta nell'array delle estensioni
    *
    *
    **/

    function check_correct_files_in_array($_array)
    {
    if(!in_array($this->_ext,$_array))
    {
    $this->_error = "Non sono ammessi files di tipo <br>\n<b>".$this->_type."</b> con estensione .".$this->_ext."";
    }
    }
    /**
    *
    *
    check_filetype
    Restituisce il tipo di file(image/jpg, image/png, image/gif, ecc)
    *
    *
    **/
    function check_filetype($_resource_file_name)
    {

    if(empty($_resource_file_name))
    {
    $this->_type = "File di tipo indefinito";
    }
    else
    {
    $this->_type = $_resource_file_name;
    }

    }

    /**
    *
    *
    set_file_ext
    Funzione che restituisce l'estensione del file
    *
    *
    **/
    function set_file_ext($_resource_file_name)

    {

    $ext_file = explode("." , $_resource_file_name);
    $count_ext_files = count($ext_file)-1;
    $this->_ext = $ext_file[$count_ext_files];
    }

    /**
    *
    *
    check_error
    Funzione che restituisce un messaggio d'errore in corrispondenza di un errore nell'upload del file
    *
    *
    **/

    function check_error($_resource_file){

    switch($_resource_file)

                       {
    

    case UPLOAD_ERR_NO_FILE:
    $this->_error = "Non è stato selezionato alcun file!";
    break;

    case UPLOAD_ERR_INI_SIZE:
    $this->_error = "è stato riscontrato un errore!Il file è troppo grande secondo le impostazioni del file php.ini!";
    break;

    case UPLOAD_ERR_FORM_SIZE:
    $this->_error = "Le dimensioni superano il valore massimo consentito!";
    break;

    case UPLOAD_ERR_PARTIAL:
    $this->_error = "è stato riscontrato un errore nell'upload!";
    break;

    case UPLOAD_ERR_OK:
    $this->_error = "";
    break;

    default:
    $this->_error = "è stato riscontrato un errore sconosciuto!";
    break;
    }
    }
    }

    ?>[/PHP]

    File upload.php

    [PHP]<?php
    /********************/
    //PHP Image Uploader//
    //Il Net-Surfer //
    //2008-2009 //
    //Lunedì 10 Novembre 2008//
    /*******************/

    require "config.inc.php";
    require "class.Upload.php";

    $_upload = new Upload($upload_dir);

    $_my_file = $_FILES['file'];

    $_upload->check_error($_my_file);

    if($_upload->_error != "") die ($_upload->_error);

    $_upload->check_filetype($_my_file['type']);

    $_upload->set_file_ext($_my_file['name']);

    $_upload->check_correct_files_in_array($image_type);

    if($_upload->_error != "") die ($_upload->_error);

    $_upload->upload($_my_file,$upload_dir,$mysql);

    if($_upload->_error != "") die ($_upload->_error);

    echo $_upload->_message;

    ?>

    <div align="left">
    <table border="0" cellpadding="0" cellspacing="0">
    <tr>
    <td width="16"><img src="images/top_lef.gif" width="16" height="16"></td>
    <td height="16" background="images/top_mid.gif"><img src="images/top_mid.gif" width="16" height="16"></td>
    <td width="24"><img src="images/top_rig.gif" width="24" height="16"></td>
    </tr>
    <tr>
    <td width="16" background="images/cen_lef.gif"><img src="images/cen_lef.gif" width="16" height="11"></td>

      <td align="center" valign="middle" bgcolor="#FFFFFF"><font face="Trebuchet MS" size="2" color="#3366FF">Ecco la tua immagine:</font>
        <br><font face="Trebuchet MS" size="2" color="#3366FF">Per vederla
        nelle sue dimensioni originali, <a href="image.php?id=<?php echo $_upload->_row_my_query['image_id']; ?>">clicca qui</a></font>
      </td>
      <td width="24" background="images/cen_rig.gif"><img src="images/cen_rig.gif" width="24" height="11"></td>
    </tr>
    <tr>
      <td width="16" background="images/cen_lef.gif"><img src="images/cen_lef.gif" width="16" height="11"></td>
    
      <td align="center" valign="middle" bgcolor="#FFFFFF"><img src="<?php echo $_upload->_complete_name_and_path; ?>" width="250" height="250" vspace="0" border="1" hspace="0"></td>
      <td width="24" background="images/cen_rig.gif"><img src="images/cen_rig.gif" width="24" height="11"></td>
    </tr>
    <tr>
      <td width="16" height="16"><img src="images/bot_lef.gif" width="16" height="16"></td>
      <td height="16" background="images/bot_mid.gif"><img src="images/bot_mid.gif" width="16" height="16"></td>
      <td width="24" height="16"><img src="images/bot_rig.gif" width="24" height="16"></td>
    </tr>
    

    </table>

    </div>

    <p align="left"><font face="Trebuchet MS" size="3" color="#3366FF">Ecco il
    link della tua immagine:</font></p>
    <p align="left"><font size="3"><textarea rows="2" cols="26"><?php echo $_SERVER['SERVER_NAME'].substr($_SERVER['REQUEST_URI'],0,-10).$image_new_name; ?></textarea></font></p>

    <p align="left"><font size="3"> </font><font face="Trebuchet MS" size="3" color="#3366FF">Ecco il link della tua immagine per forum:</font></p>

    <p align="left"><font size="3"><textarea rows="2" cols="26">[URL=<?php echo $_SERVER['SERVER_NAME']; ?>]</textarea></font></p>
    <p align="left"><font size="3" color="#3366FF" face="Trebuchet MS">Ecco il link
    della tua immagine hostata:</font></p>
    <p align="left"><font size="3"><textarea rows="2" cols="26"><?php echo $_SERVER['SERVER_NAME'].substr($_SERVER['REQUEST_URI'],0,-10)."image.php?id=".$row_my_query['image_id'];?></textarea></font></p>
    <p align="center"><font size="3"><font face="Trebuchet MS" color="#3366FF">Grazie per
    aver utilizzato</font> <font color="#3366ff" face="Trebuchet MS">PHP Image
    Uploader</font></font></p>
    [/PHP]

    Nel file upload.php, per far funzionare tutto, sono costetto a fare così:

    //$_upload->check_error($_my_file);

    //if($_upload->_error != "") die ($_upload->_error);

    Potreste aiutarmi?


  • User Attivo

    Ciao ilnetsurfer,
    capire quale sia il problema, così a botta secca, non è banale...

    Prova a farti stampare tutto l'array $_FILES['file'] con un var_dump, nel caso in cui hai l'errore, così riesci a vedere cosa accade di preciso alle diverse variabili.

    Inoltre, i file uplodati hanno i permessi corretti per essere sovrascritti?
    :ciauz:


  • User Attivo

    Si, possono essere sovrascritti...
    a me basta che mettino un numero progressivo all'inizio...