1

ユーザーが画像をデータベースにアップロードできるようにする簡単なスクリプトを作成しようとしています。PHPのfopen関数に問題があります。

ユーザーが自分のコンピューターに画像ファイルをアップロードできるようにする必要があるため、ファイルへのパスは毎回異なります。

<form method="POST">
        <input type="file" name="img">
        <input type="submit" value="uload">
    </form>

この単純な形式は、ファイルの文字列値のみを返します。ファイルへの直接パスを必要とする fopen 関数を使用してファイルを開く必要があります。

fopen($_POST["img"],"r");

これは、ファイルが php スクリプトと同じディレクトリにある場合にのみ機能します。

そのため、ファイルが保存されている場所を見つける方法があるかどうかを尋ねているので、 fopen 関数を使用してファイルを開くことができます。

4

2 に答える 2

1

まず、ファイルのアップロードに関する PHP マニュアルを参照することをお勧めします: http://www.php.net/manual/en/features.file-upload.post-method.php

そのようなコードは、システム内のセキュリティ ホールを開く可能性があるためです。一般的に言えば、ウイルス スキャン、画像のバイナリ署名、サイズ変更による画像の検証などのチェックを行う前に、ユーザー ファイルを直接実行することはお勧めしません。パフォーマンスの観点から、データベースにファイルを保存することはお勧めしません。さらに、ディレクトリにアップロードすることを選択した場合、その権限を適切に設定する必要があります。

PHPマニュアルからあなたのケースに合わせて修正されたサンプルファイルアップロードコードをここにコピーします:

HTML 部分:

<!-- The data encoding type, enctype, MUST be specified as below -->
<form enctype="multipart/form-data" action="YOUR_Upload_FILE.php" method="POST">
    <!-- Name of input element determines name in $_FILES array -->
    <input name="img" type="file" />
    <input type="submit" value="Send File" />
</form>

PHP 部分:

<?php
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['img']['name']);

//At this point you may like to check:
/*
1. Upload Errors in $_FILES
2. Do virus check.
3. Do binary check for the images type
4. Do size check for the image
5. Do actual image resize to confirm it is valid image.
*/

//After everything is safe, you move the temporary file to your permanent store.
echo '<pre>';
if (move_uploaded_file($_FILES['img']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "Possible file upload attack!\n";
}

echo 'Here is some more debugging info:';
print_r($_FILES);

print "</pre>";

?>
于 2013-07-07T10:22:23.307 に答える
0
if ($_FILES["file"]["error"] == 0) {
    fopen($_FILES["img"]["tmp_name"], 'r');
}
于 2013-07-07T08:38:59.477 に答える