Discussione:Binary large object

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

Sposto qui l'esempio d'uso in quanto non mi pare utile, sia per la lunghezza sia per la struttura piuttosto confusa, ad illustrare la voce. Lp (01:32, 15 gen 2006 (CET))[rispondi]


---->>

Aggiungere un file binario come blob in MySQL:
<?
set_time_limit(120);

if ($settato == "si") {

$db = mysql_connect(localhost,xxxxxxxxx,xxxxxxxxxx); 
	mysql_select_db("utentidb", $db) or die(mysql_errno() . ": " . mysql_error() . "<br> ");
//selezioniamo il database
  if (isset($fileblob) && $fileblob != "none") {
    $data = addslashes(fread(fopen($fileblob, "r"), filesize($fileblob)));
    /* 
    	addslashes ( string str)
	La funzione restituisce una stringa con il carattere di backslah \ anteposto ai caratteri che 
	richiedono il quoting nelle query dei database. Questi caratteri sono: apici singoli , 
	doppi apici , backslash (\) e NUL (il byte NULL). 
	*/
    $strdescrizione = addslashes(nl2br($txtdescrizione));
    $sql = "INSERT INTO blob_data (descrizione, file, filename, filesize, filetype) VALUES 
    ('$strdescrizione', '$data', '$fileblob_name', '$fileblob_size', '$fileblob_type')";
     //imposto la query 
     //notate l'utilizzo di _name e _size per darci automaticamente il nome e la 
     	imensione del file in questione
     $result = mysql_query($sql, $db);
    //eseguo la query
    echo "il file $fileblob_name di tipo $fileblob_type è stato correttamente aggiunto nel database.<br> <br> ";
    echo "<a href='21.blob.php'> Vedi i file inserirti</a> <br> <a href='20.blob.php'> Aggiungi un nuovo file</a> ";
  }
  else
  echo "Dovevi scegliere un file da inserire";
  //un semplice controllo testuale
  mysql_close();

} else {
//esco dal php per stampare la form
?> 

<HTML> 
<BODY> 
<FORM METHOD="post" ACTION=20.blob.php ENCTYPE="multipart/form-data"> 
 <INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE=1000000> 
 <INPUT TYPE="hidden" NAME="settato" VALUE="si"> 
 <TABLE BORDER=0> 
  <TR> 
   <TD> descrizione: </TD> 
   <TD> <TEXTAREA NAME="txtdescrizione" ROWS=10 COLS=50> </TEXTAREA> </TD> 
  </TR> 
  <TR> 
   <TD> File: </TD> 
   <TD> <INPUT TYPE="file" NAME="fileblob"> </TD> 
  </TR> 
  <TR> 
   <TD COLSPAN=2> <INPUT TYPE="submit" VALUE="Upload"> </TD> 
  </TR> 
 </TABLE> 

</FORM> 
</BODY> 
</HTML> 
<?php
}

//chiudo il ciclo else lasciato aperto per l'html della form

?> 
 



Nota

Con: INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="1000000'

//imposto la grandezza massima dei file da uploadare

Potrei comunque aver bisogno di aumentare le capacità di grandezza per l'upload degli script php che di default sono settati a 2MB. Per fare questo in apache mi apro il php.ini e modifico l'impostazione upload_max_filesize portandola per esempio uguale a 5 MB. Cos'è una query
Cos'è una/un form

---->>

Visione dati blob in un DB MySQL:




<?

set_time_limit(120);
if ($id) {
$db = mysql_connect(localhost,xxxxxxxxx,xxxxxxxxxxxxxx); 
	mysql_select_db("utentidb", $db) or die(mysql_errno() . ": " . mysql_error() . "<br> ");
 $sql = "SELECT file, filetype, filename, filesize FROM blob_data WHERE id=$id";
  $result = @mysql_query($sql, $db);
  $data = @mysql_result($result, "file");
 $name = @mysql_result($result, 0, "filename");
 $size = @mysql_result($result, 0, "filesize");
 $type = @mysql_result($result, 0, "filetype");
  header("Content-type: $type");
  header("Content-length: $size");
  header("Content-Disposition: attachment; filename=$name");
  header("Content-Description: PHP Generated Data");
  echo "$data";
//vedi la nota in fondo pagina
}?> 
<center> <h2> .21. Visione dati blob in un DB MySQL</center> </h2> 

<table border=0> <tr> <td> 
<i> <font color=green> 
Layout:</i> </font> <br> <br> 


<?
//inserisco sopra dunque la solita intestazione per le pagine del corso
set_time_limit(120);
$db = mysql_connect(localhost,xxxxxxxxx,xxxxxxxxxxx); 
	mysql_select_db("utentidb", $db) or die(mysql_errno() . ": " . mysql_error() . "<br> ");
 $sql = "SELECT * FROM blob_data ";
$sql .= "ORDER BY filename ASC";
//query strutturata
$result = mysql_query($sql, $db);
$rows = mysql_num_rows($result);
//stampo la tabella per vedere i file e i contenuti relativi al blob 
echo "<table> \n";
echo " <tr> \n";
echo "  <td> <b> -- Nome File -- </td> \n";
echo "  <td> <b> -- Tipo -- </td> \n";
echo "  <td> <b> -- Dimensione -- </td> \n";
echo "  <td> <b> --  Descrizione -- </td> \n";
echo "  <td> <b> --  Scarica </td> \n";
echo " </tr> \n";
//dopo l'intestazione visualizzo i dati veri e propri
for ($i = 0; $i < $rows; $i++) {
  $data = mysql_fetch_object($result);
  echo " <tr> \n";
  echo "  <td> -- $data-> filename</td> \n";
  echo "  <td> -- $data-> filetype</td> \n";
  echo "  <td> -- $data-> filesize</td> \n";
  echo "  <td> -- " . stripslashes($data-> descrizione) . "</td> \n";
  echo "  <td> --| <a href='21.blob.php?id=$data-> id'> Download</a>  |</td> \n";
  //con id=$data-> id imposto la variabile id con il contenuto di "id" del blob che mi interessa 
  echo " </tr> \n";
}
  echo "</table> <bR> <a href=20.blob.php> Torna ad inserire un nuovo file</a> ";
  //richiamo per ulteriori inserimenti
mysql_free_result($result);
mysql_close($db);
 
 
 ?> 
 

Nota:

Usando header("Content- bisogna stare attenti che non ci siano stringhe vuote o di testo html all'inizio della pagina per non ricevere il tipo d'errore:
Warning: Cannot add header information - headers already sent by (output started at .........