- Home
- Categorie
- Coding e Sistemistica
- PHP
- Problema con update file
-
Ciao anche qui c'è un test che potrebbe sfuggirti.
[php]
if(!isset($type) || $size==0)
.......
elseif(isset($type) || $size!=0)
............
[/php]E se $type è valorizzato ma $size è 0 ?Purtroppo, visto che cerchiamo un errore non possiamo dare niente per scontato: questo sarebbe il primo grave errore.
Mi sono permesso di ritoccare il codice che hai postato:
in questa maniera puoi capire immediatamente se il problema si verifica nella parte precedente a questo script (si verificherà die ("Nessun file selezionato per l'upload");) oppure se l'errore è nella parte dove prepari e copi il file.[php]
$size = $_FILES['videos'];
$type = $_FILES['videos']['type'];if(!isset($type) || $size==0){
die ("Nessun file selezionato per l'upload");
}$array_estensioni_ammesse=array('mp4','wmv','flv'); //estensioni ammesse
$dimensione_massima=800000; //dimensione massima consentita per file in byte -> 1024 byte = 1 Kbif($size>$dimensione_massima){
echo "Il file selezionato per l'upload supera la dimensione massima di 80Mb";
}
else{
$timestamp = time();
$file = time() .'-'.$_FILES['videos']['name'];
$dir ="../../videos/";
$urlvideo = $dir.$file;
copy($_FILES['videos']['tmp_name'], $urlvideo);
$video = $file;
}
[/php]Fammi sapere
-
Ho provato il tuo e non va, quindi ho pensato, sarà il form? e ho fatto questa prova e non va cmq,
[php]
<?php
$size = $_FILES['videos'];
$type = '2';
if($type==2){
echo ("Nessun file selezionato per l'upload");
}$array_estensioni_ammesse=array('mp4','wmv','flv'); //estensioni ammesse
$dimensione_massima=800000; //dimensione massima consentita per file in byte -> 1024 byte = 1 Kbif($size>$dimensione_massima){
echo "Il file selezionato per l'upload supera la dimensione massima di 80Mb";}
else{
$timestamp = time();
$file = time() .'-'.$_FILES['videos']['name'];
$dir ="../../videos/";
$urlvideo = $dir.$file;
copy($_FILES['videos']['tmp_name'], $urlvideo);
$video = $file;
}
?>
[/php]
-
Ciao,
cosa intendi con non va?Cosa ti aspettavi dopo il tuo test con $type = '2'?
'2' non è 2: una è una stringa, l'altro è un numero.
Tu dirai:
Ma il cast non è automatico in PHP?Risposta:
Dovrebbe esserlo, ma a volte ho dovuto eseguire cast 'manuali'.Comunque,
nei logs del web server non trovi nessun errore?
-
Scusa, ho copiato male, ho provato sia come strnga e che numero
$type=2; if($type==2) e $type='2'; e if($type=='2')
No il server non da errori.
-
Mi sa allora che l'elaborazione si blocca prima, lì mi sa che non ci arrivi proprio.
Se vuoi sul mio sito, precisamente qui, ho messo a disposizione una classe per eseguire dei log su file durante il funzionamento dell'applicazione.
E' nata proprio per eseguire il debug applicativo in fase di test: direi la tua situazione.
Se ti va,
preleva pure il codice della classe ed utilizzala.Nell'articolo, alla fine, ci sono degli esempi che mostrano come utilizzarla.
Io la ho usata parecchio e mi è servita. Spero serva anche a te.
Buon debug.
-
Grazie dell'aiuto la provo subito, anche perchè io non sarò un grande di php pero if so come funziona:x
-
Ciao ho trovato il problema erano i file temp di windows. Comunque lo cambiata un pò questa e quello che uso
[php]
<?php
$video = $_FILES['video']['type'];
$video_size = $_FILES['video'];
if(empty($video)){
die ( "<p style="font-weight:bold; text-align:center;">Errore nella compilazione dei dati. <br />Nessun file selezionato per l'upload.<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");
return false;
}
else{
$dimensionimax =800000;
$timestamp = time();
$file = time() .'-'.$_FILES['video']['name'];
$video = array("mp4","avi", "image/png","image/pjpeg","image/jpeg", "image/jpg");
if(!in_array($_FILES['video']['type'],$video))
{
die ("<p style="font-weight:bold; text-align:center;">Il file non è di un tipo consentito, sono ammessi solo i seguenti: ". implode("," , $video) ."<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");
}if ($video_size>$dimensionimax)
{
die ("<p style="font-weight:bold; text-align:center;">Errore: Il Video supera il limite di 80Mb ".mysql_error()."<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");
exit;
}else{
$dir ="../../videos/";
$urlvideo = $dir.$file;
copy($_FILES['video']['tmp_name'], $urlvideo);
$video_file = $file;
}
}
?>
[/php]Devo fare delle modifiche o va bene cosi?
Poi mi da un problema con il formati io vorrei caricare un video.mp4 pero mi da l'avviso del formato non consentito come mai?
Ciao.
-
Ciao spirit19,
mi fa piacere che sei riuscito a trovare il problema.Dunque,
per quanto riguarda l'estensione non accettata,
la segnalazione ti appare perchè hai invertito il test.Tu testi:
se è falso che 'mp4' è presente nell'array delle estensioni consentite
allora segnala 'estensione non consentita'.Mentre vorresti assicurarti che sia vero invece che 'mp4' sia presente nell'array, giusto?
Ti è servita la classe MaLogger?
-
La classe ancora non lo usata, comunque uso questo per il controllo formato
[php]
$video = array("mp4","avi", "image/png","image/pjpeg","image/jpeg", "image/jpg");
if(!in_array($_FILES['video']['type'],$video))
{
die ("<p style="font-weight:bold; text-align:center;">Il file non è di un tipo consentito, sono ammessi solo i seguenti: ". implode("," , $video) ."<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");
}
[/php]
-
Ciao,
prova così:
[php]if(!in_array(strtolower ($_FILES['video']['type']),$video)) [/php]
-
Ciao del tuo aiuto;),
ho provato come dici tu non va,
ho inserito altri formati, ma ancora non riconosce mp4
[php]
$video = array(" mp4", " mpeg-4", " mpeg", " mpg", " avi", " wmv", " flv", " divx", " avi", " image/png", " image/pjpeg", " image/jpeg", " image/jpg");
if(!in_array(strtolower ($_FILES['video']['type']),$video))
{
die ("<p style="font-weight:bold; text-align:center;">Il file non è di un tipo consentito, sono ammessi solo i seguenti:<br /> ". implode("," , $video) ."<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");
}
[/php]P.S. Ho provato con varii video .mp4, flv, avi nada non va il controllo.:?
-
Ciao,
ho notato che aggiungi uno spazio bianco prima dell'estensione:
' mp4',' mpeg' ecc...Rimuovi li spazi bianchi,
e per sicurezza trimma l'estensione che ricavi dal file uploadato.
-
Ciao scusa che vuoi dire con" e per sicurezza trimma l'estensione che ricavi dal file uploadato" come si fa in php?
Grazie del tuo aiuto.
-
Ciao Spirit19,
intendevo questo:[PHP]
$video = array("mp4", "mpeg-4", "mpeg", "mpg", "avi", "wmv", "flv", "divx", "avi", "image/png", "image/pjpeg", "image/jpeg", "image/jpg");
if(!in_array(strtolower (trim($_FILES['video']['type'])),$video))
{
die ("<p style="font-weight:bold; text-align:center;">Il file non è di un tipo consentito, sono ammessi solo i seguenti:<br /> ". implode("," , $video) ."<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");
}
[/PHP]come noterai, ho rimosso lo spazio bianco che precedeva ogni estensione in $video, e ho 'trimmato' l'estensione del file uploadato.
-
Ciao ho provato come dici tu e non funziona, poi ho provato cosi
[php]
$video = array("mp4", "mpeg-4", "mpeg", "mpg", "avi", "wmv", "flv", "divx", "avi", "image/png", "image/pjpeg", "image/jpeg", "image/jpg");
if(!in_array(strtolower(ltrim(rtrim(trim($_FILES['video']['type'])))),$video))
{
die ("<p style="font-weight:bold; text-align:center;">Il file non è di un tipo consentito, sono ammessi solo i seguenti:<br /> ". implode("," , $video) ."<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");
}
[/php]
e continua a non funzionare:bho:
-
Ma provare a debuggare?
Se non ti va di utilizzare la via che ti ho detto,
puoi sempre creare commenti HTML nella pagina:[PHP]
$video = array("mp4", "mpeg-4", "mpeg", "mpg", "avi", "wmv", "flv", "divx", "avi", "image/png", "image/pjpeg", "image/jpeg", "image/jpg");echo '<!-- ESTENSIONE FILE UPLOADATO = "' . trim($_FILES['video']['type']) . '" -->';
if(!in_array(strtolower(trim($_FILES['video']['type']))),$video))
{
die ("<p style="font-weight:bold; text-align:center;">Il file non è di un tipo consentito, sono ammessi solo i seguenti:<br /> ". implode("," , $video) ."<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");
}[/PHP]
Cosa ti traccia il commento nel codice HTML?
-
Grazieee dei consigli
ho stampato [php]$_FILES['video']['type'][/php]
inpratica mette video/ prima del formato video e image/ prima del formato immagine
cosi funziona
[php]
$video = array("video/mp4", "video/mpeg-4", "video/mpeg", "video/mpg", "video/avi", "video/wmv", "video/flv", "video/divx");
if(!in_array(strtolower (trim($_FILES['video']['type'])),$video))
{die ("<p style="font-weight:bold; text-align:center;">Il file non è di un tipo consentito, sono ammessi solo i seguenti:<br /> ". implode("," , $video) ."<br /><br />
<a href="javascript:history.go(-1)" title="Torna indietro">Torna indietro.</a></p>");
}
[/php]
Graziee.:)
-
Nessun problema,
buon lavoro.
-
Grazie anche a te
ps se hai bisogno un aiuto scrivi;)
ciao.