通过
PHP;">
UploadFile::getInstance($model,$attribute);
UploadFile::getInstances($model,$attribute);
UploadFile::getInstanceByName($name);
UploadFile::getInstancesByName($name);
把表单上传的文件赋值到 UploadedFile中的 private static $_files 中
/**
- Returns all uploaded files for the given model attribute.
- @param \yii\base\Model $model the data model
- @param string $attribute the attribute name. The attribute name may contain array indexes
- for tabular file uploading,e.g. '[1]file'.
- @return UploadedFile[] array of UploadedFile objects.
- Empty array is returned if no available file was found for the given attribute.
*/
public static function getInstances($model,$attribute);
return static::getInstancesByName($name);
}
/**
- Returns an uploaded file according to the given file input name.
- The name can be a plain string or a string like an array element (e.g. 'Post[imageFile]',or 'Post[0][imageFile]').
- @param string $name the name of the file input field.
- @return UploadedFile the instance of the uploaded file.
- Null is returned if no file is uploaded for the specified name.
*/
public static function getInstanceByName($name)
{
$files = self::loadFiles();
return isset($files[$name]) ? $files[$name] : null;
}
/**
- Returns an array of uploaded files corresponding to the specified file input name.
- This is mainly used when multiple files were uploaded and saved as 'files[0]','files[1]',* 'files[n]'...,and you can retrieve them all by passing 'files' as the name.
- @param string $name the name of the array of files
- @return UploadedFile[] the array of UploadedFile objects. Empty array is returned
- if no adequate upload was found. Please note that this array will contain
- all files from all sub-arrays regardless how deeply nested they are.
*/
public static function getInstancesByName($name)
{
$files = self::loadFiles();
if (isset($files[$name])) {
return [$files[$name]];
}
$results = [];
foreach ($files as $key => $file) {
if (strpos($key,"{$name}[") === 0) {
$results[] = $file;
}
}
return $results;
}
loadFiles()方法,把$_FILES中的键值作为参数传递到loadFilesRecursive($key,$names,$tempNames,$types,$sizes,$errors) 中
$info) {
self::loadFilesRecursive($class,$info['name'],$info['tmp_name'],$info['type'],$info['size'],$info['error']);
}
}
}
return self::$_files;
}
loadFilesRecursive方法,通过递归把$_FILES中的内容保存到 self::$_files 中
$name) {
self::loadFilesRecursive($key . '[' . $i . ']',$name,$tempNames[$i],$types[$i],$sizes[$i],$errors[$i]);
}
} elseif ($errors !== UPLOAD_ERR_NO_FILE) {
self::$_files[$key] = new static([
'name' => $names,'tempName' => $tempNames,'type' => $types,'size' => $sizes,'error' => $errors,]);
}
}
实例:
html
$patch = $path . '/' . date("YmdHis") . '_';
$tmp = UploadedFile::getInstanceByName('head_pic');
if ($tmp) {
$patch = $path . '/' . date("YmdHis") . '_';
$tmp->saveAs($patch . '1.jpg');
$returnPath .= $patch;
}
return $returnPath;
}
打印dump($tmp,$_FILES,$tmp->getExtension());
对应的 UploadedFile
private static $_files;
原文链接:https://www.f2er.com/php/17945.html/**
- String output.
- This is PHP magic method that returns string representation of an object.
- The implementation here returns the uploaded file's name.
- @return string the string representation of the object
*/
public function __toString()
{
return $this->name;
}
/**
- Returns an uploaded file for the given model attribute.
- The file should be uploaded using [[\yii\widgets\ActiveField::fileInput()]].
- @param \yii\base\Model $model the data model
- @param string $attribute the attribute name. The attribute name may contain array indexes.
- For example,or 'Post[0][imageFile]').
- @param string $name the name of the file input field.
- @return null|UploadedFile the instance of the uploaded file.
- Null is returned if no file is uploaded for the specified name.
*/
public static function getInstanceByName($name)
{
$files = self::loadFiles();
return isset($files[$name]) ? new static($files[$name]) : null;
}
/**
- Returns an array of uploaded files corresponding to the specified file input name.
- This is mainly used when multiple files were uploaded and saved as 'files[0]',and you can retrieve them all by passing 'files' as the name.
- @param string $name the name of the array of files
- @return UploadedFile[] the array of UploadedFile objects. Empty array is returned
- if no adequate upload was found. Please note that this array will contain
- all files from all sub-arrays regardless how deeply nested they are.
*/
public static function getInstancesByName($name)
{
$files = self::loadFiles();
if (isset($files[$name])) {
return [new static($files[$name])];
}
$results = [];
foreach ($files as $key => $file) {
if (strpos($key,"{$name}[") === 0) {
$results[] = new static($file);
}
}
return $results;
}
/**
- Cleans up the loaded UploadedFile instances.
- This method is mainly used by test scripts to set up a fixture.
*/
//清空self::$_files
public static function reset()
{
self::$_files = null;
}
/**
- Saves the uploaded file.
- Note that this method uses PHP's move_uploaded_file() method. If the target file
$file
- already exists,it will be overwritten.
- @param string $file the file path used to save the uploaded file
- @param boolean $deleteTempFile whether to delete the temporary file after saving.
- If true,you will not be able to save the uploaded file again in the current request.
- @return boolean true whether the file is saved successfully
- @see error
*/
//通过PHP的move_uploaded_file() 方法保存临时文件为目标文件
public function saveAs($file,$deleteTempFile = true)
{
//$this->error == UPLOAD_ERR_OK UPLOAD_ERR_OK 其值为 0,没有错误发生,文件上传成功。
if ($this->error == UPLOAD_ERR_OK) {
if ($deleteTempFile) {
//将上传的文件移动到新位置
return move_uploaded_file($this->tempName,$file);
} elseif (is_uploaded_file($this->tempName)) {//判断文件是否是通过 HTTP POST 上传的
return copy($this->tempName,$file);//copy — 拷贝文件
}
}
return false;
}
/**
- @return string original file base name
*/
//获取上传文件原始名称 "name" => "Chrysanthemum.jpg" "Chrysanthemum"
public function getBaseName()
{
// https://github.com/yiisoft/yii2/issues/11012
$pathInfo = pathinfo('_' . $this->name,PATHINFO_FILENAME);
return mb_substr($pathInfo,1,mb_strlen($pathInfo,'8bit'),'8bit');
}
/**
- @return string file extension
*/
//获取上传文件扩展名称 "name" => "Chrysanthemum.jpg" "jpg"
public function getExtension()
{
return strtolower(pathinfo($this->name,PATHINFO_EXTENSION));
}
/**
- @return boolean whether there is an error with the uploaded file.
- Check [[error]] for detailed error code information.
*/
//上传文件是否出现错误
public function getHasError()
{
return $this->error != UPLOAD_ERR_OK;
}
/**
- Creates UploadedFile instances from $_FILE.
- @return array the UploadedFile instances
*/
private static function loadFiles()
{
if (self::$_files === null) {
self::$_files = [];
if (isset($_FILES) && is_array($_FILES)) {
foreach ($_FILES as $class => $info) {
self::loadFilesRecursive($class,$info['error']);
}
}
}
return self::$_files;
}
/**
- Creates UploadedFile instances from $_FILE recursively.
- @param string $key key for identifying uploaded file: class name and sub-array indexes
- @param mixed $names file names provided by PHP
- @param mixed $tempNames temporary file names provided by PHP
- @param mixed $types file types provided by PHP
- @param mixed $sizes file sizes provided by PHP
- @param mixed $errors uploading issues provided by PHP
*/
private static function loadFilesRecursive($key,$errors[$i]);
}
} elseif ((int)$errors !== UPLOAD_ERR_NO_FILE) {
self::$_files[$key] = [
'name' => $names,];
}
}
}