2013-03-13 26 views
5

Sto semplicemente cercando di caricare un file e non funziona nulla.Perché il mio file non viene caricato?

<!DOCTYPE html> 
<html><body> 

      <form id="exp" enctype = "multipart/form-data" action="../cgi-bin/uploadPic.php"> 
       <input type="file" id="profilePic2" name="newPic"></input> <br /><br /><br /> 
       <input type="submit" value="Upload Pic" style="color:black;"></input> 
      </form> 
    </body></html> 

Il file php è in esecuzione. Per favore, fai attenzione al codice sciatto, sto cercando di eseguire il debug tramite echo.

<html> 
<body> 
<?php 

$loadFile = true; // error code 
$allowedExts = array("jpg","jpeg","gif","png"); 
$extension = end(explode(".", $_FILES["newPic"]["name"])); 

$file = $_FILES["newPic"]; 
$picIncluded = false; 

if(( ($_FILES["newPic"]["type"] == "image/gif") 
|| ($_FILES["newPic"]["type"] == "image/jpeg") 
|| ($_FILES["newPic"]["type"] == "image/png") 
|| ($_FILES["newPic"]["type"] == "image/pjpeg")) 
&& ($_FILES["newPic"]["size"] < 5000000) 
&& in_array($extension, $allowedExts)){ 
    if($_FILES["newPic"]["error"] > 0){ 
     echo "pnl"; // error code returned to client 
    } 
    else if(file_exists("../profile-pics/" . $file["name"])){ 
     echo "pld"; // picture loaded duplicate 
    } else { 
     $picIncluded = true; 
     echo "finally"; 
     if(move_uploaded_file($file["name"]["tmp_name"],"./" . $file["name"])){ 
      echo "Success again!"; 
     } 
     $path = "../profile-pics/" . $file["name"]; 
    } 
} 
if(is_uploaded_file($_FILES["newPic"]["name"]["tmp_name"])){ 
    echo "Good news!"; 
} 

?> 

</body> 
</html> 

In ogni caso, la funzione move_uploaded_file() sta tornando falso dal momento che non riesce a trovare il file temporaneo. is_uploaded_file() è anche restituito falso. Le mie estensioni e tutto è corretto ma ancora inutilmente, non è stato caricato alcun file. Come posso eseguire il debug di questo?

+1

Hai avuto abbastanza autorizzazioni per le cartelle? –

+0

Come controllo? Sto usando Fedora. Il mio php è in/var/www/cgi-bin /. Dove dovrebbero essere scritti i file temporanei? –

+0

oops. Non ho idea di Fedora. Qualcuno potrebbe aiutarti. –

risposta

5

cambiamento questo

if(move_uploaded_file($file["name"]["tmp_name"],"./" . $file["name"])){ 

a

if(move_uploaded_file($file["tmp_name"],"./" . $file["name"])){ 

perché è stato assegnato

$file = $_FILES["newPic"]; 
+0

Non penso che questo sia il motivo –

+0

@ Mr.Student Una volta assegnato a '$ file = $ _FILES [" newPic "];', puoi solo riferire array monodimensionale di $ file, non ci sono array bidimensionali in $ file. –

+0

Errore mio, hai ragione. –

2

anche per il controllo di sicurezza, è necessario verificare la presenza di is_uploaded_file() prima di caricarlo:

if(is_uploaded_file($_FILES["newPic"]["tmp_name"])){ 
if(move_uploaded_file($_FILES["newPic"]["tmp_name"],"../profile-pics/" . $file["name"])){ 
    echo 'file uploaded...'; 
} 
}else{ 
    echo "Possible file upload attack: "; 
} 
+0

Grazie per avermelo fatto sapere, non lo sapevo e Sono sempre pronto ad apprendere le migliori pratiche. –

Problemi correlati