2017-04-17 72 views
1

嗨,我想上傳文件,並設置限制1 MB。 當文件大小大於1 MB文件不移動文件夾中,但它在MySQL數據庫中更新。PHP文件大小上傳條件不起作用

<?php 
$fileName = $_FILES['myfile']['name']; 
$fileNameTmp = $_FILES['myfile']['tmp_name']; 
$fileSize = $_FILES["myfile"]["size"]; 
$fileExtension = explode('.',$fileName); 
$fileExtension = strtolower(end($fileExtension)); 
$maxsize = 1000000; 
$fileUniqueName = uniqid().'.'.$fileExtension; 
$store = 'uploads/'.$fileUniqueName; 

if($fileSize>$maxsize) 
{ 
echo 'size exceed'; 
} 
else 
{ 

    move_uploaded_file($fileNameTmp,$store); 
    $query = mysql_query("update users set image = '$fileUniqueName' where id = '$_SESSION[id]'"); 
} 
?> 

預期的結果:如果大小超過1 MB的文件名不應該在更新數據庫。

+3

停止使用'mysql_ *'函數。自v5.5(2013年6月)開始,它們已被棄用,並從v7.0(2015年12月)開始刪除。請使用[** mysqli _ ***](https://secure.php.net/manual/en/book.mysqli.php)或[** PDO **](https://secure.php.net /manual/en/book.pdo.php)與[**準備語句**](https://secure.php.net/manual/en/pdo.prepare.php)和[**綁定參數** ](https://secure.php.net/manual/en/pdostatement.bindparam.php)。 –

+2

您的代碼可能容易受到[** SQL注入攻擊**](https://en.wikipedia.org/wiki/SQL_injection)的影響。你應該使用[** mysqli **](https://secure.php.net/manual/en/mysqli.prepare.php)或[** PDO **](https://secure.php.net/ manual/en/pdo.prepared-statements.php)準備帶有綁定參數的語句,如[**這篇文章**]所述(https://stackoverflow.com/questions/60174/how-can-i-prevent-sql步噴射功能於PHP)。 –

+1

'var_dump($ maxsize,$ fileSize);'並檢查這些值是否符合您的期望。 – Qirel

回答

1

我猜這個文件沒有上傳,你得到$fileSize等於0,繞過你的if條件。
將其更改爲if($fileSize > $maxsize || $fileSize == 0)以捕獲錯誤。

+0

是文件大小爲0 –

+0

這就是爲什麼你的條件被繞過。將其更改爲 'if($ fileSize> $ maxsize || $ fileSize == 0)' – gaganshera

+0

感謝好友。解決。 –