0

そこで、ユーザーのアバターをサーバーにアップロードし、データベース内の URL を変更するスクリプトを作成しました (YT チュートリアルのおかげです :)) そして、ユーザーが JPG、JPEG、PNG 以外のファイルをアップロードしていないことを確認したいと思います。 、GIF、および10MBを超えるもの。そして、私がやりたい2番目のことは、ユーザーが自分のアバターをアップロードするときに、古いものを削除し、ファイルの名前をランダムな番号に変更することです..

だから今、私は少し立ち往生していて、どこから始めればいいのかわからないので、誰か助けてください。:)このコードにできるだけ単純に適合する便利なチュートリアルをGoogleで見つけることができませんでした..

これまでに書いたコード。

if (isset($_POST['submit'])) {
$name = $_FILES['myfile']['name'];
$tmp_name = $_FILES['myfile']['tmp_name'];
$allowedExts = array("jpg", "jpeg", "gif", "png");

if ($name) {
    $location = "uploads/avatars/$name";
    move_uploaded_file($tmp_name, $location);

    $query = mysql_query("UPDATE users SET avatar = '$name' WHERE id = '$session_user_id'");
    echo 'Your avatar has been changed sucessfully!';
}else {
echo 'Please select a file! Following are supported; JPG, JPEG, PNG, GIF!';} 
4

4 に答える 4

0

$_FILE 連想配列の 'type' フィールドと 'size' フィールドをチェックして、受け取るファイルのタイプ (この場合は画像) とファイルのサイズを検証する必要があります。

于 2012-11-18T17:29:29.860 に答える
0

ファイルサイズ

グローバル制限

でファイル サイズをグローバルに制限できますphp.ini

upload_max_filesize = 10M

局所限界

または、次のようなこともできます。

const('IMG_MAX_SIZE', 10485760); // 10 MB

if ($_FILES['file']['size'] > IMG_MAX_SIZE) {
    // display error message then exit
}
// save image

ファイルの種類

拡張子をチェックするのは良い考えではありません

拡張子を確認することはできますが、これは、ファイルが実際に示されたタイプであることを意味するものではありません。に名前を変更したビデオにすることができます.png

クライアントから報告された MIME タイプを確認する

実際のタイプを判断するには、クライアントが返した MIME タイプを確認します。

$allowed_types = array('image/png', 'image/jpeg', 'image/gif');
if (!in_array($_FILES['file']['type'], $allowed_types)) {
    // display error message (invalid file type) then exit
}

保存後に実際の MIME タイプを決定する

ファイルが正しいタイプであることを本当に確認したい場合 (クライアントは必要なタイプを報告できるため、悪意のあるユーザーがスクリプトをだますことができます)、Fileinfo を使用してファイルを保存した後に確認します。

http://php.net/manual/en/function.finfo-file.php

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($finfo, $filename) . "\n";
finfo_close($finfo);

if (!in_array($_FILES['file']['type'], $allowed_types)) {
    // display error message (invalid file type) then exit
}
于 2012-11-18T17:29:49.483 に答える
0

道半ばのようです。$allowedExtensions配列に対してファイル拡張子を確認するだけです。

<?php
    if (isset($_POST['submit'])) {
    $name = $_FILES['myfile']['name'];
    $tmp_name = $_FILES['myfile']['tmp_name'];
    $allowedExts = array("jpg", "jpeg", "gif", "png");
    $isValidFormat = in_array(end(explode(".", strtolower($file['name']))), $allowedExtensions);
    $fileSize = $_FILES['myfile']['size'];
    $maxFileSize = 10485760; // == 10M
        if ($isValidFormat && $fileSize < 10485760) { // Changed the if statement
            if($_FILES['myfile']['file_size'])

            $location = "uploads/avatars/$name";
            move_uploaded_file($tmp_name, $location);

            $query = mysql_query("UPDATE users SET avatar = '$name' WHERE id = '$session_user_id'");
            echo 'Your avatar has been changed sucessfully!';
        }else {
            echo 'Please select a file! Following are supported; JPG, JPEG, PNG, GIF!';
        }
    }
?>
于 2012-11-18T17:32:31.963 に答える
0
if($_FILES){
    $allowedExtensions = array("jpg", "jpeg", "gif", "png");
    $f = $_FILES;

    foreach($f as $key=>$val){
        if(!empty($val['tmp_name'])){
            $ext = end(explode(".",strtolower(basename($val['name']))));

            if($val['size'] > 10485760){ // handle size
                echo 'Image is too large';
            }elseif(!in_array($ext,$allowedExtensions)){ // handle extension
                echo 'Please select a file! Following are supported; JPG, JPEG, PNG, GIF!';
            }else{
                $val['name'] = 'YOUR_RANDOM_FILE_NAME'.$ext;
                $location = "uploads/avatars/".basename($val['name']);

                if(move_uploaded_file($val['tmp_name'],$location)){ //handle upload

                    $query = mysql_query("UPDATE users SET avatar = '".$val['name']."' WHERE id = '$session_user_id'");
                    echo 'Your avatar has been changed sucessfully!';

                }else{
                    echo 'An error occured on upload.';
                }
            }
        }
    }
}
于 2012-11-18T17:40:28.437 に答える