1

私は PHP を自己学習するために最善を尽くしている初心者プログラマーです。ファイルのアップロードを機能させようとしていますが、いくつか問題があります。ファイルは正常にアップロードされたようですが、一時的な場所はサーバー上に存在しない場所です。

ファイルをアップロードするために使用しているコードは次のとおりです。

<?php       
if (isset($_POST['submit']))
{
$imgfile = $_FILES['imgfile']['name'];
$temp = $_FILES['imgfile']['tmp_name'];
$type = $_FILES['imgfile']['type'];

if (!empty($imgfile))
{
        $dbc = mysqli_connect('DB_HOST','DB_USER','DB_PASSWORD','DB_NAME')
    or die('Error connecting to database');
    $query = "INSERT INTO photos VALUES(0, '$imgfile',NOW(), '$temp', '$type')";

        mysqli_query($dbc,$query);

        //clear the form                    
    $imgfile = "";

        mysqli_close($dbc);
    }
}
?>
<form enctype = "multipart/form-data" method = "POST" action = "<?php
echo $_SERVER['PHP_SELF']; ?>">

<label for = "imgfile">Filename:</label>
<input type = "file" id = "imgfile" name = "imgfile"  />
<br />
<input type = "submit" value = "upload" name = "submit" id = "submit" /> 
</form>

これらは、$_FILES['tmp_name']変数が格納されていると言う場所の例です。

/tmp/phpWw6aut

また

/tmp/php4bzVfE

php.iniファイルに設定されているデフォルトの一時ディレクトリはroot/tmp. その部分は正しいですが、各ファイルが入っていると言っているフォルダー/phpgarbage内に、おそらくその奇妙なフォルダーがありtmpます。唯一のことは、それらのフォルダーがサーバーに存在しないことです。

何かご意見は?もっと具体的に言えることがあれば教えてください。これは私にとって初めてのプログラミング関連の投稿なので、他に共有すべき情報があれば教えてください。

お時間をいただきありがとうございます!

4

3 に答える 3

2

一時ストレージからディレクトリに移動する必要があります...

if (is_uploaded_file( $_FILES['imgfile']['tmp_name'] )) {
    move_uploaded_file( $_FILES['imgfile']['tmp_name'], '/path/filename.jpg' );
}
于 2012-01-18T18:33:08.350 に答える
2

後でアクセスできるようにするには、画像を保存する必要があります。これを行うには、次のコードを追加します。

$path = "uploads/images/";
if (is_uploaded_file($_FILES['imgfile']['tmp_name'])) {
    move_uploaded_file($_FILES["imgfile"]["tmp_name"], $path . $_FILES["imgfile"]["name"]);
}

次の行の後:

if (!empty($imgfile))
{

$pathは書き込み可能でなければならないことに注意してください。そして今、ファイル名は$path.$_FILES["imgfile"]["name"]. また、いくつかのセキュリティ チェックを必ず実装してください。コードは脆弱です。

于 2012-01-18T18:33:17.280 に答える
0

この方法を使用して、ファイルを保存する場所を制御してみてください。 http://us.php.net/manual/en/function.move-uploaded-file.php

于 2012-01-18T18:33:51.343 に答える