2021/01/15 php上传文件,文件上传成功,移动文件失败
2021/01/15
代码如下:
if ($a == 'saveImg') { $billno = checkInput($_GET['id']); // 当前上传图片的用户 $type = checkInput($_GET['type']); // 上传类型 if (!$id) { exit('12121201'); } if (!$type) { exit('2313121021212'); } else { } // 当前登录用户唯一文件存储路径 $path = "card/file/" . $id; $dirname = $path; if (!is_dir($dirname)) { mkdir($dirname, 0777, true); } if ($type == 'image') { $suffix = '.jpg'; // 图片后缀 } else if ($type == 'video') { $suffix = '.mp4'; // 视频后缀 // $cover = '.jpg'; // 视频封面后缀 } $tmp = $_FILES['file']['tmp_name']; // 获取文件 // tmp_name 保存的是文件上传到服务器临时文件夹之后的文件名 // 🔺注意注意!批量上传文件时文件名必须不一样,必须带入随机字符👇👇 $name = date('YmdHis', time()) . '_' . mt_rand(1000, 9999); // 文件名称 $serverAssetsUrl = $serverConfig->getAssetsUrl2(); $fileName = $name . $suffix; // 文件名 $groupname = $dirname . "/"; // 创建当前登录用户唯一文件分组存储路径 mkdir($groupname, 0777, true); $filePath = $groupname . $fileName; // 文件路径 $fileSource = $serverAssetsUrl . $filePath; // 文件http地址 // echo("文件上传状态".$_FILES['file']['error']."=临时文件名=".$_FILES['file']['name']."=临时文件路径=".$_FILES['file']['tmp_name']."=相对地址=".$filePath."=绝对地址=".$serverAssetsUrl."=完整地址=".$serverAssetsUrl.$filePath); if (move_uploaded_file($tmp, $filePath)) { exit($fileSource); } else { exit("81626845262320"); } }
刚开始时,我遇到的问题是:
1、前台调用接口获取缓存文件,获取成功后在返回给后台,后台再把文件保存在服务器,保存好之后再返回保存链接:
在确保php.ini文件中修改了默认上传文件大小限制以及传输(反应)时长等配置后,进行测试:发现线下测试没问题,可以返回真实的保存在服务器的文件路径,但线上测试结果为后台获取不到前台发送过来的缓存文件;
2、然后我就去上网查资料,发现有个细节,就是php缓存文件时,当php程序一结束,缓存文件就会被立即销毁:
所以按理来讲我是打印不出缓存文件的,这是我只好找别的办法去判断缓存文件有没有上传成功,这时,请注意,我们要判断的是:
前台发送过来的缓存文件能否成功上传到php服务器;
如果上传失败,我们就去检查前台,成功了执行下一步👇👇
如果成功上传,(以上面的代码为例子)即$tmp是有值的,我们就去检查指定的文件夹是否生成;
我打印$_FILES['file']['error'],即var_dump($_FILES['file']['error']),返回0,代表成功上传(具体$_FILES['file']['error']返回值可上网百度);
那么缓存文件存在,那他就的要执行下一步,就是创建我指定的文件夹;
我当时发现指定的文件夹,即$dirname没有在指定的位置创建,那么问题就很明显了;
文件夹没有被创建,一看权限,755;
问题就出在这里,没有足够的权限去创建文件夹,导致move_uploaded_file移动缓存文件失败。
解决方法:修改要创建文件夹的父级文件夹权限为777(以上面为例,就是file文件夹需要777权限)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧