【问题标题】:Why this function gives 500 server error为什么这个函数会给出 500 服务器错误
【发布时间】:2015-12-03 20:18:10
【问题描述】:

我在视图文件夹中有一个 company_add_product.php,这是代码:

<?php
                    echo form_open_multipart('home/company_do_upload/', 'onsubmit="FormSubmit(this);"');
                    $disabled = array(
                            'class'       => 'form-control',
                            'maxlength'   => '100',
                            'style'       => 'width:100%',
                            );
                        echo '<div class="form-group">';
                        echo '<div class="col-md-6">';
                        echo '<label for="name"> ناو: </label>';
                        echo form_input('name', set_value('name'), $disabled);
                        echo '</div>';


                    $class = array(
                      'class'       => 'form-control',
                      'maxlength'   => '100',
                      'style'       => 'width:100%',
                    );
                        echo '<div class="col-md-6">';
                        echo '<label for="manufacturer"> ناوی کۆمپانیای بەرهەمهێن: </label>';
                        echo '<input type="hidden" name="manufacturer" />';
                        echo '<select name="manufacturer_ddl" class="form-control" onchange="DropDownChanged(this);">';
                        foreach ($manufacturers_name as $row) {
                            echo '<option value="'.$row['manufacturers_id'].'">'.$row['manufacturers_name'].'</option>';
                        }
                        echo '<option value="">تیای نییە..</option>';
                        echo '</select>';
                        echo '<input type="text" name="manufacturer_txt" style="display: none;" class="form-control" placeholder="تکایە ناوی کۆمپانیاکە بنوسە" />';
                        echo '</div>';
                        echo '</div>';


                        echo '<div class="form-group">';
                        echo '<div class="col-md-6">';
                        echo '<label for="model"> مۆدێل: </label>';
                        echo form_input('model', set_value('model'), $class);
                        echo '</div>';

                        echo '<div class="col-md-6">';
                        echo '<label for="category"> جۆری شمەک: </label>';
                        echo '<select name="category" class="form-control">';
                        foreach ($categories_name as $row) {
                            echo '<option value="'.$row['categories_id'].'">'.$row['categories_name'].'</option>';
                        }
                        echo '</select>';
                        echo '</div>';
                        echo '</div>';


                        echo '<div class="form-group">';
                        echo '<div class="col-md-6">';
                        echo '<label for="price"> نرخی فرۆشتن: </label>';
                        echo form_input('price', set_value('price'), $class);
                        echo '</div>';

                        echo '<div class="col-md-6">';
                        echo '<label for="stock"> دانە بۆ فرۆشتن: </label>';
                        echo form_input('stock', set_value('stock'), $class);
                        echo '</div>';
                        echo '</div>';


                        echo '<div class="form-group">';
                        echo '<label for="used"> بەکارهاتووە: </label>';
                        echo form_checkbox('used', 'بەڵێ');
                        echo '</div>';


                        $textarea = array(
                        'class'  => 'form-control',
                        'rows'   => '5',
                        'cols'   => '10',
                        'style'  => 'width:48%',
                        'name'   => 'description',
                        );
                        echo '<div class="form-group">';
                        echo '<label for="description"> زانیاری زیاتر: </label>';
                        echo form_textarea($textarea, set_value('description'));
                        echo '</div>';



                        $img = array(
                          'class'       => 'form-control',
                          'maxlength'   => '100',
                          'style'       => 'width:25%',
                          'name'        => 'img',
                        );
                        echo '<div class="form-group">';
                        echo '<label for="img"> وێنەی سەرەکی: </label>';
                        echo form_upload('uploadedimages[0]','','multiple');
                        echo '</div>';

                        echo '<div class="form-group">';
                        echo '<label for="img"> وێنەی سەرەکی: </label>';
                        echo form_upload('uploadedimages[1]','','multiple');
                        echo '</div>';

                        echo '<div class="form-group">';
                        echo '<label for="img"> وێنەی سەرەکی: </label>';
                        echo form_upload('uploadedimages[2]','','multiple');
                        echo '</div>';


                        $submit_class  = array(
                            'class' => 'btn btn-primary',
                            );
                        echo '<input type="submit" value="upload" />';
                        echo form_close();
                        ?>

这是控制器中上传产品的函数:

function company_do_upload()
    {
        if($this->session->userdata('is_logged_in') || $this->session->userdata('admin_logged_in')){
        $user_id = $this->session->userdata('user_id');
        //if save button was clicked, get the data sent via post
        if ($this->input->server('REQUEST_METHOD') === 'POST')
        {
            if (is_numeric($this->input->post('manufacturer'))) {
            //form validation
            $this->form_validation->set_rules('name', 'ناوی کاڵا', 'required');
            $this->form_validation->set_rules('model', 'مۆدێل');
            $this->form_validation->set_rules('category', 'جۆری کاڵا', 'required');
            $this->form_validation->set_rules('price', 'نرخی کاڵا', 'required|numeric');
            $this->form_validation->set_rules('stock', 'دانە', 'required');
            $this->form_validation->set_rules('description', 'ڕونکردنەوە');
            $this->form_validation->set_error_delimiters('<div class="alert alert-error"><a class="close" data-dismiss="alert">×</a><strong>', '</strong></div>');
                //if the form has passed through the validation
                if ($this->form_validation->run())
                {

                    $config['upload_path'] = './uploads/products/temp';
                    $config['allowed_types'] = 'gif|jpg|png';
                    $config['max_size'] = '1200';
                    $config['max_width']  = '720';
                    $config['max_height']  = '576';
                    $config['multi']  = 'ignore';

                    $this->load->library('upload', $config);

                    if ( ! $this->upload->do_upload('uploadedimages'))
                    {
                        $error = array('error' => $this->upload->display_errors());

                        $data['featured_products']  = $this->products_model->get_featured_products(4, 1);
                        $data['featured_offers']    = $this->products_model->get_featured_products(4, 2);
                        $data['categories_name']    = $this->products_model->get_categories_name();
                        $error['main_content'] = 'pages/add_product';
                        $this->load->view('templates/template', $error);
                    }
                    else
                    {
                        $data = array('upload_data' => $this->upload->data());

                        if (!$data['upload_data'][1]['full_path']) {
                             $data['upload_data'][1]['full_path'] = NULL;
                        }

                        if (!$data['upload_data'][2]['full_path']) {
                             $data['upload_data'][2]['full_path'] = NULL;
                        }

                        $data_to_store = array(
                        'name'              => $this->input->post('name'),
                        'manufacturers_id'  => $this->input->post('manufacturer'),
                        'model'             => $this->input->post('model'),
                        'categories_id'     => $this->input->post('category'),
                        'sell_price'        => $this->input->post('price'),
                        'stock'             => $this->input->post('stock'),
                        'used'              => $this->input->post('used'),
                        'description'       => $this->input->post('description'),
                        'img'               => substr($config['upload_path'], 1).'/'.$data['upload_data'][0]['file_name'],
                        'img1'              => substr($config['upload_path'], 1).'/'.$data['upload_data'][1]['file_name'],
                        'img2'              => substr($config['upload_path'], 1).'/'.$data['upload_data'][2]['file_name'],
                        'product_date'      => date('Y-m-d H:i:s'),
                        'company_id'        => $this->session->userdata('company_id'),
                        'uploader_ip'       => $this->input->ip_address(),
                        );
                        //if the insert has returned true then we show the flash message
                        if($this->products_model->store_product($data_to_store) == TRUE){
                            $this->session->set_flashdata('flash_message', 'کاڵاەکەت بەسەرکەوتویی بارکرا، سوپاس بۆ بەشداربونت.');

                            $data['featured_products']  = $this->products_model->get_featured_products(4, 1);
                            $data['featured_offers']    = $this->products_model->get_featured_products(4, 2);
                            $data['categories_name']    = $this->products_model->get_categories_name();
                            $data['main_content'] = 'pages/add_product';
                            $this->load->view('templates/template', $data);
                        }else{
                            $this->session->set_flashdata('flash_message', 'not_uploaded');
                        }
                    }

                }//validation run
                else{
                    $data['featured_products']  = $this->products_model->get_featured_products(4, 1);
                    $data['featured_offers']    = $this->products_model->get_featured_products(4, 2);
                    $data['categories_name']    = $this->products_model->get_categories_name();
                    $data['main_content'] = 'pages/add_product';
                    $this->load->view('templates/template', $data);
                }

            }
            else{
                //form validation
            $this->form_validation->set_rules('name', 'ناوی کاڵا', 'required');
            $this->form_validation->set_rules('manufacturer', 'ناوی کۆمپانیای بەرهەمهێن', 'is_unique[manufacturers.manufacturers_name]');
            $this->form_validation->set_rules('model', 'مۆدێل');
            $this->form_validation->set_rules('category', 'جۆری کاڵا', 'required');
            $this->form_validation->set_rules('price', 'نرخی کاڵا', 'required|numeric');
            $this->form_validation->set_rules('stock', 'ذانە', 'required');
            $this->form_validation->set_rules('description', 'ڕونکردنەوە');
            $this->form_validation->set_error_delimiters('<div class="alert alert-error"><a class="close" data-dismiss="alert">×</a><strong>', '</strong></div>');
                //if the form has passed through the validation
                if ($this->form_validation->run())
                {

                    $config['upload_path'] = './uploads/products/temp';
                    $config['allowed_types'] = 'gif|jpg|png';
                    $config['max_size'] = '1200';
                    $config['max_width']  = '720';
                    $config['max_height']  = '576';
                    $config['multi']  = 'ignore';

                    $this->load->library('upload', $config);

                    if ( ! $this->upload->do_upload('uploadedimages'))
                    {
                        $error = array('error' => $this->upload->display_errors());

                        $data['featured_products']  = $this->products_model->get_featured_products(4, 1);
                        $data['featured_offers']    = $this->products_model->get_featured_products(4, 2);
                        $data['categories_name']    = $this->products_model->get_categories_name();
                        $error['main_content'] = 'pages/add_product';
                        $this->load->view('templates/template', $error);
                    }
                    else
                    {
                        $manufacturers_data = array('manufacturers_name' => $this->input->post('manufacturer'),);
                        $manufacturers_id = $this->manufacturers_model->store_manufacture($manufacturers_data);
                        $data = array('upload_data' => $this->upload->data());

                        if (!$data['upload_data'][1]['full_path']) {
                             $data['upload_data'][1]['full_path'] = NULL;
                        }

                        if (!$data['upload_data'][2]['full_path']) {
                             $data['upload_data'][2]['full_path'] = NULL;
                        }

                        $data_to_store = array(
                        'name'              => $this->input->post('name'),
                        'manufacturers_id'  => $manufacturers_id,
                        'model'             => $this->input->post('model'),
                        'categories_id'     => $this->input->post('category'),
                        'sell_price'        => $this->input->post('price'),
                        'stock'             => $this->input->post('stock'),
                        'used'              => $this->input->post('used'),
                        'description'       => $this->input->post('description'),
                        'img'               => substr($config['upload_path'], 1).'/'.$data['upload_data'][0]['file_name'],
                        'img1'              => substr($config['upload_path'], 1).'/'.$data['upload_data'][1]['file_name'],
                        'img2'              => substr($config['upload_path'], 1).'/'.$data['upload_data'][2]['file_name'],
                        'product_date'      => date('Y-m-d H:i:s'),
                        'company_id'         => $this->session->userdata('company_id'),
                        'uploader_ip'       => $this->input->ip_address(),
                        );
                        //if the insert has returned true then we show the flash message
                        if($this->products_model->store_product($data_to_store) == TRUE){
                            $this->session->set_flashdata('flash_message', 'کاڵاەکەت بەسەرکەوتویی بارکرا، سوپاس بۆ بەشداربونت.');

                            $data['featured_products']  = $this->products_model->get_featured_products(4, 1);
                            $data['featured_offers']    = $this->products_model->get_featured_products(4, 2);
                            $data['categories_name']    = $this->products_model->get_categories_name();
                            $data['main_content'] = 'pages/add_product';
                            $this->load->view('templates/template', $data);
                        }else{
                            $this->session->set_flashdata('flash_message', 'not_uploaded');
                        }
                    }

                }//validation run
                else{
                    $data['featured_products']  = $this->products_model->get_featured_products(4, 1);
                    $data['featured_offers']    = $this->products_model->get_featured_products(4, 2);
                    $data['categories_name']    = $this->products_model->get_categories_name();
                    $data['main_content'] = 'pages/add_product';
                    $this->load->view('templates/template', $data);
                }
            }
        }

        else{
                redirect('home/company_add_product'); 
            }
        }
    }

这是模型:

function store_product($data)
    {
        $insert = $this->db->insert('products', $data);
        return $insert;
    }

但问题是当我上传产品时可以说

company_do_upload()

触发,整个网站出现故障并给出 500 内部错误。 我的网站在dreamhost上,我在崩溃后将文件上传到godaddy,它是一样的,给出500内部错误。但是当我上传我在崩溃前备份的整个网站时,它又可以工作了。我不知道这段代码看起来像是破坏了一些文件。我确实联系了支持团队两次,他们说错误不在他们这边。

【问题讨论】:

  • 检查你的web服务器的error_log文件,你可以在你的ftp上找到它。
  • 我也只会添加错误日志。谢谢
  • 只添加与您的问题相关的部分,而不是整个文件。 Here you can see how to look at it on dreamhost.
  • 其实我必须阅读这个 var_dump(_FILE_.LINE_); 才能知道你在说什么,但正如我上面所说的当我触发上传按钮并转到下一个函数 company_do_upload() 它给出 500 内部错误,然后整个网站给出 500 错误。
  • 您必须从您的 error_log 文件中发布与您正在运行的脚本相关的信息,否则它将毫无意义。

标签: php codeigniter internal-server-error


【解决方案1】:

您的日志 sn-p 显示错误不一定是由您的代码触发的,而是由配置文件触发的。 /dh/apache2/template/etc/mod_sec2/99_dreamhost_rules.conf 中的 line 195 是什么?我想如果你的代码中的某些东西实际上触发了 500 错误,那么日志中就会有一些东西引用你的 PHP 文件。您的日志 sn-p 并没有显示是这种情况。

如果它是您的代码,请在不同的地方调用日志记录函数,然后查看它的来源。当 httpd 日志对我没有帮助时,这就是我所做的。这是我使用的日志记录功能:

function logit($msg){
try {
    $fh=fopen('/tmp/file.log','a');
    fwrite($fh,date("Ymd His")."\t$msg\n");
    fclose($fh);
} catch (Exception $ex){
    // Forget it!
} // try..catch
} // logit

它会自动为发送到文件的消息添加时间戳。该函数有意在每次调用后关闭日志文件以强制刷新缓冲区,以确保如果您的程序死亡,日志将尽可能保持最新。这帮助我摆脱了很多紧张的擦伤。我在导致问题的例程开始和结束时调用日志:

function foo(){
    logit("Foo():start");
    // do something
    logit("Starting potential trouble: some potentially troublesome value='$bar'");
    // The single quotes around $bar help if $bar is not assigned a value
    // problem code
    logit("Foo():done");
} //foo

请绝对确保fopen() 调用中的目录和文件可被 Web 服务器进程写入!话虽如此,您让 PHP 将上传的文件放在company_do_upload() 中的路径是否可由 Web 服务器写入?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 2015-04-25
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多