- Home
- Categorie
- Coding e Sistemistica
- PHP
- Upload funziona in locale ma non in remoto
-
Upload funziona in locale ma non in remoto
Ciao a tutti questo è il mio primo post su questo forum.
Parto subito chiarendo il mio problema sperando che qualcuno abbia un'intuizione.
Ho uno script PHP che mi permette di fare l'upload di file all'interno di un database MySQL.
Sia in locale che in remoto php.ini è settato così:
file_uploads On
upload_max_filesize 8M
max_execution_time 30
post_max_size 8MLa versione di PHP è 5 (anche se in locale è un po' più agggiornata).
In locale uso Debian in remoto credo che sul server giri Fedora (o Red Hat).In locale funziona tutto perfettamente, mentre in remoto ci sono problemi per alcuni file. Infatti in remoto riesco ad uploadare con certezza file fino a circa 700Kb, mentre non riesco ad uploadare file > 1.1Mb (il limite immagino stia nel mezzo).
Ho pensato che il problema fosse che in remoto ci si mettesse più di 30 secondi per eseguire l'upload ma invece ho notato che l'upload fallisce molto prima (intorno ai 18 secondi).
Ho controllato $_FILES['nomedelfile']['error'] ma l'uscita è 0 vale a dire nessun errore.
PHP nopn da nessun errore, semplicemente fallisce la query:
$queryallegatif1 = "INSERT INTO $tab_allegati (collega, user, numero, nome, type, size, contenuto) VALUES ('$collegato', '$utente', '1', '$nomef1', '$file1_t', '$file1_s', '$contentf1')";Forse dovrei postare parti del mio codice php anche se credo che sia più un problema di settaggio del server.
Qualcuno ha qualche idea?
Grazie
ciao
-
Dubito che sia un problema di settaggio di server.
Posta lo script in modo da vedere cosa e dove sbagli..Che errore ti da la query?
-
Grazie per la risposta.
Il file intero è piuttosto lungo, allego solo le parti relative al upload:
In questa parte prendo i dati che arrivano da un form html con enctype="multipart/form-data" controllo il MIME e la grandezza:
[php]
// FILES$max_file_size = 2097152; // byte = 2Mb
$chevale = $max_file_size / 1048576;
$chevale = number_format($chevale, 2);$caricabilif = array("application/msword","application/doc","application/rtf","application/pdf", "application/ps", "application/eps", "application/postscript", "application/vnd.ms-excel", "application/vnd.ms-powerpoint", "application/zip", "application/x-rar-compressed", "application/x-rar", "application/rar");
$filesi = 0;
//faccio lo stesso con il file 1if ($_FILES['msfile1'] > 0) {
$file1_n=$_FILES['msfile1']['name']; $file1_t=$_FILES['msfile1']['type']; $file1_s=$_FILES['msfile1']; $file1_tmp=$_FILES['msfile1']['tmp_name']; $file1_e=$_FILES['msfile1']['error']; //echo"<br />nome: ".$file1_n." errore: ".$file1_e." size= ".$file1_s."<br />"; if ($nomef1 == '') { $nomef1 = $file1_n; } // Controllo che il file sia in uno dei formati caricabili if (!in_array($file1_t,$caricabilif)){ echo"<u>WARNING</u> file 1 should be one of the following type: .doc, .rtf, .xls, .pdf, .ps, .eps, .ai, .pps, .ppt, .zip, .rar.<br /> » <a href=\"javascript:history.back()\"> Go back</a><br /><br /><br />"; echo "</div> </div> </div>"; include("sotto.html"); exit(); } //echo"<br />passa il controllo mime<br />"; // controllo che il file non sia più grande di max file size if ($file1_s > $max_file_size){ echo "<u>WARNING</u> file 1 cannot be larger than ".$chevale." Mb.<br /> » <a href=\"javascript:history.back()\"> Go back</a><br /><br /><br />"; echo "</div> </div> </div>"; include("sotto.html"); exit(); } //echo"<br />passa il controllo megabyte<br />"; $grande = $file1_s / 1048576; //echo "<br /><br /><br />file 1 is set e grande: ".$grande."<br /><br /><br />"; $checkf1 = 0; $numero = 1; $f1 = 1; $filesi = 1; $fp= fopen($file1_tmp, 'r'); $contentf1= fread($fp, filesize($file1_tmp)); $contentf1= addslashes($contentf1); fclose($fp);
}
[/php]e qui inserisce i dati nel DB:[php]
if ($f1 == 1) {
//echo"<br />ora dovrà inserire i dati di file 1 in tabella<br />";$queryallegatif1 = "INSERT INTO $tab_allegati (collega, user, numero, nome, type, size, contenuto) VALUES ('$collegato', '$utente', '1', '$nomef1', '$file1_t', '$file1_s', '$contentf1')"; if (mysql_query($queryallegatif1, $db) ) { $checkf1 = 1; echo "File 1 <b>".$nomef1."</b> has been successfully uploaded.<br /><br /> "; } else { $checkf1 = 0; echo "<u>WARNING</u>, file 1 <b>".$nomef1."</b> has not been uploaded.<br /><br /> "; } }
[/php]Non mi da nessun tipo di errore, semplicemente la query per file superiori a circa 1Mb in remoto non va a buon fine.
Potrebbe essere un problema con il max_allowed_packet di mysql?
Se hai bisogno di altro fammi sapere.
Grazie ciao
-
Ciao,
hai provato a spostare il file caricato in un percorso creato da te, magari con move_uploaded_file()?
forse $contentf1= fread($fp, filesize($file1_tmp)); non va a causa permessiHai provato a stampare mysql_error()?
-
Grazie per la risposta.
Il problema sta nel "max_allowed_packed" di MySql che è di default fissato a 1Mb.
Inserendo [php]echo "Error number: ".mysql_errno($db)."<br />";[/php] infatti mi esce l'errore 1153:
ERROR 1153: Got a packet bigger than 'max_allowed_packet' bytes.
Credo che dovrò intervenire via ssh su mysql ma prima devo chiedere l'autorizzazione al gestore del server... va beh, comunque il problema può considerarsi risolto.
Grazie.
Ciao
-
eh purtroppo i gestori sono sempre poco generosi con le risorse