Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    msSQL e MySQL campi binari BLOB e image

    ciao a tutti volevo sapere se:

    il campo image di SQL e il campo BLOB di MySQL sono da considerare e trattare nello stesso modo per upload e lettura delle immagini?

    oppure mi sapreste indicare una guida/tutorial che mi spieghi come poter salvare e recuperare le immagini con php da un DB SQL?

    un saluto

  2. #2
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Guarda io sconsiglio vivamente di caricare file su campi blob in db che pur essendo comodo da un sacco di rotture. ( 10 utenti caricano 20 files da 2-3 Mb ?? = ti esplode il db )

    Fai una tabella di tracciamento tipo

    table files

    id

    percorso
    nomefile

    data_inserimento
    utente
    ....


    Poi ti fai una bella cartella organizzata come ti pare e le procedure di inserimento prenderanno il file lo controllano lo copiano nella cartella bersaglio e salvano la query ( se da errore cancelli il file)

    La procedura di eliminazione elimina il file e la entry nel db.

    QUindi puoi fare quello che ti pare con i files.

  3. #3
    condivido il tuo consiglio ed ho sempre fatto piu o meno come il tuo metodo ma purtroppo mi è stato richiesto esplicitamente di utilizzare il campo image di sql per le immagini e non ho molte informazioni sul come utilizzare questo campo sql con il php. ti ringrazio cmq della risp

  4. #4
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Ok allora se devi proprio fare cosi' fa una cosa del tipo

    table images

    id

    nomefile
    estensione
    tipo
    datatype

    content

    data_inserimento
    utente
    ....

    Simile a prima, non abbiamo piu' il perocrso del file ma solo il suo nome ed estensione il campo tipo e' un campo aggiuntivo solitamente usato per salvare il mietype o altro.

    Quelle che ci interessa e' la colonna datatype e la colonna content.
    Infatti puoi comprimere e salvare il files in modi differenti.
    Puoi usare un base64encode o altro formato di compressione/ricodifica della stringa binaria che recuperi con un file_get_contents().
    Quindi puoi tracciare la modalita' di compressione nella colonna datatype.

    A questo punto puoi decidere se usare uno, nessuno o piu' tipi di compressione differenti.

    Ricapitolando :

    1) recuperi il file
    2) lo leggi con fread o file_get_contents
    3) decidi se comprimerlo e che compressiione usare tracciando le impostazioni
    4) crei la query di inserimento
    5) salvi il file.

    NON usare md5 o un qualsiasi altro algoritmo di hashing. Senno perdi completamente il contenuto del file.
    Puoi in aggiunta usare md5 per i checksum del file aggiungendo l'opportuna colonna.

  5. #5
    Codice PHP:

    //funzione per il caricamento delle immagini nel database
    function upload()
    {
      
    $result false;
      
    $result = @is_uploaded_file($_FILES['locandina']['tmp_name']); //restituisce true se il file Ë stato inviato tramite metodo POST
      
    if (!$result){
            
            echo 
    "Impossibile eseguire l'upload.";
            return 
    false;
      }
      
      else{
      
        
    $dimensione $_FILES['locandina']['size'];
        
    $tipo $_FILES['locandina']['type'];
        
    $nome $_FILES['locandina']['name'];
        
        
    //restituisce il file in una stringa 
        
    $immagine = @file_get_contents($_FILES['locandina']['tmp_name']);
        
        
    //La funzione restituisce una stringa con il carattere di backslah '\' anteposto ai caratteri che richiedono il quoting nelle query dei database
        
    $immagine addslashes ($immagine);
        
        
    //inclusione del file per le impostazini di accesso al database
        
    require ('datiDB.php');
        
        
    $db mysql_connect($db_host$db_user$db_password);

        if (
    $db == FALSE)
        die (
    "Errore nella connessione. Verificare i parametri nel file datiDB.php");

        
    mysql_select_db($db_name$db)
        or die (
    "Errore nella selezione del database. Verificare i parametri nel file datiDB.php");
        
        
    $query "INSERT INTO immagini (nome, dimensione, tipo, immagine) VALUES ('$nome','$dimensione','$tipo','$immagine')";
        
    $risultato = @mysql_query($query) or die (mysql_error());
      }

    V.I.S.T.A. --> Virus Inside, Switch To Apple

  6. #6
    ok chiaro grazie ad entrambi ora ho un idea più chiara di come agire e dai vostri consigli ho dedotto che il campo image si comporta nello stesso modo del campo BLOB. In fase di sviluppo se avro altri dubbi continuo la discussione!

    grazie ancora

  7. #7
    ho una curiosita che esula un po dall'oggetto di questa discussione: ma il db Flickr come viene gestito grosso modo? o perlomeno qual'è il principio?

  8. #8
    Prova a vedere qui
    V.I.S.T.A. --> Virus Inside, Switch To Apple

  9. #9
    grande! me lo studierò bene!

  10. #10
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Beh li ovviamente si tratta di un applicativo fatto per molti utenti cio' lo testimonia il piccolo cluster che hanno dietro per gestire il db e quindi le operazioni di select che sono solitamente le piu' ingenti in un sistema web.

    A parte che la funzione postat non effettua contreolli ne su tipo del file ne tantomeno sulla dimensione, il che vuol dire che un utente potrebbe spediti 4 Gb di file.
    Ovviamente cio' si bloccherebbe a causa del timeout della pagina.

    Cmq i controlli ti consiglio sempre di farli magari fai un piccolo flash che controlla gia' lato client che vuoi uploadare e poi lo colleghi con lo script sul server.

    NON FARE QUESTA COSA MAI!!!!

    $immagine = addslashes ($immagine);

    perche' modifica il contenuto del file ed essendo files binari potrebbe capitare che qlke stringa venga erroneamente slashata. INoltre poi nella rilettura se ti capita che una stringa di bit sia il carattere ' \\ verra' sicuramente eliminata e perderai 1 byte di informazioni del file.

    Io ti consiglio di usare base64_encode() per salvare il contenuto del file.
    Questo tipo di codifica e' usato pure nelle email per allegare i files.
    Pensaci.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.