2012-03-19 16 views
0

私は自分のプロフィール写真の画像(ファイル)を自分のウェブサイトにアップロードすることを許可します。彼らはHTML形式で画像をアップロードしますが、私が望むフォルダにファイルを移動するのに問題があります。私はアップロードパスを変更するためにphp.iniファイルを混乱させたくありません。 move_uploaded_file()を使いたい。ここでアップロードされたファイルをPHPで移動

は私のHTMLです:

<form enctype="multipart/form-data" method="post" action="upload_img.php"> 
    <input type="hidden" name="MAX_FILE_SIZE" value="32768"/> 
    <input type="text" name="name" value=""/> 
    <input type="file" name="picture" value="picture"/> 
    <input type="submit" name="submit" value="upload"/> 
</form> 

そして、私のPHP:

<?php 
    define('GW_UPLOADPATH', 'images/'); 
    $picture= $_FILES['picture']['name']; 
    $name= $_POST['name']; 
    $tmp= $_FILES['picture']['tmp_name']; 

    var_dump($picture); 
    var_dump($name); 
    var_dump($tmp); 

    $connect= mysqli_connect(//connect params) 
    or die('error connecting with the database'); 

    $query= "INSERT INTO pics (pic, name) VALUES ('$picture', '$name')"; 

    $target= GW_UPLOADPATH . $picture ; 

    if (move_uploaded_file($_FILES['picture']['tmp_name'], $target);)) 
    { 
     mysqli_query($connect, $query) 
      or die('error with query'); 
    } 

?> 

私はそれを見ることができるので、ファイルがtmpフォルダにアップロードします知っているが、それはsess_96bsj29ub3tndnd2853d24k38adrbqoo.file命名されましたそれは何が起こるべきですか?私は間違って何をしていますか?

+0

'[ '名前']' $ _FILES配列でUSER-SUPPPLIEDデータです。あなたのコードでは、悪意のあるユーザーがWebサーバーがアクセスできるシステム上のファイルを置き換えることができます。 –

+0

あなたは有害なファイルをアップロードすることを意味しますか? – user1174762

+0

すべてのファイル。彼らがファイルの名前を '../../../../../../../../ etc/passwd'にすると、何が起きるか考えてみてください...あなたは信頼できませんリモートユーザがあなたに送るものは何ですか、特にファイルシステムの操作に関するものです。 –

答えて

3
$_FILES['picture']['tmp_name'] 

は、そのフォルダ内のファイルを指しますし、あなたが

move_uploaded_file($_FILES['picture']['tmp_name'], $target); 

この行を呼び出すときに、あなたが好きな場所にあなたのtempフォルダ内のファイルを取得したいです。 $ targetを有効な既存のディレクトリに設定するだけです。

1

のようなif文だけセミコロンフォームを削除します。

if (move_uploaded_file($_FILES['picture']['tmp_name'], $target))) 
    { 

    mysqli_query($connect, $query) 
    or die('error with query'); 
    } 
関連する問題