Codeigniter上传路径无效问题求助:附模型上传函数代码
排查CodeIgniter "upload path does not appear to be valid" 错误
嘿,我来帮你捋捋这个上传路径无效的问题!结合你给出的代码片段,下面是最常见的几个排查方向和解决办法:
1. 路径本身不存在或拼写错误
首先要确认传入的$uploadpath对应的目录是否真的存在——很多时候都是路径拼写错了,或者相对路径的基准搞混了。
- 你可以在函数开头先打印出实际路径看看:
var_dump($uploadpath); exit;,确认是不是你预期的目录。 - 如果是相对路径,CodeIgniter的基准是index.php所在的根目录,不是模型文件所在的目录哦!比如你想存到根目录下的
uploads文件夹,应该传'./uploads/'而不是'models/uploads/'。
2. 目录权限不足
服务器需要有写入该目录的权限,否则就算路径存在也会报错。
- 一般把上传目录的权限设置为
755(安全且足够),如果还是不行可以临时设为777测试(测试完记得改回755,避免安全风险)。 - 你可以用命令行设置:
chmod -R 755 /path/to/your/upload/folder
3. 路径末尾缺少斜杠
CodeIgniter的上传配置要求路径末尾必须有斜杠,否则会识别为无效路径。
- 你可以在函数里自动补全斜杠,避免手动传参遗漏:
$uploadpath = rtrim($uploadpath, '/') . '/';
4. 路径不存在时自动创建
如果你的业务需要动态生成上传目录,可以在函数里先检查目录是否存在,不存在就创建:
if (!is_dir($uploadpath)) { // 第三个参数true表示递归创建多级目录 mkdir($uploadpath, 0755, true); }
优化后的示例代码
结合上面的检查,你可以修改函数如下:
function uploadsinglepicture($uploadpath){ // 补全末尾斜杠 $uploadpath = rtrim($uploadpath, '/') . '/'; // 检查并创建目录 if (!is_dir($uploadpath)) { mkdir($uploadpath, 0755, true); } $config['upload_path'] = $uploadpath; $config['allowed_types'] = 'gif|jpg|png'; $config['max_size'] = ''; $config['max_width'] = ''; $config['max_height'] = ''; $this->load->library('upload', $config); if ( ! $this->upload->do_upload('userfile')) { $error = array('error' => $this->upload->display_errors()); print_r($error); // 你的后续代码,比如处理空id的情况 if($this->input->post('id') == ''){ // 这里补全你的逻辑 } } else { // 上传成功后的处理,比如获取上传文件信息 $upload_data = $this->upload->data(); // 比如把文件名赋值给insertion $insertion['image'] = $upload_data['file_name']; // 后续插入数据库等操作 } }
内容的提问来源于stack exchange,提问作者Sikander
相关产品推荐
相关产品推荐

