thinkphp3.2 uploadify上传 guid在一次上传中只调用一次 如何实现? 是指这个吗?$date['pictureid'] =$this->guid();// token guid你在循环里执行,自然每次不一样你把它放到循环前面去,不就只执行一次了吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这样也是不行的 是不是本身使用的upload类的问题呢 ?这个类超过1W字符的限制了。。熟悉TP的大神 如果看到 是不是这里的处理方式的问题呢 放到循环外面不行的啊ThinkPHP\Library\Think\Upload.class.php 这样也是不行的 是不是本身使用的upload类的问题呢 ?这个类超过1W字符的限制了。。熟悉TP的大神 如果看到 是不是这里的处理方式的问题呢 放到循环外面不行的啊ThinkPHP\Library\Think\Upload.class.php在放个 $upload=new \Think\Upload($config); $files_upload=$upload->upload();这两个在upload类里执行的方法<?phpnamespace Think;class Upload { /** * 默认上传配置 * @var array */ private $config = array( 'mimes' => array(), //允许上传的文件MiMe类型 'maxSize' => 0, //上传的文件大小限制 (0-不做限制) 'exts' => array(), //允许上传的文件后缀 'autoSub' => true, //自动子目录保存文件 'subName' => array('date', 'Y-m-d'), //子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组 'rootPath' => './', //保存根路径 'savePath' => '', //保存路径 'saveName' => array('uniqid', ''), //上传文件命名规则,[0]-函数名,[1]-参数,多个参数使用数组 'saveExt' => '', //文件保存后缀,空则使用原后缀 'replace' => true, //存在同名是否覆盖 'hash' => true, //是否生成hash编码 'callback' => false, //检测文件是否存在回调,如果存在返回文件信息数组 'driver' => '', // 文件上传驱动 'driverConfig' => array(), // 上传驱动配置 ); /** * 上传错误信息 * @var string */ private $error = ''; //上传错误信息 /** * 上传驱动实例 * @var Object */ private $uploader; /** * 构造方法,用于构造上传实例 * @param array $config 配置 * @param string $driver 要使用的上传驱动 LOCAL-本地上传驱动,FTP-FTP上传驱动 */ public function __construct($config = array(), $driver = '', $driverConfig = null){ /* 获取配置 */ $this->config = array_merge($this->config, $config); /* 设置上传驱动 */ $this->setDriver($driver, $driverConfig); /* 调整配置,把字符串配置参数转换为数组 */ if(!empty($this->config['mimes'])){ if(is_string($this->mimes)) { $this->config['mimes'] = explode(',', $this->mimes); } $this->config['mimes'] = array_map('strtolower', $this->mimes); } if(!empty($this->config['exts'])){ if (is_string($this->exts)){ $this->config['exts'] = explode(',', $this->exts); } $this->config['exts'] = array_map('strtolower', $this->exts); } } /** * 上传文件 * @param 文件信息数组 $files ,通常是 $_FILES数组 */ public function upload($files='') { if('' === $files){ $files = $_FILES; } if(empty($files)){ $this->error = '没有上传的文件!'; return false; } /* 检测上传根目录 */ if(!$this->uploader->checkRootPath($this->rootPath)){ $this->error = $this->uploader->getError(); return false; } /* 检查上传目录 */ if(!$this->uploader->checkSavePath($this->savePath)){ $this->error = $this->uploader->getError(); return false; } /* 逐个检测并上传文件 */ $info = array(); if(function_exists('finfo_open')){ $finfo = finfo_open ( FILEINFO_MIME_TYPE ); } // 对上传文件数组信息处理 $files = $this->dealFiles($files); foreach ($files as $key => $file) { if(!isset($file['key'])) $file['key'] = $key; /* 通过扩展获取文件类型,可解决FLASH上传$FILES数组返回文件类型错误的问题 */ if(isset($finfo)){ $file['type'] = finfo_file ( $finfo , $file['tmp_name'] ); } /* 获取上传文件后缀,允许上传无后缀文件 */ $file['ext'] = pathinfo($file['name'], PATHINFO_EXTENSION); /* 文件上传检测 */ if (!$this->check($file)){ continue; } /* 获取文件hash */ if($this->hash){ $file['md5'] = md5_file($file['tmp_name']); $file['sha1'] = sha1_file($file['tmp_name']); } /* 调用回调函数检测文件是否存在 */ $data = call_user_func($this->callback, $file); if( $this->callback && $data ){ if ( file_exists('.'.$data['path']) ) { $info[$key] = $data; continue; }elseif($this->removeTrash){ call_user_func($this->removeTrash,$data);//删除垃圾据 } } /* 生成保存文件名 */ $savename = $this->getSaveName($file); if(false == $savename){ continue; } else { $file['savename'] = $savename; } /* 检测并创建子目录 */ $subpath = $this->getSubPath($file['name']); if(false === $subpath){ continue; } else { $file['savepath'] = $this->savePath . $subpath; } /* 对图像文件进行严格检测 */ $ext = strtolower($file['ext']); if(in_array($ext, array('gif','jpg','jpeg','bmp','png','swf'))) { $imginfo = getimagesize($file['tmp_name']); if(empty($imginfo) || ($ext == 'gif' && empty($imginfo['bits']))){ $this->error = '非法图像文件!'; continue; } } /* 保存文件 并记录保存成功的文件 */ if ($this->uploader->save($file,$this->replace)) { unset($file['error'], $file['tmp_name']); $info[$key] = $file; } else { $this->error = $this->uploader->getError(); } } if(isset($finfo)){ finfo_close($finfo); } return empty($info) ? false : $info; } /** * 转换上传文件数组变量为正确的方式 * @access private * @param array $files 上传的文件变量 * @return array */ private function dealFiles($files) { $fileArray = array(); $n = 0; foreach ($files as $key=>$file){ if(is_array($file['name'])) { $keys = array_keys($file); $count = count($file['name']); for ($i=0; $i<$count; $i++) { $fileArray[$n]['key'] = $key; foreach ($keys as $_key){ $fileArray[$n][$_key] = $file[$_key][$i]; } $n++; } }else{ $fileArray = $files; break; } } return $fileArray; }是不是在 这里的问题呢? /* 逐个检测并上传文件 */ $info = array(); if(function_exists('finfo_open')){ $finfo = finfo_open ( FILEINFO_MIME_TYPE ); } // 对上传文件数组信息处理 $files = $this->dealFiles($files); foreach ($files as $key => $file) { if(!isset($file['key'])) $file['key'] = $key; /* 通过扩展获取文件类型,可解决FLASH上传$FILES数组返回文件类型错误的问题 */ if(isset($finfo)){ $file['type'] = finfo_file ( $finfo , $file['tmp_name'] ); } php翻页失效 点翻页搜不出东西来 php网页可以制作安全控件的吗??? 求MYSQL优化方案 请问以下三种检查权限的方式效率及资源占用情况如何? 做了个东东,想买个域名个空间,各位兄弟知道哪里去买好些. PHP+MYSQL+APACHE 的集成开发环境那里有下? 问一个菜鸟问题 关于php连接mysql数据库问题! 关于上传图片出现马赛克现象!!急呀!! 如何更大mysql的并发数 急需 广告轮播系统源代码 为啥下面这个函数中的值是对象呢 new ReflectionClass( ) 一般用在什么场景下呢
这样也是不行的 是不是本身使用的upload类的问题呢 ?这个类超过1W字符的限制了。。
熟悉TP的大神 如果看到 是不是这里的处理方式的问题呢 放到循环外面不行的啊
ThinkPHP\Library\Think\Upload.class.php
这样也是不行的 是不是本身使用的upload类的问题呢 ?这个类超过1W字符的限制了。。
熟悉TP的大神 如果看到 是不是这里的处理方式的问题呢 放到循环外面不行的啊
ThinkPHP\Library\Think\Upload.class.php
在放个
$upload=new \Think\Upload($config);
$files_upload=$upload->upload();
这两个在upload类里执行的方法
<?php
namespace Think;
class Upload {
/**
* 默认上传配置
* @var array
*/
private $config = array(
'mimes' => array(), //允许上传的文件MiMe类型
'maxSize' => 0, //上传的文件大小限制 (0-不做限制)
'exts' => array(), //允许上传的文件后缀
'autoSub' => true, //自动子目录保存文件
'subName' => array('date', 'Y-m-d'), //子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组
'rootPath' => './', //保存根路径
'savePath' => '', //保存路径
'saveName' => array('uniqid', ''), //上传文件命名规则,[0]-函数名,[1]-参数,多个参数使用数组
'saveExt' => '', //文件保存后缀,空则使用原后缀
'replace' => true, //存在同名是否覆盖
'hash' => true, //是否生成hash编码
'callback' => false, //检测文件是否存在回调,如果存在返回文件信息数组
'driver' => '', // 文件上传驱动
'driverConfig' => array(), // 上传驱动配置
); /**
* 上传错误信息
* @var string
*/
private $error = ''; //上传错误信息 /**
* 上传驱动实例
* @var Object
*/
private $uploader; /**
* 构造方法,用于构造上传实例
* @param array $config 配置
* @param string $driver 要使用的上传驱动 LOCAL-本地上传驱动,FTP-FTP上传驱动
*/
public function __construct($config = array(), $driver = '', $driverConfig = null){
/* 获取配置 */
$this->config = array_merge($this->config, $config); /* 设置上传驱动 */
$this->setDriver($driver, $driverConfig); /* 调整配置,把字符串配置参数转换为数组 */
if(!empty($this->config['mimes'])){
if(is_string($this->mimes)) {
$this->config['mimes'] = explode(',', $this->mimes);
}
$this->config['mimes'] = array_map('strtolower', $this->mimes);
}
if(!empty($this->config['exts'])){
if (is_string($this->exts)){
$this->config['exts'] = explode(',', $this->exts);
}
$this->config['exts'] = array_map('strtolower', $this->exts);
}
}
/**
* 上传文件
* @param 文件信息数组 $files ,通常是 $_FILES数组
*/
public function upload($files='') {
if('' === $files){
$files = $_FILES;
}
if(empty($files)){
$this->error = '没有上传的文件!';
return false;
} /* 检测上传根目录 */
if(!$this->uploader->checkRootPath($this->rootPath)){
$this->error = $this->uploader->getError();
return false;
} /* 检查上传目录 */
if(!$this->uploader->checkSavePath($this->savePath)){
$this->error = $this->uploader->getError();
return false;
} /* 逐个检测并上传文件 */
$info = array();
if(function_exists('finfo_open')){
$finfo = finfo_open ( FILEINFO_MIME_TYPE );
}
// 对上传文件数组信息处理
$files = $this->dealFiles($files);
foreach ($files as $key => $file) {
if(!isset($file['key'])) $file['key'] = $key;
/* 通过扩展获取文件类型,可解决FLASH上传$FILES数组返回文件类型错误的问题 */
if(isset($finfo)){
$file['type'] = finfo_file ( $finfo , $file['tmp_name'] );
} /* 获取上传文件后缀,允许上传无后缀文件 */
$file['ext'] = pathinfo($file['name'], PATHINFO_EXTENSION); /* 文件上传检测 */
if (!$this->check($file)){
continue;
} /* 获取文件hash */
if($this->hash){
$file['md5'] = md5_file($file['tmp_name']);
$file['sha1'] = sha1_file($file['tmp_name']);
} /* 调用回调函数检测文件是否存在 */
$data = call_user_func($this->callback, $file);
if( $this->callback && $data ){
if ( file_exists('.'.$data['path']) ) {
$info[$key] = $data;
continue;
}elseif($this->removeTrash){
call_user_func($this->removeTrash,$data);//删除垃圾据
}
} /* 生成保存文件名 */
$savename = $this->getSaveName($file);
if(false == $savename){
continue;
} else {
$file['savename'] = $savename;
} /* 检测并创建子目录 */
$subpath = $this->getSubPath($file['name']);
if(false === $subpath){
continue;
} else {
$file['savepath'] = $this->savePath . $subpath;
} /* 对图像文件进行严格检测 */
$ext = strtolower($file['ext']);
if(in_array($ext, array('gif','jpg','jpeg','bmp','png','swf'))) {
$imginfo = getimagesize($file['tmp_name']);
if(empty($imginfo) || ($ext == 'gif' && empty($imginfo['bits']))){
$this->error = '非法图像文件!';
continue;
}
} /* 保存文件 并记录保存成功的文件 */
if ($this->uploader->save($file,$this->replace)) {
unset($file['error'], $file['tmp_name']);
$info[$key] = $file;
} else {
$this->error = $this->uploader->getError();
}
}
if(isset($finfo)){
finfo_close($finfo);
}
return empty($info) ? false : $info;
}
/**
* 转换上传文件数组变量为正确的方式
* @access private
* @param array $files 上传的文件变量
* @return array
*/
private function dealFiles($files) {
$fileArray = array();
$n = 0;
foreach ($files as $key=>$file){
if(is_array($file['name'])) {
$keys = array_keys($file);
$count = count($file['name']);
for ($i=0; $i<$count; $i++) {
$fileArray[$n]['key'] = $key;
foreach ($keys as $_key){
$fileArray[$n][$_key] = $file[$_key][$i];
}
$n++;
}
}else{
$fileArray = $files;
break;
}
}
return $fileArray;
}
是不是在 这里的问题呢?
/* 逐个检测并上传文件 */
$info = array();
if(function_exists('finfo_open')){
$finfo = finfo_open ( FILEINFO_MIME_TYPE );
}
// 对上传文件数组信息处理
$files = $this->dealFiles($files);
foreach ($files as $key => $file) {
if(!isset($file['key'])) $file['key'] = $key;
/* 通过扩展获取文件类型,可解决FLASH上传$FILES数组返回文件类型错误的问题 */
if(isset($finfo)){
$file['type'] = finfo_file ( $finfo , $file['tmp_name'] );
}