由于 PHP 中的“调用非对象上的成员函数 X”,我无法上传图像
Posted
技术标签:
【中文标题】由于 PHP 中的“调用非对象上的成员函数 X”,我无法上传图像【英文标题】:I can't upload image due to "Call to a member function X on a non-object" in PHP 【发布时间】:2018-09-16 07:16:29 【问题描述】:遇到 php 错误 严重性:通知
消息:未定义的属性:Ncatering::$upload
文件名:controllers/Ncatering.php
行号:134
回溯:
文件:C:\xampp\htdocs\National\admin\application\controllers\Ncatering.php 线路:134 函数:_error_handler
文件:C:\xampp\htdocs\National\admin\index.php 线路:315 函数:require_once
致命错误:在第 134 行的 C:\xampp\htdocs\National\admin\application\controllers\Ncatering.php 中的非对象上调用成员函数 do_upload() 遇到 PHP 错误 严重性:错误
消息:在非对象上调用成员函数 do_upload()
文件名:controllers/Ncatering.php
行号:134
回溯:
这是我的控制器:
function add_gallery()
//$this->load->model('Mcatering');
$config['upload_path'] = './upload/';
$config['allowed_types'] = 'gif|jpg|png|mp3';
$this->load->library('upload',$config);
$this->upload->do_upload('userfile');
$data = array('upload_data' => $this->upload->data());
$img = $this->upload->data();
$imgname = $img['file_name'];
$sss=$this->input->post('sss');
$data=array('image'=>$imgname,'sss'=>$sss);
//$data=array('sss'=>$sss);
$this->Mcatering->insertgallery($data);
redirect('Ncatering/gallery');
这是我上传图片的表单:
<?php echo form_open_multipart('Ncatering/add_gallery/'); ?>
<div class="box-body">
<div class="form-group">
<label for="exampleInputFile">Upload Image</label>
<input type="file" name="userfile" accept="image/jpeg"
id="exampleInputFile">
</div>
</div>
<div class="box-footer">
<button type="submit" class="btn" style="background-color:#FC0;">Submit</button>
</div>
<?php echo form_close(); ?>
【问题讨论】:
告诉我们第 134 行在哪里 这很奇怪 - 看起来$this->load->library('upload',$config);
行根本没有加载库.. 检查您的 config.php $config['log_threshold']
并将值转换为 2
如果不是已经 - 之后查看@您的application/logs
文件夹并打开当天的日志 - 仔细查看,也许你会发现一些提示......
行号 134 $this->upload->do_upload('userfile'); -Mr.ED
谢谢大家。我的问题还没解决,
将$this->upload->do_upload('userfile');
更改为$this->upload->do_upload();
【参考方案1】:
您的代码似乎没有问题。你可以试试核心php函数move_uploaded_file()
上传你的文件
$target_dir = "upload/";
$imgName1 = time().basename($_FILES["userfile"]["name"]);
$imgName= preg_replace('/\s+/', '', $imgName1);
$target_file = $target_dir . $imgName;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
move_uploaded_file($_FILES["userfile"]["tmp_name"], $target_file);
您的文件名将存储在变量$imgName
【讨论】:
我使用这些代码在 3 个网站上传图片。 Bt问题只针对这项工作。我不知道为什么会这样。【参考方案2】:对我来说很好用...以下功能有助于图片上传...
在视图文件中
<?php
$attributes = array('class' => 'form-horizontal', 'id' => 'event_form');
echo form_open_multipart('events/create', $attributes);
?>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="inputEmail3" class="col-sm-4 control-label">Upload Images</label>
<div class="col-sm-8">
<input type="file" name="events_file" id="gallery-photo-add">
<?php echo form_error('events_file', '<div class="error">', '</div>'); ?>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-offset-3" style="margin-top: 10px;">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
<?php form_close(); ?>
在控制器中
<?php
public function create()
$web = array();
$web['title'] = 'Events List create';
$web['content'] = 'web/events';
$web['isNewRecord'] = 1;
if (empty($_FILES['events_file']['name']))
$this->form_validation->set_rules('events_file', 'Images', 'required');
if ($this->form_validation->run() == FALSE)
$this->load->view('web_template',$web);
else
$files = $_FILES;
$count = count($_FILES['events_file']['name']);
$_FILES['events_file']['name']= time().'_'.$files['events_file']['name'];
$_FILES['events_file']['type']= $files['events_file']['type'];
$_FILES['events_file']['tmp_name']= $files['events_file']['tmp_name'];
$_FILES['events_file']['error']= $files['events_file']['error'];
$_FILES['events_file']['size']= $files['events_file']['size'];
$uploadPath = 'uploads/events/';
$config['upload_path'] = $uploadPath;
$config['allowed_types'] = 'gif|jpg|png';
$this->load->library('upload', $config);
$this->upload->initialize($config);
if($this->upload->do_upload('events_file'))
$fileData = $this->upload->data();
$uploadData['event_id'] = $insert_id;
$uploadData['image'] = $fileData['file_name'];
if(!empty($uploadData))
$this->db->insert('events_image',$uploadData);
【讨论】:
我不认为你可以通过发布一些随机代码 sn-p 来帮助操作...你甚至读过他的问题吗?以上是关于由于 PHP 中的“调用非对象上的成员函数 X”,我无法上传图像的主要内容,如果未能解决你的问题,请参考以下文章
由于我删除了 phpMyadmin 中的表,Php artisan 无法正常工作,如何撤消此操作?