Torna in homepage www.vincenzomanzoni.com
Homepage personale e blog di Vincenzo Manzoni
 
 FAQFAQ   CercaCerca   Cerca con GoogleCerca con Google   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati   Feed AtomFeed
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

Mysql e file

 
Questo forum è chiuso: Non puoi inserire, rispondere o modificare gli argomenti.   Quest'argomento è chiuso: Non puoi inserire, rispondere o modificare i messaggi.    Indice del forum -> L'angolo di Leonardo Da Vincienzomanzoni.com
Precedente :: Successivo  
Autore Messaggio
abaddon
Utente adulto
Utente adulto


Registrato: 05/04/04 16:32
Messaggi: 2033

MessaggioInviato: Ven Apr 09, 2004 12:24 pm    Oggetto: Mysql e file Rispondi citando

ho un piccolo problemino da sottoporvi: mi han chiesto di sviluppare un modulo per il mio portale che permettesse di creare un'area privata per ogni utente con la possibilità di uppare file definendo tramite pannello amministrativo estensioni e dimensioni.

Il file uppato dall'utente poi sarebbe visibile solo all'utente medesimo. ( ecco la gatta da pelare)

la soluzione ottimale sarebbe quella di creare una cartella per ogni utente e uppare lì sopra tramite script i file interessati. La soluzione è valida ma poco sicura, infatti basta scoprire la tecnica di archiviazione dei file che matematicamente si ha accesso a tutti i file uppati dall'utente.

soluzione b, infilare i file all'interno del db, per quanto riguarda la sicurezza è ottima visto che le query sarebbero gestite dallo script, ma ci sarebbe un problemino di pensantezza a lv db e voci sconsigliano di caricare file in un db.

soluzione c, venuta in mente or ora e consiste nella soluzione a con l'aggiunta dell'estensione .php alla fine del file tanto per renderlo inviibile (credo) all'utente nel caso scopra il percorso. Unico prblema è che non so come si comporterebbe l'interprete se si mette ad interpretare file tipo jpg,zip,ecc...


voi che proporreste?

ah il linguaggio è PHP
Top
Profilo Invia messaggio privato HomePage
Endless
Utente adulto
Utente adulto


Registrato: 23/12/03 18:06
Messaggi: 2905
Residenza: Bergamo (provincia)

MessaggioInviato: Ven Apr 09, 2004 12:36 pm    Oggetto: Re: Mysql e file Rispondi citando

abaddon ha scritto:
ah il linguaggio è PHP
Vai Vinz, sali in cattedra.. Cool
_________________

Training autogeno: in caso di stress, eseguite il movimento in figura e ripetete:
"Amo il mio lavoro! Amo il mio lavoro! Amo il mio lavoro!"
Top
Profilo Invia messaggio privato Invia e-mail HomePage MSN
Andrea
Moderatore
Moderatore


Registrato: 23/12/03 13:10
Messaggi: 5200

MessaggioInviato: Ven Apr 09, 2004 12:37 pm    Oggetto: Re: Mysql e file Rispondi citando

abaddon ha scritto:
voi che proporreste?

ah il linguaggio è PHP


Prova a proteggere le diectory con .htaccess
Top
Profilo Invia messaggio privato MSN
abaddon
Utente adulto
Utente adulto


Registrato: 05/04/04 16:32
Messaggi: 2033

MessaggioInviato: Ven Apr 09, 2004 12:45 pm    Oggetto: Re: Mysql e file Rispondi citando

Andrea ha scritto:
abaddon ha scritto:
voi che proporreste?

ah il linguaggio è PHP


Prova a proteggere le diectory con .htaccess


è una possibilità, ma ha un problema, ogni volta che lo script richiama un file che sta li dentro compare la noiosa mascherina del browser che chiede login e pass, preferirei una cosa gestita unicamente dallo script
Top
Profilo Invia messaggio privato HomePage
vinz
Amministratore
Amministratore


Registrato: 12/12/03 12:56
Messaggi: 6648
Residenza: San Pellegrino Terme (Bergamo)

MessaggioInviato: Ven Apr 09, 2004 1:36 pm    Oggetto: Re: Mysql e file Rispondi citando

abaddon ha scritto:
soluzione b, infilare i file all'interno del db, per quanto riguarda la sicurezza è ottima visto che le query sarebbero gestite dallo script, ma ci sarebbe un problemino di pensantezza a lv db e voci sconsigliano di caricare file in un db.

Non dici di che dimensioni saranno, presumibilmente, i files.
Il discorso è molto diverso se da archiviare sono piccole gif oppure DivX dell'ultimo film della Disney ("Koda fratello orso", bellissimo! Cool ).

Io farei un test prestazioni con un db di prova in locale. Secondo me non dovrebbe intaccare a livello apprezzabile le prestazioni...
Purtroppo in questi giorni non ho tempo per fare personalmente una prova. Sad
_________________
Let the future tell the truth and evaluate each one according to his work and accomplishments. The present is theirs; the future, for which I really worked, is mine.
Nikola Tesla
Top
Profilo Invia messaggio privato HomePage
abaddon
Utente adulto
Utente adulto


Registrato: 05/04/04 16:32
Messaggi: 2033

MessaggioInviato: Ven Apr 09, 2004 6:38 pm    Oggetto: Rispondi citando

secondo te a occhio, già file di dimensione di 1-2mb potrebbero creare problemi?

calcola che non so il carico d'utenza che deve tenere il sito e non so manco quanti file si dovranno uppare, la mia paura è quella di avere backup di db da 500mb in su.... immagazzinando file le dimesioni crescono esponenzialmente cazzarola.

Una volta mi è capitato di metter mano a un db del Vbulletin di una piccola community cazzarola le immagini di avatar e attachment vari lo avevano portato sui 700mb.. ci mettevo un giorno solo ad aprire il file -.-
vorrei evitare sta situazione di nuovo Sad
Top
Profilo Invia messaggio privato HomePage
ice
Utente adulto
Utente adulto


Registrato: 21/01/04 19:07
Messaggi: 2885
Residenza: Seriate (Bergamo)

MessaggioInviato: Mar Apr 13, 2004 8:52 am    Oggetto: Rispondi citando

E se una volta terminato l'upload rinominassi il file con una sequenza numerica casuale e poi tenessi conto dell'associazione del file-utente nel db? Che ne dici? In questo modo potresti uppare tutti i file nella stessa directory protetta. E' sufficiente che una parte del nome del file rimanga con riferimento fisso (in questo modo eviti che - sfiga vuole - un numero esca casualmente due volte... Per esempio: Oggi è il 13 aprile, quindi il nome del file potrebbe essere 20040413_xxxxxx.jpg). Vado di fretta e ho scritto con molta confusione. Scusate.
_________________
Profilo Facebook di Dario Salvoldi
Ti chiedo:
La saggezza per capire i colleghi...
La pazienza per ascoltarli...
La capacità di stare calmo...
... ma non darmi la forza... perchè se mi dai anche quella...
FACCIO UN MACELLO !!!
Top
Profilo Invia messaggio privato Invia e-mail HomePage MSN
abaddon
Utente adulto
Utente adulto


Registrato: 05/04/04 16:32
Messaggi: 2033

MessaggioInviato: Mar Apr 13, 2004 10:13 am    Oggetto: Rispondi citando

uhmm l'idea è buona non c'è che dire, per ora pero' sto implementando la versione con db, ora cedo come si comporta, se le prestazioni decadono magari sperimento questa soluzione

thx
Top
Profilo Invia messaggio privato HomePage
karla
Utente maturo
Utente maturo


Registrato: 24/12/03 13:57
Messaggi: 925
Residenza: botta di sedrina, wutheringheights@interfree.it

MessaggioInviato: Mar Apr 13, 2004 10:43 am    Oggetto: Rispondi citando

abaddon ha scritto:
uhmm l'idea è buona non c'è che dire, per ora pero' sto implementando la versione con db, ora cedo come si comporta, se le prestazioni decadono magari sperimento questa soluzione

thx



ma tu, fai scienze della comunicazione o ingegneria!? Cool Shocked Wink
_________________
she...maybe the chill that autumn brings...
Top
Profilo Invia messaggio privato Invia e-mail
karla
Utente maturo
Utente maturo


Registrato: 24/12/03 13:57
Messaggi: 925
Residenza: botta di sedrina, wutheringheights@interfree.it

MessaggioInviato: Mar Apr 13, 2004 12:47 pm    Oggetto: Rispondi citando

ehm....ehm.....hi.....! Twisted Evil
ho un po' sbagliato... volevo riferirmi a nick..........................
hi-hi! Cool Confused Crying or Very sad
_________________
she...maybe the chill that autumn brings...
Top
Profilo Invia messaggio privato Invia e-mail
abaddon
Utente adulto
Utente adulto


Registrato: 05/04/04 16:32
Messaggi: 2033

MessaggioInviato: Mar Apr 13, 2004 10:13 pm    Oggetto: Rispondi citando

se vi interessa queste sono le funzioni che ho creato per gestire i file nel db

Codice:

<?php
function insert($db, $gruppo){
   if(!isset($_POST['step']))
      $_POST['step']='0';
   if(!is_numeric($_POST['step']))
      die('errore');
   include 'admin1/config.php';
   $query='SELECT upload_file_type, upload_file_size FROM '.$pref.'opzioni';
   $op=mysql_fetch_array(mysql_query($query, $db));
   $typ=explode('|', $op['upload_file_type']);
   for($i=0; $i<count($typ) ;$i++)
      $type.=$typ[$i].' ';
   switch ($_POST['step']){
      case '1':
      $type1=explode('/',$_FILES['file']['type']);
      $check='0';
      for($i=0; $i<count($typ) ;$i++){
         if($type1['1']==$typ[$i])
            $check='1';
      }
      if($op['upload_file_size']*1024<$_FILES['file']['size'] || $check=='0'){
         echo "Attenzione!! Il formato del file non e' consentito  oppure il file e' troppo grosso";
          return ;
      }
      $bin = addslashes(fread(fopen($_FILES['file']['tmp_name'], "rb"), $_FILES['file']['size']));
      $query='INSERT INTO '.$pref.'file_privati (id, user, descr, nome, size, type, bin) VALUES (\'\', \''.$_COOKIE['s_id'].'\', \''.$_POST['descr'].'\', \''.$_FILES['file']['name'].'\', \''.$_FILES['file']['size'].'\', \''.$_FILES['file']['type'].'\', \''.$bin.'\')';
      if(mysql_query($query, $db))
         redirect('index.php?target=viewallfile', 'Il file'.basename($_FILES['file']['name']).'e\' stato correttamente inserito nel Database.', '3');
      else
         redirect('index.php?target=addfile', 'ERRORE! Il file'.basename($_FILES['file']['name']).'non e\' stato correttamente inserito nel Database.', '5');
      break;
      default:
         echo '<div align="center">
            <table>
            <form action="index.php?target=addfile" method="POST" enctype="multipart/form-data">
            <input type="hidden" name="step" value="1">
            <tr>
            <td valign="top">Descrizione </td>
            <td><textarea name="descr" cols="40" rows="5"></textarea></td>
            </tr>
            <tr>
            <td>File</td>
            <td><input type="file" name="file" size="40"></td>
            </tr>
            <tr>
            <td colspan="2" valign="bottom" align="center" height="30">
            <input type="submit" value="Invia il file" name="invia"></td>
            </tr>
            <tr><td>Max Size:</td><td>'.$op['upload_file_size'].' KB</td></tr>
            <tr><td>Type:</td><td>'.$type.'</td></tr>
            </form>
            </table>
            </div>';      
      break;
   }
}

function view_all($db, $gruppo){
   if(!isset($_COOKIE['s_id']) || !is_numeric($_COOKIE['s_id']))
      die('Errore');
   include 'admin1/config.php';
   $query = 'SELECT * FROM '.$pref.'file_privati WHERE user=\''.$_COOKIE['s_id'].'\'';
   //echo $query;
   $select = @mysql_query($query, $db) or die("Query fallita !");
   echo '<div align="center"><table>';
   while($result = @mysql_fetch_array($select)) {
      echo '<tr><td align="center">'.$result['nome'].'<br><font size="1">('.$result['size'].'bytes)</font>';
      echo '</td><td valign="top">  <a href="index.php?target=viewfile&id='.$result['id'].'">download</a></td>';
      echo '<td align="center">';
      if($result['descr'])
         echo $result['descr'].'</td>';
      else         
         echo 'nessuna descrizione</td>';
      echo '</td><td valign="top"><a href="index.php?target=delfile&id='.$result['id'].'">Elimina</a></td></tr>';
   }
   echo '</table></div>';
}

function view ($db, $gruppo) {
   if((!isset($_COOKIE['s_id']) || !is_numeric($_COOKIE['s_id'])) || (!isset($_GET['id']) || !is_numeric($_GET['id'])))
      die('Errore');
   include 'admin1/config.php';
   $query = 'SELECT bin, type FROM '.$pref.'file_privati WHERE id = \''.$_GET['id'].'\' AND user=\''.$_COOKIE['s_id'].'\'';
   $select = @mysql_query($query, $db) or die("Query fallita !");
   $result = @mysql_fetch_array($select);
   $data = $result['bin'];
   $type = $result['type'];
   Header("Content-type: $type");
   echo $data;
}

// DOWNLOAD
function download($db, $gruppo){
   
   if((!isset($_COOKIE['s_id']) || !is_numeric($_COOKIE['s_id'])) || (!isset($_GET['id']) || !is_numeric($_GET['id'])))
      die('Errore');
   
   //echo'<script language="javascript">window.open(\'private_file_download.php?id='.$_GET['id'].'&db='.$db.'\',\'\',\'width=400,height=430,left=0,top=0\')</script>';
   //redirect('index.php', 'Redirect alla home in corso', '4');
      // SE IL BROWSER E' INTERNET EXPLORER
   if(ereg("MSIE ([0-9].[0-9]{1,2})", $_SERVER["HTTP_USER_AGENT"])) {
      header("Content-Type: application/octetstream");
      header("Content-Disposition: inline; filename=$name");
      header("Expires: 0");
      header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
      header("Pragma: public");
   } else {
      header("Content-Type: application/octet-stream");
      header("Content-Disposition: attachment; filename=$name");
      header("Expires: 0");
      header("Pragma: no-cache");
   }
   echo $data;
}

function del($db, $gruppo){
   if((!isset($_COOKIE['s_id']) || !is_numeric($_COOKIE['s_id'])) || (!isset($_GET['id']) || !is_numeric($_GET['id'])))
      die('Errore');
   include 'admin1/config.php';
   $query='DELETE FROM '.$pref.'file_privati WHERE id=\''.$_GET['id'].'\' AND user=\''.$_COOKIE['s_id'].'\'';
   if(mysql_query($query, $db))
      redirect('index.php?target=viewallfile', 'Elemento eliminato correttamente<br>Redirect in corso', '3');
   else
      redirect('index.php?target=viewallfile', 'ERRORE! Elemento non eliminato correttamente<br>Redirect in corso', '5');
}
?>
Top
Profilo Invia messaggio privato HomePage
vinz
Amministratore
Amministratore


Registrato: 12/12/03 12:56
Messaggi: 6648
Residenza: San Pellegrino Terme (Bergamo)

MessaggioInviato: Mar Apr 13, 2004 10:52 pm    Oggetto: Rispondi citando

Bel lavoro! Cool

Sembra fatto bene, così a prima vista...
Ottimi i controlli: la prudenza, quando si parla di pagine dinamiche, non è mai troppa! Twisted Evil

Passato the king provo le tue funzioni... Very Happy
_________________
Let the future tell the truth and evaluate each one according to his work and accomplishments. The present is theirs; the future, for which I really worked, is mine.
Nikola Tesla
Top
Profilo Invia messaggio privato HomePage
Mostra prima i messaggi di:   
Questo forum è chiuso: Non puoi inserire, rispondere o modificare gli argomenti.   Quest'argomento è chiuso: Non puoi inserire, rispondere o modificare i messaggi.    Indice del forum -> L'angolo di Leonardo Da Vincienzomanzoni.com Tutti i fusi orari sono GMT 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi


Powered by phpBB © 2001, 2005 phpBB Group
phpbb.it