Discussione:Binary large object

Ultimo commento: 18 anni fa di Lp

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 .........

Ritorna alla pagina "Binary large object".