PHP上传PDF至多文件夹失败:上级路径文件夹未收到文件求助
PHP多文件夹PDF上传失败排查方案
问题重现
代码可成功将PDF上传至uploadfile文件夹,但无法同步到../t1/admin/uploadfile,原代码如下:
$uploaddir="uploadfile"; $uploaddir1="../t1/admin/uploadfile"; $type=$_FILES["file"]["type"]; $path=$uploaddir.'/'. $_FILES['file']['name']; $path1=$uploaddir1.'/'. $_FILES['file']['name']; move_uploaded_file($_FILES['file']['tmp_name'],$path); copy($path, $path1);
解决方案
1. 检查目标文件夹权限
确保../t1/admin/uploadfile文件夹存在,且PHP运行进程(如www-data、apache)拥有写入权限。可通过命令行设置:
chmod -R 755 ../t1/admin/uploadfile chown -R www-data:www-data ../t1/admin/uploadfile
2. 验证路径正确性
相对路径可能因脚本所在目录解析错误,建议用绝对路径确认:
// 输出目标文件夹的绝对路径 echo realpath($uploaddir1);
若输出为空或不符合预期,修正为绝对路径,例如:
$uploaddir1 = $_SERVER['DOCUMENT_ROOT'] . '/t1/admin/uploadfile';
3. 添加错误检测定位问题
在复制操作后加入错误判断,直接获取具体失败原因:
if (!move_uploaded_file($_FILES['file']['tmp_name'], $path)) { die('主文件夹上传失败:' . error_get_last()['message']); } if (!copy($path, $path1)) { die('目标文件夹复制失败:' . error_get_last()['message']); }
4. 优化上传逻辑(直接复用临时文件)
无需先移动到主文件夹,直接从临时文件同步到两个目标路径,减少中间步骤:
$tmp_file = $_FILES['file']['tmp_name']; $filename = $_FILES['file']['name']; $path = 'uploadfile/' . $filename; $path1 = '../t1/admin/uploadfile/' . $filename; // 同步上传至两个文件夹 move_uploaded_file($tmp_file, $path); move_uploaded_file($tmp_file, $path1);
注:临时文件会在脚本执行结束后自动删除,需确保两次操作在同一次请求内完成。
内容的提问来源于stack exchange,提问作者admin intis
相关产品推荐
相关产品推荐

