0

ユーザーがファイルをアップロードし、そのようにコンテンツが取得された場合

$file = $_FILES['uploadedFile'];

次に、ファイルが関数に送信され、受け入れられたファイルタイプであることを確認します。そうである場合は、サーバーに保存します

function saveInputFile($file){
   if($check->checkFile($file)== TRUE){
      //save $file on my server
   }
   else{
      echo "can't be saved!";
   }
}

checkFile関数に合格したとすると、saveInputFile関数内からこのファイルをサーバーに保存するにはどうすればよいですか?ファイルを変数と等しく設定してからその変数を保存することはできますか、それともPOSTデータから直接ファイルを保存する必要がありますか?

私はそれがこのように行われるのを見てきましたが、私はすでにファイルをこの関数に渡しています。

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
   echo "The file ".  basename( $_FILES['uploadedfile']['name']). " has been uploaded";
 } else{
    echo "There was an error uploading the file, please try again!";
}

結局、次の関数でファイルを保存したいと思います。上記のsaveInputFile関数で行ったようにファイルを変数のように渡すことはできますか、それともこのように機能しませんか?

4

2 に答える 2

1

関数は、ソースファイル名と名前move_uploaded_fileの2つのパラメーターを受け取る必要があります。destination file

PHPでは、ファイル移動関数はrenameと呼ばれます。

于 2012-09-17T20:53:17.870 に答える
1

アップロードファイルを、データの横に必要なメソッドを持つ独自のタイプにすることができます。これにより、使用法がより柔軟になります。

$upload = new UploadFile($_FILES['uploadedFile']);
$message = saveInputFile($upload);
echo $message;

function saveInputFile(UploadFile $upload)
{
    if ($check->checkFile($upload->getBasename()) == TRUE) {
        $message = $upload->moveTo($target_path)
            ? sprintf('The file %s has been uploaded', $upload->getBasename())
            : 'There was an error uploading the file, please try again!'
            ;
    } else {
        $message = "can't be saved!";
    }

    return $message;
}

新しいタイプUploadFileは、配列からの1つのファイルを表します$_FILE。これは、ファイルのアップロードで実行される基本データとメソッドをラップするクラスです。次にいくつかのサンプルコードを示します。

class UploadFile
{
    protected $file;

    private $filename;

    public function __construct(array $file)
    {
        $this->file = $file;
    }

    public function hasError()
    {
        return $this->getProperty('error') !== UPLOAD_ERR_OK;
    }

    public function getError()
    {
        return $this->getProperty('error');
    }

    public function getBasename()
    {
        return basename($this->getProperty('name'));
    }

    public function getFilename()
    {
        return $this->filename;
    }

    /**
     * @param $newName
     * @return NULL|SplFileInfo
     * @throws BadMethodCallException
     */
    public function moveTo($newName)
    {
        $newName  = (string)$newName;
        $filename = $this->getFilename();

        if ($filename !== NULL) {
            throw new BadMethodCallException(sprintf('Upload file (%s) has been already moved (%s).', $this->getBasename(), $filename));
        }

        $tmpName = $this->getProperty('tmp_name');

        if (move_uploaded_file($tmpName, $newName)) {
            $this->filename = realpath($newName);
        }

        return $this->getFileInfo();
    }

    /**
     * @return SplFileInfo|NULL
     */
    public function getFileInfo()
    {
        $filename = $this->getFilename();

        if ($filename !== NULL) {
            return new SplFileInfo($filename);
        }
    }

    protected function getProperty($name, $default = NULL)
    {
        if (isset($this->file[$name])) {
            return $this->file[$name];
        }

        return $default;
    }
}

自由に使用してください。配列の構造とPHPアップロードエラーコード(重要)を文書化したPHPマニュアルのファイルアップロードに関する文書も参照してSplFileInfoください。$_FILE

于 2012-09-17T21:27:26.067 に答える