引言
move_uploaded_file()
函数是原生php开发中大家很熟悉的函数,就是把表单提交的文件移动到指定目录
注意:只支持post提交的信息,如果文件不是post表单提交的那么该函数返回false
问题
有些时候,我们会借助临时目录进行一些中转操作
//生成一个临时文件
//sys_get_temp_dir() 得到临时目录路径 'aaa' 文件名称前缀
$temp_file = tempnam(sys_get_temp_dir(), 'aaa');

它的大小是0
然后我们一般会把一些请求的资源(比如curl请求一个在线的图片地址等)给放写进去(为什么不用file_put_contents呢?因为这个性能比较好)
//写入临时本地
$fp = fopen($temp_file, 'w');
fwrite($fp, $res);
fclose($fp);
然后进行一系列的文件检查合法性(比如文件大小啊、mime类型啊),如果验证合法就进行文件移动,如果不合法就直接使用
unlink($temp_file)
删除,但是我们前面说过
move_uploaded_file()
是不支持非表单提交的文件移动的。
所以我们可以直接用
copy()
函数进行移动文件,这个函数和
move_uploaded_file()
一样如果目标文件已经存在会直接替换
copy($temp_file, $path);
但是这样就会导致临时文件还在原来的目录,所以这个时候可以等待文件复制完毕后使用
unlink($temp_file)
函数把临时目录的文件给删除,那有没有函数可以稍微简化这个步骤呢?
答案是肯定的。可以使用
rename()
函数来代替copy+unlink的步骤。
$res = rename($temp_file, 'D:/233.jpg');
而且这样比copy+unlink的性能会好很多。