thinkphp 多文件上传,修改文件名后保存

u014378108 2016-05-10 04:30:27
我通过plupload接受到多个文件,我想修改文件名,然后保存。我想将文件名保存为1.png 2.png 3.png 。关键是怎么生成1,2,3并并赋给saveName。我试过将文件名保存为rand(1,100)是可以将所有文件保存,不会有重名错误。但是我在在common下定义了一个公共方法getNum(),如下:
function getNum(){
static $num=0;
//echo $num;
$num++;
file_put_contents("te.txt", rand(1, 100)."_&_",FILE_APPEND);
file_put_contents("tenum.txt", $num."__",FILE_APPEND);
//echo "<br>";
return $num;

控制器中:saveName=getNum();
可是getNum()下的num的值总是为1.并没有改变。te.txt下有多个不同的值(说明上传多少个文件,就调用多少次getNum())
为什么tenum.txt 下的几个值都是1?
我试过将static $num定义在控制器中,可是$num 的值还是不变
求解!!
...全文
1244 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2016-05-11
  • 打赏
  • 举报
回复
如果 上传4张图片,浏览器有4次ajax请求 的话那就是 4 次上传而不是 1 次上传 假定已经上传了 2 个文件,分别保存为 xxx_1.jpg、xxx_2.jpg 现在上传第 3 个文件,那么 $a = glob('*.jpg'); 将得到这样的数组 array( 0 => 'xxx_1.jpg', 1 => 'xxx_2.jpg', ) 显然 xxx_2.jpg 就是之前最后一次上传的文件,我们可以从他创建最新的文件名 $fn = preg_replace('/_(\d+)\./i', function($m) {return sprintf("_%d.", $m[1]+1); }, end($a));
u014378108 2016-05-11
  • 打赏
  • 举报
回复
引用
$num 这个静态变量只在本轮一次上传多个文件时可以递增 下次上传时又从 1 开始了
我找了一下static的生命周期,http://stackoverflow.com/questions/6699343/how-long-do-php-static-variables-persist他说the static variables survive until the script terminates after handling the request.,我是这么理解的,比如一次上传4张图片,浏览器有4次ajax请求,在每次ajax成功,static自增一次,当每个ajax的代码执行完后,他所用到的那个static的生命周期就结束了。所有每次执行ajax,static num并不是在上次的基础上执行的,而是从新执行。 我想知道如果像这样一次上传多张图片,如何将每次上传的图片编号,如上传4张图片,图片的名字为“时间戳_1.jpg",”时间戳_2.jpg"..."时间戳_4.jpg". 里面的1,2,3,4,如何生成,如果点击添加图片,图片名称为"时间戳_5",(时间戳是在 multipart_params:中作为参数,这几张图片的时间戳都一样)。 我刚开始使用plupload,对其不是很了解。恳请大侠们帮忙
xuzuning 2016-05-10
  • 打赏
  • 举报
回复
假定你的函数能被 TP 正确的执行到 那么你的函数存在这样的问题: static $num=0; $num++; $num 这个静态变量只在本轮一次上传多个文件时可以递增 下次上传时又从 1 开始了 你至少需要将 $num 保存到公共的地方,下次上传时取回。而不是简单的静态一下 其实你可以 用 glob 读取保存目录里的文件名($a = glob('lpload/*.png');),$a 数组的最后一个元素就是最后上传的文件名,取出主名加一作为新文件名

4,250

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧