2017-04-17 11 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/** ** prepared statements **](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)は、[** this post **](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

yes filesizeは0 –

+0

です。そのため、if条件がバイパスされているのはこのためです。 'if($ fileSize> $ maxSize || $ fileSize == 0)' – gaganshera

+0

に感謝してください。解決されました。 –

関連する問題