0

うまくいけば、誰かがここで私を助けてくれます。一晩中ブラウジングしていて、私が試したことは何もうまくいかないようですが、私はphpが初めてなので遅いです。6枚の画像をアップロードする必要がありますが、これはうまく機能します。しかし、画像だけでなく、他のすべてのファイルタイプをアップロードできることに気付きました。それぞれ100kb未満の画像だけに制限できるようにしようとしています。ひえええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええ限り お願いします!

function findexts ($filename) { $filename = strtolower('$filename') ; 
$exts = preg_split("[/\\.]", $filename) ;
 $n = count($exts)-1; 
 $exts = $exts[$n];
  return $exts;
   }

$ext = findexts ($_FILES['images']['name']) ; 
$ran = rand ();
$ran2 = $ran.".";

while(list($key,$value) = each($_FILES['images']['name']))
        {
            if(!empty($value))
            {
                $filename = $ran.$value;
                    $filename=str_replace(" "," _ ",$filename);// Add _ inplace of blank space in file name, you can remove this line

                    $add = "media/".$ran."$filename";
                $insert_query = "INSERT INTO ....VALUES ...";
                       //echo $_FILES['images']['type'][$key];
                 // echo "<br>";
                    copy($_FILES['images']['tmp_name'][$key], $add);
                    chmod("$add",0777);

        mysql_query($insert_query);

            }

        }
4

3 に答える 3

3

ここで両方の質問への回答を参照してください。

https://stackoverflow.com/a/9153419/723855

この関数をスクリプトに追加します (リンクから変更):

function acceptFileUpload($thefile){
    if(isset($_FILES[$thefile])) {
        $errors     = array();
        $maxsize    = 2097152;
        $acceptable = array(
            'application/pdf',
            'image/jpeg',
            'image/jpg',
            'image/gif',
            'image/png'
        );

        if(($_FILES[$thefile]['size'] >= $maxsize) || ($_FILES[$thefile]["size"] == 0)) {
            $errors[] = 'File too large. File must be less than 2 megabytes.';
        }

        if(!in_array($_FILES[$thefile]['type'], $acceptable)) && (!empty($_FILES[$thefile]["type"]))) {
            $errors[] = 'Invalid file type. Only PDF, JPG, GIF and PNG types are accepted.';
        }

        if(count($errors) !== 0) {
            return true;
        } else {
            foreach($errors as $error) {
                echo '<script>alert("'.$error.'");</script>';
                return false;
            }

            die(); //Ensure no more processing is done
        }
    }
}

次に、スクリプトで while ループを変更して、この関数を使用して有効なファイルをチェックします。

while(list($key,$value) = each($_FILES['images']['name']))
    {
        if(!empty($value))
        {
            if(acceptFileUpload('images'))
            {
            $filename = $ran.$value;
                $filename=str_replace(" "," _ ",$filename);// Add _ inplace of blank space in file name, you can remove this line

                $add = "media/".$ran."$filename";
            $insert_query = "INSERT INTO ....VALUES ...";
                   //echo $_FILES['images']['type'][$key];
             // echo "<br>";
                copy($_FILES['images']['tmp_name'][$key], $add);
                chmod("$add",0777);

    mysql_query($insert_query);
            }
        }

    }

acceptFileUpload() に渡されるパラメーターの権利がない可能性があります。

于 2012-04-16T13:44:40.393 に答える
0

各ファイルの処理スクリプトで実行する4つの関数。すべてのテストに合格すると、ファイルは条件を満たし、安全に保存できます(png / jpg / gif+ゼロ以外+10Kb制限+アップロードされたファイル)

//Example Call: checkFileExtension($_FILES['fieldname']['name']);
function checkFileExtension($filename) {
    $filename = strtolower($filename) ;
    $filenamePartsArray = preg_split("[/\\.]", $filename) ;
    $extension = $filenamePartsArray[count($filenamePartsArray) - 1];
    if (($extension == 'gif') || ($extension == 'jpeg') || ($extension == 'jpg') || ($extension == 'png')) {
        return true;
    } else {
        return false;
    }
}

//Example Call: checkFileMIME($_FILES['fieldname']['type']);
function checkFileMIME($filetype) {
    if (($filetype == 'image/png') || ($filetype == 'image/jpeg') || ($filetype == 'image/gif')) {
        return true;
    } else {
        return false;
    }
}

//Example Call: checkFileSize($_FILES['fieldname']['size'], 10);
function checkFileSize($filesize, $limitKb = 0) {
    if ($filesize == 0) {
        return false;
    }
    if ($limitKb != 0) {
        if ($filesize > ($limitKb * 1024)) {
            return false;
        }
    }
    return true;
}

//Native Call: is_uploaded_file($_FILES['fieldname']['tmp_name']);

編集:疑似例の使用

foreach ($_FILES as $fieldname => $file) {
    if ((checkFileExtension($file['name'])) && (checkFileMIME($file['type'])) && (checkFileSize($file['size'], 10)) && (is_uploaded_file($file['tmp_name']))) {
        //Move the image with move_uploaded_file
        //Save the file location with DB insert
    }
}
于 2012-04-16T13:58:53.180 に答える
0

ファイルタイプを確認できます

$_FILES['image']['type']

または拡張子も確認したい場合

$extension = explode('.',(string)$_FILES['image']['name']);
//then check if its "jpg", "gif" or "png"

ファイルサイズはで確認できます

$_FILES['image']['size']

したがって、スクリプトは、イメージの更新ごとに次のようになります。

$extension = explode('.',$_FILES['image']['name']);
$imgextensions = array();
$size      = $_FILES['image']['size'];
if(($extension == 'jpg' || $extension == 'gif' || $extension == 'png') &&
    $size < 100000 ){
    // upload your file to your filesystem
}else{
    //inform the user
}
于 2012-04-16T13:43:08.083 に答える