Binary large object: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
fix
 
(47 versioni intermedie di 31 utenti non mostrate)
Riga 1:
{{F|basi di dati|novembre 2013}}
BLOB, Acronimo<bR><bR>
{{S|basi di dati}}
Letteralmente: grande(largo) oggetto binario.<bR><bR>
In Informatica: tipo di dato, variabile e dunque campo di grande dimensione.<br>
Nei database, per esempio MySQL, è un particolare tipo di campo che può contenere dati in formato binario di divesi gigabyte a seconda del database che utilizziamo. <bR>
In MySQL la dimensione massima di un dato blob può arrivare a 4GB.<bR>
Secondo la Operation Guide in Firebird, la massima dimensione di un BLOB è 32GB.<bR>
Viene utilizzato per memorizzare su tabella immagini grafiche piuttosto che programmi applicativi scritti in altri linguaggi.<bR>
http://it.wikipedia.org/wiki/Tipo_di_dato_(database).
<br><br>
---->> <center>Aggiungere un file binario come blob in MySQL:</center>
 
In [[informatica]], un '''binary large object''' (in [[lingua inglese|inglese]] ''oggetto binario di grandi dimensioni''), spesso identificato con l'acronimo '''BLOB''', è un [[tipo di dato (basi di dati)|tipo di dato]] usato nei [[database]].
<pre>
&lt;?
set_time_limit(120);
 
I campi di tipo BLOB sono destinati alla memorizzazione di dati di grandi dimensioni in [[formato binario]] non direttamente interpretabile dal database, come ad esempio immagini grafiche, audio, programmi applicativi o altri oggetti multimediali<ref>{{Cita web|url=https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/binary-large-object/|titolo=BLOB (Binary Large Object): un’introduzione|sito=IONOS Digitalguide|lingua=it|accesso=19 luglio 2022}}</ref>, e possono contenere fino a diversi [[gigabyte]] a seconda del database utilizzato. Possono esistere come valori persistenti all'interno di alcuni database o sistemi di [[Controllo versione|controllo delle versioni]], o esistere in fase di esecuzione come variabili di programma in alcuni linguaggi di programmazione.
if ($settato == "si") {
 
In origine, i BLOB erano solo grandi pezzi amorfi di dati inventati da Jim Starkey della DEC, che li descrive come "la cosa che mangiava Cincinnati, Cleveland o quel che era" dal "film di [[Steve McQueen (regista)|Steve McQueen]] del 1958"<ref name=":0">{{Cita web|url=http://www.cvalde.net/misc/blob_true_history.htm|titolo=True story of BLOBs.|sito=web.archive.org|data=23 luglio 2011|accesso=19 luglio 2022|dataarchivio=23 luglio 2011|urlarchivio=https://web.archive.org/web/20110723065224/http://www.cvalde.net/misc/blob_true_history.htm|urlmorto=sì}}</ref>, riferendosi al film [[Fluido mortale|Fluido Mortale]]. In seguito, Terry McKiever, un addetto al marketing di Apollo, ritenne che il nome dovesse essere un acronimo e inventò l'[[acronimo inverso]] Basic Large Object. In seguito, Informix ha inventato un acronimo inverso alternativo, Binary Large Object<ref name=":0" />.
$db = mysql_connect(localhost,xxxxxxxxx,xxxxxxxxxx);
mysql_select_db("utentidb", $db) or die(mysql_errno() . ": " . mysql_error() . "&lt;br&gt; ");
//selezioniamo il database
if (isset($fileblob) &amp;&amp; $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.&lt;br&gt; &lt;br&gt; ";
echo "&lt;a href='21.blob.php'&gt; Vedi i file inserirti&lt;/a&gt; &lt;br&gt; &lt;a href='20.blob.php'&gt; Aggiungi un nuovo file&lt;/a&gt; ";
}
else
echo "Dovevi scegliere un file da inserire";
//un semplice controllo testuale
mysql_close();
 
Il tipo di dati e la definizione sono stati introdotti per descrivere dati non originariamente definiti nei tradizionali sistemi di database informatici, in particolare perché troppo grandi per essere memorizzati in modo pratico all'epoca in cui il campo dei sistemi di database era in fase di definizione, ossia negli anni '70 e '80. Il tipo di dati è diventato pratico quando lo spazio su disco è diventato economico. Questa definizione ha guadagnato popolarità con [[IBM DB2|IBM Db2]].
} else {
//esco dal php per stampare la form
?&gt;
 
Il [[tipo di dato]] BLOB non è supportato da tutti i database, né presenta caratteristiche uniformi in quelli che lo supportano<ref>{{Cita web|url=https://shartec.eu/blob/|titolo=Blob (Binary Large Object) Definizione significato|sito=SharTec|data=9 novembre 2021|accesso=19 luglio 2022|dataarchivio=6 dicembre 2021|urlarchivio=https://web.archive.org/web/20211206183105/https://shartec.eu/blob/|urlmorto=sì}}</ref>. Alcuni esempi:
&lt;HTML&gt;
* in [[MySQL]] la dimensione massima di un dato blob può arrivare a 4 GB.
&lt;BODY&gt;
* in [[Firebird SQL]] la massima dimensione di un BLOB è di 32 GB.
&lt;FORM METHOD="post" ACTION=20.blob.php ENCTYPE="multipart/form-data"&gt;
Il termine è utilizzato nei database [[NoSQL]], in particolare nei database di tipo ''key-value'' come [[Redis]]<ref>{{Cita web|url=https://www.sswug.org/bentaylor/editorials/blob-data-in-nosql-2/|titolo=BLOB Data in NoSQL|sito=SSWUG.ORG|data=17 ottobre 2012|lingua=en|accesso=19 luglio 2022|dataarchivio=25 marzo 2019|urlarchivio=https://web.archive.org/web/20190325105721/https://www.sswug.org/bentaylor/editorials/blob-data-in-nosql-2/|urlmorto=sì}}</ref>. Il termine è utilizzato anche dai linguaggi che consentono la manipolazione ''runtime'' dei BLOB, come [[JavaScript]]<ref>{{Cita web|url=https://w3c.github.io/FileAPI/#blob-section|titolo=File API|sito=w3c.github.io|accesso=19 luglio 2022}}</ref>.
&lt;INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE=1000000&gt;
&lt;INPUT TYPE="hidden" NAME="settato" VALUE="si"&gt;
&lt;TABLE BORDER=0&gt;
&lt;TR&gt;
&lt;TD&gt; descrizione: &lt;/TD&gt;
&lt;TD&gt; &lt;TEXTAREA NAME="txtdescrizione" ROWS=10 COLS=50&gt; &lt;/TEXTAREA&gt; &lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt; File: &lt;/TD&gt;
&lt;TD&gt; &lt;INPUT TYPE="file" NAME="fileblob"&gt; &lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD COLSPAN=2&gt; &lt;INPUT TYPE="submit" VALUE="Upload"&gt; &lt;/TD&gt;
&lt;/TR&gt;
&lt;/TABLE&gt;
 
A seconda dell'implementazione e della cultura d'uso, il concetto può essere alternativamente indicato come "basic large object" o "binary data type"<ref>{{Cita web|url=https://docs.microsoft.com/en-us/sql/t-sql/data-types/binary-and-varbinary-transact-sql|titolo=binary and varbinary (Transact-SQL) - SQL Server|autore=MikeRayMSFT|sito=docs.microsoft.com|lingua=en|accesso=19 luglio 2022}}</ref>.
&lt;/FORM&gt;
&lt;/BODY&gt;
&lt;/HTML&gt;
&lt;?php
}
 
== Note ==
//chiudo il ciclo else lasciato aperto per l'html della form
<references/>
 
== Voci correlate ==
?&gt;
* [[Tipo di dato (basi di dati)]]
* [[Database]]
 
== Collegamenti esterni ==
</pre><br><br>
* {{Collegamenti esterni}}
Nota<br>
* {{FOLDOC|Binary large object|Binary large object}}
Con: INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="1000000'<br>
//imposto la grandezza massima dei file da uploadare<br>
 
{{Portale|informatica}}
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.
<br><br>
---->> <center>Visione dati blob in un DB MYSQL:</center>
 
[[Categoria:Teoria delle basi di dati]]
<br><br>
<pre>
 
&lt;?
 
set_time_limit(120);
if ($id) {
$db = mysql_connect(localhost,xxxxxxxxx,xxxxxxxxxxxxxx);
mysql_select_db("utentidb", $db) or die(mysql_errno() . ": " . mysql_error() . "&lt;br&gt; ");
$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
}?&gt;
&lt;center&gt; &lt;h2&gt; .21. Visione dati blob in un DB MYSQL&lt;/center&gt; &lt;/h2&gt;
 
&lt;table border=0&gt; &lt;tr&gt; &lt;td&gt;
&lt;i&gt; &lt;font color=green&gt;
Layout:&lt;/i&gt; &lt;/font&gt; &lt;br&gt; &lt;br&gt;
 
 
&lt;?
//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() . "&lt;br&gt; ");
$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 "&lt;table&gt; \n";
echo " &lt;tr&gt; \n";
echo " &lt;td&gt; &lt;b&gt; -- Nome File -- &lt;/td&gt; \n";
echo " &lt;td&gt; &lt;b&gt; -- Tipo -- &lt;/td&gt; \n";
echo " &lt;td&gt; &lt;b&gt; -- Dimensione -- &lt;/td&gt; \n";
echo " &lt;td&gt; &lt;b&gt; -- Descrizione -- &lt;/td&gt; \n";
echo " &lt;td&gt; &lt;b&gt; -- Scarica &lt;/td&gt; \n";
echo " &lt;/tr&gt; \n";
//dopo l'intestazione visualizzo i dati veri e propri
for ($i = 0; $i &lt; $rows; $i++) {
$data = mysql_fetch_object($result);
echo " &lt;tr&gt; \n";
echo " &lt;td&gt; -- $data-&gt; filename&lt;/td&gt; \n";
echo " &lt;td&gt; -- $data-&gt; filetype&lt;/td&gt; \n";
echo " &lt;td&gt; -- $data-&gt; filesize&lt;/td&gt; \n";
echo " &lt;td&gt; -- " . stripslashes($data-&gt; descrizione) . "&lt;/td&gt; \n";
echo " &lt;td&gt; --| &lt;a href='21.blob.php?id=$data-&gt; id'&gt; Download&lt;/a&gt; |&lt;/td&gt; \n";
//con id=$data-&gt; id imposto la variabile id con il contenuto di "id" del lob che mi interessa
echo " &lt;/tr&gt; \n";
}
echo "&lt;/table&gt; &lt;bR&gt; &lt;a href=20.blob.php&gt; Torna ad inserire un nuovo file&lt;/a&gt; ";
//richiamo per ulteriori inserimenti
mysql_free_result($result);
mysql_close($db);
?&gt;
</pre>
Nota<br>
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: <br>
<font color="red">Warning: Cannot add header information - headers already sent by (output started at .........</font>
<bR><bR><font face=arial color=green size=3> #REDIRECT[[|,-'
]]