由于 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-&gt;load-&gt;library('upload',$config); 行根本没有加载库.. 检查您的 config.php $config['log_threshold'] 并将值转换为 2 如果不是已经 - 之后查看@您的application/logs 文件夹并打开当天的日志 - 仔细查看,也许你会发现一些提示...... 行号 134 $this->upload->do_upload('userfile'); -Mr.ED 谢谢大家。我的问题还没解决, $this-&gt;upload-&gt;do_upload('userfile'); 更改为$this-&gt;upload-&gt;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 无法正常工作,如何撤消此操作?

从PHP中的纬度和经度获取位置

MySQL:PHP:由于警告,无法从表中获取数据

使用 register_shutdown_function() 处理 PHP 中的致命错误

PHP 中的 ::class 是啥?

类中的php回调函数