-2

これはdevshedから入手したスクリプトです。Opera などでうまく動作します (IE ではありません)。私の質問は次のとおりです。このスクリプトは、なしでどのように機能します$_FILES['userfile']['name'] & $_FILES['userfile']['tmp_name']か?

<?php
    class FileUploader
    {
    private $uploadFile;
    private $name;
    private $tmp_name;
    private $type;
    private $size;
    private $error;
    private $allowedTypes=array
    ('image/jpeg','image/gif','image/png','text/plain','application/ms-word');

    public function __construct($uploadDir="./uploadfl/")
    {
    if(!is_dir($uploadDir)){
    throw new Exception('Invalid upload directory.');
    }

    if(!count($_FILES))
    {
    throw new Exception('Invalid number of file upload parameters.');
    }

    foreach($_FILES['userfile'] as $key=>$value)
    {
    $this->{$key}=$value;
    }

    if(!in_array($this->type,$this->allowedTypes))
    {
    throw new Exception('Invalid MIME type of target file.');
    }

    $this->uploadFile=$uploadDir.basename($this->name); 

    }
    // upload target file to specified location

    public function upload(){
    if(move_uploaded_file($this->tmp_name,$this->uploadFile)){
    return true;
    }


    }
    }
    ?>

    <?php
      if($_POST['send']){
    //require_once 'fileuploader.php';
    $fileUploader=new FileUploader();
    if($fileUploader->upload()){
    echo 'Target file uploaded successfully!';
    }
    }
?> 
4

1 に答える 1

2

あなたの質問に答えるには ($_FILEs['userfile']['name'] & $_FILEs['userfile']['tmp_name'] なしでこのスクリプトがどのように機能するか): 配列キーがプロパティとして割り当てられているため、スクリプトがなくても機能します。ここ:

$this->{$key}=$value;

したがって、 $_FILES['userfile']['tmp_name'] の代わりに、次のように参照できるようになりました

$this->tmp_name

すべてのブラウザーで機能しない理由については、既に回答を得ています。

お役に立てば幸いです、ステファン

于 2012-04-26T13:42:59.390 に答える