Como posso inserir arquivos grandes no MySQL db usando o PHP?

Quero carregar um arquivo grande de tamanho máximo de 10 MB para o meu database MySQL. Usando .htaccess , mudei o limite de upload de arquivos do PHP para “10485760” = 10MB. Posso carregar arquivos até 10MB sem nenhum problema.

Mas não consigo inserir o arquivo no database se for mais de 1 MB de tamanho.

Estou usando file_get_contents para ler todos os dados do arquivo e passá-lo para a consulta de inserção como uma string a ser inserida em um campo LONGBLOB.

Mas os arquivos maiores que 1 MB não são adicionados ao database, embora eu possa usar print_r($_FILES) para garantir que o arquivo seja carregado corretamente. Qualquer ajuda será apreciada e vou precisar dela nas próximas 6 horas. Então, ajude!

Tanto quanto eu sei, geralmente é mais rápido e melhor praticar não armazenar o arquivo no db, pois ele vai ficar maciço muito rapidamente e diminuir a velocidade. É melhor fazer uma maneira de armazenar o arquivo em um diretório e depois armazenar a localização do arquivo no db.

Nós o fazemos para imagens / pdfs / mpegs etc no CMS que temos no trabalho, criando uma pasta para o arquivo nomeado do nome de arquivo url-safe e armazenando o nome da pasta no db. É fácil apenas escrever o URL dele na camada de apresentação, então.

Você quer verificar o valor de configuração do MySQL “max_allowed_packet”, que pode ser configurado muito pequeno, impedindo que o INSERT (que seja grande em si) aconteça.

Execute o seguinte a partir de um prompt de comando do mysql:

 mysql> show variables like 'max_allowed_packet'; 

Certifique-se de que é grande o suficiente. Para mais informações sobre esta opção de configuração, consulte

MySQL max_allowed_packet

Isso também afeta mysql_escape_string () e mysql_real_escape_string () em PHP, limitando o tamanho da criação da string.

A melhor resposta é usar uma implementação melhor e também trabalhar em torno dessa questão. Você pode ler um artigo aqui . Armazene 10MB, 1000MB, não importa. A implementação pedaços / corta o arquivo em muitas peças menores e as armazena em várias linhas. Isso ajuda com a carga e a recuperação, de modo que a memory também não se torne um problema.

Algumas extensões PHP para o MySQL têm problemas com os tipos de dados LONGBLOB e LONGTEXT. As extensões podem não suportar o stream de blob (publicando o blob um segmento por vez), então eles devem postar todo o object de uma só vez.

Portanto, se o limite de memory do PHP ou o limite do tamanho do pacote do MySQL restringirem o tamanho de um object que você pode postar no database, talvez seja necessário alterar alguma configuração em PHP ou MySQL para permitir isso.

Você não disse qual extensão do PHP você está usando (há pelo menos três para o MySQL) e você não mostrou nenhum código que você está usando para publicar o blob no database.

Você pode usar a function LOAD_FILE do MySQL para armazenar o arquivo, mas você ainda precisa obedecer o valor max_allowed_packet eo fato de que o arquivo deve estar no mesmo servidor que a instância do MySQL.

Você não diz qual erro você está recebendo (use mysql_error() para descobrir), mas eu suspeito que você esteja atingindo o tamanho máximo do pacote.

Se for esse o caso, você precisaria alterar sua configuração do MySQL max_allowed_packet

Você não diz qual erro você está recebendo (use mysql_error () para descobrir), mas eu suspeito que você esteja atingindo o tamanho máximo do pacote.

Se for esse o caso, você precisaria alterar sua configuração do MySQL max_allowed_packet

Bem, eu tenho o mesmo problema. E os dados não podem ser inseridos no database do mysql em um “modo io”

 loop for : read $data from file, write $data to blob end loop close file close blob 

Uma solução parece criar uma tabela com blobs de várias partes, como criar tabela data_details (id int pk auto_increment, chunck_number int null, dataPart blob); ???

Intereting Posts