Upload in tabella MySQL

Ciao  a tutti.

Ho seguito questo tutorial sul sito per effettuare l'inserimento di file in un db MySQL:

http://www.phpnews.it/content/view/213/80/1/0/

Ho installati:

PHP 5.0.5

MySQL 4.1

Apache 2.0

Volevo chiedere due cose:

- come posso aumentare la dimensione dell'upload dei file? Per esempio se devo uploadare un file 3 o 4 mega?

- per alcuni file che inserisco nel db (per es. .pdf o .doc) una volta inseriti quando poi vado per visualizzarli i file risultano compromessi o comunque illegibili. Da cosa può dipendere?

Un grazie a tutti, non so più che pesci prendere, ho fatto un sacco di prove, funziona in generale ma ci sono questi due problemi che non riesco a risolvere.

Ciao

Mario :bye:

inviato 11 anni fa
stone
X 0 X

La prima cosa da controllare quando si hanno problemi di upload di files di grosse dimensioni è la direttiva upload_max_filesize nel php.ini che indica la massima dimensione uploadabile sul server.

Per quanto riguarda i files pdf e doc, come è specificato nell'articolo, bisogna inviare delle diverse intestazioni per poter far scaricare il file all'utente:

al posto di

header('Content-Type: '.$tmp['tipo_file']);

bisogna mettere

header("Content-Type: application/octet-stream");

header("Content-Disposition: attachment; filename=\"$tmp[nome_file]\"");

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Ti ringrazio Gianni.

Un problema l'ho risolto.

L'altro, quello delle dimensioni di upload-file, purtroppo ancora no.

Ho cambiato upload_max_size in php.ini settandolo a 5M ma non  non riesco a fare ancora l'upload di file maggiori di 1M.

L'errore che compare sul browser è:

Query non valida: MySQL server has gone away

ho provato a spulciare e cambiare qualche configurazione di my.ini (seguendo le indicazioni contenute in my-huge.ini) ma poi non riesco più ad avviare il server MySQL ... ho provato anche a rinominare my-huge.ini con my.ini ma niente, il server MySQL non si avvia, allora ho rimesso il suo my.ini ma oltre un mega non vado.

Hai qualche altra dritta?

Ti ringrazio

A presto

Mario :(

risposto 11 anni fa
stone
X 0 X

esegui la query show variables like 'max_allowed_packet' e riporta il valore di max_allowed_packet

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

mi stampa questo:

mysql> show variables like 'max_allowed_packet';

+--------------------+---------+

| Variable_name      | Value   |

+--------------------+---------+

| max_allowed_packet | 1048576 |

+--------------------+---------+

1 row in set (0.00 sec)

mysql>

più o meno un mega  :(

risposto 11 anni fa
stone
X 0 X

allora, fermo restando che   upload_max_size va tenuto alto, vai nel file di configurazione di mysql (my.ini) e nella sezione [mysql] aggiungi la riga max_allowed_packet=16M

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

purtroppo niente, sempre il messaggio:

Query non valida: MySQL server has gone away

sigh

risposto 11 anni fa
stone
X 0 X

 :( dopo la modifica al my.ini hai riavviato MySQL? Hai poi verificato, ripetendo la query di prima, che il nuovo valore di max_allowed_packet è stato memorizzato?

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

sempre lo stesso valore di prima.

 ma dov'è la riga contenente

 upload_max_size ?

in my.ini non l'ho trovato.

Ho aggiunto sotto [mysql] sia upload_max_size si max_allowed_packet=16M

riavviato mysql ma niente.

Sempre lo stesso valore

risposto 11 anni fa
stone
X 0 X

errore mio: devi cercare nel my.ini la sezione [mysqld] e modificare (o aggiungere) la direttiva

max_allowed_packet = 16M

upload_max_filesize non è del my.ini ma del php.ini

riavvia mysql e controlla che la nuova direttiva sia stata recepita

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Alla grande!

Ora funziona!!!!!

Sei stato gentilissimo.

Ti ringrazio

Complimenti per il sito, qui ho trovato un sacco di spunti.

Ciao e a presto

Mario

 :bye: :bye:

risposto 11 anni fa
stone
X 0 X

Una curiosità:

ma i file che vengono uploadati (salvati come oggetto OLE all'interno della tabella MySQL) dove vengono fisicamente salvati? Proprio all'interno della tabella?

Ho visto le dimensioni della tabella dopo aver effettuato vari upload di vari mega, conta pochi KB ma i file inseriti via web si vedono lo stesso dal browser una volta richiamati:

foto, filmati, file mp3 e quant'altro.

Ma MySQL usa un algoritmo di compressione particolare?

Ciao

Mario

 :)

risposto 11 anni fa
stone
X 0 X

Che file stai controllando? tutto quanto viene inserito nelle tabelle di mysql e di default senza compressione

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Sto controllando il file dentro a MySQL\Data\db_mio\prova.frm

Quelle sono le tabelle generate da MySQL, almeno credo

risposto 11 anni fa
stone
X 0 X

Ogni tabella di mysql, del tipo MyISAM, è costituita da 3 file:

.MYD contiene i dati

.FRM contiene la struttura

.MYI contiene gli indici

quindi dovresti vedere le dimensioni del fime nome_tabella.myd

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

io ho usato usato una tabella di tipo innodb e nella cartella del mio db c'è solo l'frm che è di 9kb

risposto 11 anni fa
stone
X 0 X

Per le tabelle innodb la cosa è diversa. Tutti i dati di tutte le tabelle vengono conservati in un unico file il cui nome di default è ibdata1 e che ha una dimensione iniziale di 10Mb (ma può essere modificata)

A seconda delle impostazioni questo file può crescere se lo spazio al suo interno è terminato, oppure può impedire l'inserimento di altri dati nel database.

Quindi per le InnoDB non c'è un legame preciso e diretto tra dimensione del file contenente i dati ed i dati stessi

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Ho visto il file, attualmente ha una dimensione di 26 mega. Risiede su un hard disk di 40 gb.

Il fatto è che ora ho eliminato tutti i record contenenti gli oggetti OLE ma le dimensioni del file sono rimaste identiche. C'è un limite particolare per le dimensioni di questo file? Al massimo fino ad esaurimento hard disk. Se ci sono dei documenti inutili  (cioè che non debbono essere più consultati) per eliminarli realmente e far ritornare il file alle sue dimensioni originali come faccio? Forse PhpMyAdmin può servire a ricompattare questo file togliendogli le cose inutili?

 :) :)

risposto 11 anni fa
stone
X 0 X

tieni presente che questo file è gestito direttamente ed esclusivamente da MySQL. Se vuoi cancellare dei dati devi farlo attraverso delle query di tipo DELETE.

Per i dettagli su come si modificano le dimensioni di questo file, soggette a politiche su cui puoi intervenire attraverso i parametri di configurazione di MySQL, comunque devi consultare la documentazione ufficiale di MySQL.

Se non ti crea problemi la dimensione del file lascia tutto come sta.  :excl:

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda