{"id":100,"date":"2013-07-15T12:07:00","date_gmt":"2013-07-15T15:07:00","guid":{"rendered":"https:\/\/blog.wieczorek.com.br\/novo\/?p=100"},"modified":"2022-02-24T12:13:12","modified_gmt":"2022-02-24T15:13:12","slug":"como-fazer-o-upload-de-arquivos-para-um-banco-de-dados-mysql-utilizando-o-php","status":"publish","type":"post","link":"https:\/\/blog.wieczorek.com.br\/index.php\/2013\/07\/15\/como-fazer-o-upload-de-arquivos-para-um-banco-de-dados-mysql-utilizando-o-php\/","title":{"rendered":"Como fazer o upload de arquivos para um banco de dados MySQL utilizando o PHP"},"content":{"rendered":"\n<p>Algumas aplica\u00e7\u00f5es web necessitam que os arquivos .jpg, .doc, .pdf e etc. sejam gravados no banco de dados MySql. Para isso, podemos fazer um script PHP que realize esta tarefa.<\/p>\n\n\n\n<p>Para iniciar, vamos criar uma tabela para armazenar estes arquivos. Abaixo segue a estrutura da tabela:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>id: Identificador \u00fanico para cada arquivo<\/li><li>nome: O nome do arquivo<\/li><li>tipo: Tipo do conte\u00fado<\/li><li>tamanho: Tamanho do arquivo<\/li><li>conteudo: O arquivo em si<\/li><\/ul>\n\n\n\n<p>Para a coluna conteudo, vamos usar o tipo de dados BLOB. BLOB \u00e9 um objeto bin\u00e1rio grande que pode conter uma quantidade vari\u00e1vel de dados. O MySQL possui quatro tipos de dados BLOB:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>TINYBLOB<\/li><li>BLOB<\/li><li>MEDIUMBLOB<\/li><li>LONGBLOB<\/li><\/ul>\n\n\n\n<p>O tipo BLOB \u00e9 limitado a 64 kilobytes de armazenamento, enquanto que o MEDIUMBLOB possui capacidade de at\u00e9 at\u00e9 16 megabytes. Iremos utilizar o tipo\u00a0MEDIUMBLOB para que possamos armazenar arquivos maiores. Abaixo o SQL para a cria\u00e7\u00e3o ta tabela:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE TABLE upload (\r\n   id INT NOT NULL AUTO_INCREMENT,\r\n   nome VARCHAR(30) NOT NULL,\r\n   tipo VARCHAR(30) NOT NULL,\r\n   tamanho INT NOT NULL,\r\n   conteudo MEDIUMBLOB NOT NULL,\r\n   PRIMARY KEY(id)\r\n);<\/code><\/pre>\n\n\n\n<p>O upload de um arquivo para o banco MySQL \u00e9 um processo de duas etapas. Primeiro voc\u00ea precisa fazer o upload do arquivo para o servidor, e&nbsp; em seguida, ler o arquivo e inseri-lo no banco de dados.<\/p>\n\n\n\n<p>Para enviar um arquivo, precisamos de um formul\u00e1rio para que o usu\u00e1rio digite o nome do arquivo ou que possa procurar no seu computador, selecionando um arquivo. A tag input type = &#8220;file&#8221; \u00e9 usada para esse fim.<\/p>\n\n\n\n<p>Primeiramente iremos fazer o formul\u00e1rio:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;form method=\"post\" enctype=\"multipart\/form-data\">\r\n   &lt;table width=\"350\" border=\"0\" cellpadding=\"1\" cellspacing=\"1\" class=\"box\">\r\n      &lt;tr>\r\n         &lt;td width=\"246\">\r\n           &lt;input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"2000000\">\r\n           &lt;input name=\"userfile\" type=\"file\" id=\"userfile\">\r\n         &lt;\/td>\r\n         &lt;td width=\"80\">&lt;input name=\"upload\" type=\"submit\" class=\"box\" id=\"upload\" value=\" Upload \">&lt;\/td>\r\n      &lt;\/tr>\r\n   &lt;\/table>\r\n&lt;\/form><\/code><\/pre>\n\n\n\n<p>O formul\u00e1rio de upload deve ter o encytype = &#8220;multipart \/ form-data&#8221;, caso contr\u00e1rio n\u00e3o vai funcionar. \u00c9 claro que o m\u00e9todo de formul\u00e1rio tamb\u00e9m precisa ser configurado para method = &#8220;post&#8221;. Lembre-se tamb\u00e9m de colocar um campo MAX_FILE_SIZE oculto antes do campo arquivo, pois isto ir\u00e1 restringir o tamanho dos arquivos.<\/p>\n\n\n\n<p>Ap\u00f3s o formul\u00e1rio ser enviado, o c\u00f3digo ter\u00e1 que ter acesso as vari\u00e1veis globais $ _FILES. No exemplo acima, o nome da tag iput para o arquivo \u00e9 userfile, ent\u00e3o teremos como retorno para $ _FILES:<\/p>\n\n\n\n<p>$ _FILES [&#8216;Userfile&#8217;] [&#8216;name&#8217;]<br>O nome original do arquivo na m\u00e1quina do cliente.<br><br>$ _FILES [&#8216;Userfile&#8217;] [&#8216;type&#8217;]<br>O tipo mime do arquivo, se o browser deu esta informa\u00e7\u00e3o. Um exemplo seria &#8220;image \/ gif&#8221;.<br><br>$ _FILES [&#8216;Userfile&#8217;] [&#8216;size&#8217;]<br>O tamanho, em bytes, do arquivo enviado.<br><br>$ _FILES [&#8216;Userfile&#8217;] [&#8216;tmp_name&#8217;]<br>O nome tempor\u00e1rio do arquivo que foi armazenado no servidor.<br><br>$ _FILES [&#8216;Userfile&#8217;] [&#8216;error&#8217;]<br>O c\u00f3digo de erro associado a este upload de arquivo, se houver.<\/p>\n\n\n\n<p>Sendo assim, teremos o restante do arquivo de upload, com o c\u00f3digo PHP acrescentado:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\r\nif(isset($_POST&#91;'upload']) &amp;&amp; $_FILES&#91;'userfile']&#91;'size'] > 0)\r\n{\r\n$fileName = $_FILES&#91;'userfile']&#91;'name'];\r\n$tmpName  = $_FILES&#91;'userfile']&#91;'tmp_name'];\r\n$fileSize = $_FILES&#91;'userfile']&#91;'size'];\r\n$fileType = $_FILES&#91;'userfile']&#91;'type'];\r\n \r\n$fp      = fopen($tmpName, 'r');\r\n$content = fread($fp, filesize($tmpName));\r\n$content = addslashes($content);\r\nfclose($fp);\r\n \r\nif(!get_magic_quotes_gpc())\r\n{\r\n    $fileName = addslashes($fileName);\r\n}\r\n \r\ninclude 'library\/config.php';\r\ninclude 'library\/opendb.php';\r\n \r\n$query = \"INSERT INTO upload (nome, tipo, tamanho, conteudo ) \".\r\n\"VALUES ('$fileName', '$fileSize', '$fileType', '$content')\";\r\n \r\nmysql_query($query) or die('Error, query failed');\r\ninclude 'library\/closedb.php';\r\n \r\necho \"&lt;br>File $fileName uploaded&lt;br>\";\r\n}\r\n?><\/code><\/pre>\n\n\n\n<p>Antes de fazer qualquer coisa com o arquivo enviado voc\u00ea n\u00e3o deve assumir que o arquivo foi enviado com sucesso para o servidor. Sempre verifique se o arquivo foi enviado com sucesso olhando para o tamanho do arquivo. Se for maior do que zero byte, ent\u00e3o podemos assumir que o arquivo foi carregado com sucesso.<\/p>\n\n\n\n<p>O PHP salva o arquivo enviado com um nome tempor\u00e1rio, na vari\u00e1vel $ _FILES [&#8216;userfile&#8217;] [&#8216;tmp_name&#8217;]. A pr\u00f3xima tarefa \u00e9 ler o conte\u00fado deste arquivo e inserir o conte\u00fado de banco de dados. Sempre certifique-se de usar a fun\u00e7\u00e3o addslashes() para escapar o conte\u00fado, e use-a tamb\u00e9m para obter o nome&nbsp; do arquivo, pois voc\u00ea nunca sabe o que o nome que o arquivo ter\u00e1.<\/p>\n\n\n\n<p>Para o upload dos arquivos \u00e9 isso.&nbsp; Agora \u00e9 hora de baixarmos esses arquivos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Download de arquivos em banco de dados MySQL utilizando o PHP<\/strong><\/h3>\n\n\n\n<p>Quando \u00e9 feito o upload de um arquivo de banco de dados, devemos tamb\u00e9m salvar o tipo de arquivo e sua extens\u00e3o. Estes dados n\u00e3o eram necess\u00e1rios para fazer o upload dos arquivos, mas s\u00e3o necess\u00e1rios para fazer o download dos arquivos.<\/p>\n\n\n\n<p>A p\u00e1gina abaixo lista os nomes dos arquivos armazenados no banco de dados. Os nomes s\u00e3o impressos como uma URL. A url ficaria como download.php? Id = 3.<\/p>\n\n\n\n<p>Exemplo download.php:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html>\r\n&lt;head>\r\n&lt;title>Download File From MySQL&lt;\/title>\r\n&lt;meta http-equiv=\"Content-Type\" content=\"text\/html; charset=iso-8859-1\">\r\n&lt;\/head>\r\n \r\n&lt;body>\r\n&lt;?php\r\ninclude 'library\/config.php';\r\ninclude 'library\/opendb.php';\r\n \r\n$query = \"SELECT id, nome FROM upload\";\r\n$result = mysql_query($query) or die('Error, query failed');\r\nif(mysql_num_rows($result) == 0)\r\n{\r\necho \"Database is empty &lt;br>\";\r\n}\r\nelse\r\n{\r\nwhile(list($id, $nome) = mysql_fetch_array($result))\r\n{\r\n?>\r\n&lt;a href=\"download.php?id=&lt;?php=$id;?>\">&lt;?php=$nome;?>&lt;\/a> &lt;br>\r\n&lt;?php\r\n}\r\n}\r\ninclude 'library\/closedb.php';\r\n?>\r\n&lt;\/body>\r\n&lt;\/html><\/code><\/pre>\n\n\n\n<p>Quando voc\u00ea clica no link de download, o $ _GET [&#8216;id&#8217;] ser\u00e1 definido. Podemos usar este ID para identificar quais arquivos do banco de dados dever\u00e3o ser mostrados. Abaixo est\u00e1 o c\u00f3digo PHP para o download dos arquivos de banco de dados MySQL.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\r\nif(isset($_GET&#91;'id']))\r\n{\r\n\/\/ if id is set then get the file with the id from database\r\n \r\ninclude 'library\/config.php';\r\ninclude 'library\/opendb.php';\r\n \r\n$id    = $_GET&#91;'id'];\r\n$query = \"SELECT nome, tipo, tamanho, conteudo \" .\r\n         \"FROM upload WHERE id = '$id'\";\r\n \r\n$result = mysql_query($query) or die('Error, query failed');\r\nlist($nome, $tipo, $tamanho, $conteudo) = mysql_fetch_array($result);\r\n \r\nheader(\"Content-length: $size\");\r\nheader(\"Content-type: $type\");\r\nheader(\"Content-Disposition: attachment; filename=$name\");\r\necho $content;\r\n \r\ninclude 'library\/closedb.php';\r\nexit;\r\n}\r\n \r\n?><\/code><\/pre>\n\n\n\n<p>Antes de visualizar o conte\u00fado do arquivo usando echo, primeiro precisamos definir v\u00e1rios cabe\u00e7alhos:<\/p>\n\n\n\n<p>header (&#8220;Content-length: $ size&#8221;)<br>Este cabe\u00e7alho informa ao navegador o tamanho do arquivo. Alguns navegadores precisam desta informa\u00e7\u00e3o para poder baixar o arquivo corretamente. De qualquer forma, \u00e9 uma boa maneira de dizer o qu\u00e3o grande \u00e9 o arquivo podendo se prever quanto tempo o download vai demorar.<\/p>\n\n\n\n<p>header (&#8220;Content-type: $ type&#8221;)<br>Este cabe\u00e7alho informa ao navegador que tipo de arquivo ele ir\u00e1 baixar.<\/p>\n\n\n\n<p>header (&#8220;Content-Disposition: attachment; filename = $ name&#8221;);<br>Diz ao navegador para salvar o arquivo baixado com o nome especificado. Se voc\u00ea n\u00e3o enviar este cabe\u00e7alho, o navegador vai tentar salvar o arquivo usando o nome do script (download.php).<\/p>\n\n\n\n<p><strong>NOTA:<\/strong><br>Ao enviar os cabe\u00e7alhos uma poss\u00edvel mensagem de erro poder\u00e1 ser assim:<\/p>\n\n\n\n<p>Warning: Cannot modify <em>header information &#8211; headers already sent by (output started at C:\\Webroot\\library\\config.php:7) in C:\\Webroot\\download.php on line 13<\/em><\/p>\n\n\n\n<p>Este erro acontece porque alguns dados j\u00e1 foram enviados antes de enviar o cabe\u00e7alho da p\u00e1gina. Quando a mensagem de erro acima acontece, \u00e9 porque voc\u00ea &#8220;acidentalmente&#8221; adicionou um espa\u00e7o a direita ap\u00f3s a tag de fechamento PHP (&gt;).<\/p>\n\n\n\n<p>Bem, por hoje \u00e9 isto. espero que este post tenha sido \u00fatil, ainda mais se voc\u00ea estava em d\u00favida de como fazer o upload de um arquivo diretamente no banco de dados utilizando PHP<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Algumas aplica\u00e7\u00f5es web necessitam que os arquivos .jpg, .doc, .pdf e etc. sejam gravados no banco de dados MySql. Para isso, podemos fazer um script PHP que realize esta tarefa. Para iniciar, vamos criar uma tabela para armazenar estes arquivos. Abaixo segue a estrutura da tabela: id: Identificador \u00fanico para [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[110,20,68,69],"tags":[114,115,113,73],"class_list":["post-100","post","type-post","status-publish","format-standard","hentry","category-banco-de-dados","category-desenvolvimento","category-php","category-software-livre","tag-armazenamento-arquivo","tag-arquivo","tag-mysql","tag-php"],"_links":{"self":[{"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/posts\/100","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=100"}],"version-history":[{"count":1,"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/posts\/100\/revisions"}],"predecessor-version":[{"id":101,"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/posts\/100\/revisions\/101"}],"wp:attachment":[{"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=100"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}