Кодовый указатель пустой $ _POST & $ _FILES - PullRequest
4 голосов
/ 20 февраля 2012

Я использую Plupload для управления загрузкой файлов для моего сайта. Когда я настраиваю Plupload для публикации в следующем тестовом файле, записи отображаются правильно, однако, когда я отправляю сообщения на контроллер CI, и $ _POST, и $ _FILES будут пустыми.

test.php

<?php print_r($_FILES); print_r($_POST); ?>

CI правильно отображает массивы $ _FILES и $ _POST при использовании стандартной формы HTML, так что есть идеи, что вызывает это?

EDIT вот конфиг plupload

    var uploader = new plupload.Uploader({
    runtimes : 'html5,html4,flash,silverlight,browserplus',
    browse_button : 'pickfiles',
    container : 'container',
    max_file_size : '15mb',
    url : '/test.php',
    //url : '/upload/do_upload/',
    flash_swf_url : '/js/plupload/plupload.flash.swf',
    silverlight_xap_url : '/js/plupload/plupload.silverlight.xap',
    filters : [
        {title : "Documents", extensions : "pdf,doc,docx,rtf,txt"}
        ],
    multipart_params : { job : -2 }
});

а вот и контроллер

class Upload extends CI_Controller {

function __construct()
{
    parent::__construct();
}

function index()
{
    $this->load->view('upload_form', array('error' => ' ' ));
}

function do_upload()
{
            print_r($_POST);
            print_r($_FILES);
    $config['upload_path'] = 'incoming/';
    $config['allowed_types'] = 'pdf|doc|docx|rtf|txt';
    $config['max_size'] = '900';

    $this->load->library('upload');
    $this->upload->initialize($config); // MUST CALL ELSE config not loaded

    if ( ! $this->upload->do_upload()) {
        $error = array('error' => $this->upload->display_errors());
        $this->load->view('upload_form', $error);
    }
    else {
        $data = array('upload_data' => $this->upload->data());
                    $this->load->model('translation_model');
                    $this->translation_model->add_orig($job, $filePath);
        $this->load->view('upload_success', $data);
    }
}
}

Ответы [ 3 ]

5 голосов
/ 20 февраля 2012

Наиболее вероятная причина - плохие правила переписывания модов.Если вы используете какой-либо из них, попробуйте отключить их и снова опубликовать свои данные.

1 голос
/ 20 февраля 2012

Я использую входной класс вместе с обычными переменными $ _POST, и он всегда работал для меня. Теория о том, что CI очищает пост-переменные, не складывается, когда он может выводить их в обычных формах.

Отключите защиту csrf и сообщите нам результаты. Используйте консоль Firebug, чтобы прочитать ответ с сервера. Для обхода csrf я использую https://github.com/EllisLab/CodeIgniter/pull/236

CodeIgniter также имеет проблемы с типами файлов. http://codeigniter.com/forums/viewthread/113029

У меня есть рабочие библиотеки для обоих, если хотите, просто напишите мне сообщение.

0 голосов
/ 20 февраля 2012

Может случиться так, что что-то в plupload перехватывает $ _POST и $ _FILES.

В codeigniter обычно лучше использовать входной класс для работы с переменными записи и класс загрузки файлов для обработки загрузок файлов.

Я полагаю, что что-то освободило массивы $ _POST и $ _FILES для обеспечения безопасности, может случиться так, что при включении входных классов и классов загрузки файлов сам кодигнитор стираетМассивы $ _POST и $ _FILES, так что вы вынуждены использовать их классы.Это всегда хорошая идея, так как codeigniter удаляет атаки XSS и очищает переменные.

...