你瞅啥呢

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权限)。

posted @   叶乘风  阅读(155)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示