2012-02-20 15 views
4

私は自分のサイトのファイルアップロードを管理するためにPluploadを使用しています。次のテストファイルに投稿するようにPluploadを設定すると、レコードが正しく表示されますが、CIコントローラに投稿すると、$ _POSTと$ _FILESの両方が空になります。

test.phpを

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

標準のHTMLフォームを使用して、その任意のアイデア何これを引き起こしているときCIが正しく$ _FILESと$ _POST配列を表示していますか?

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); 
    } 
} 
} 
+2

AFAIKは、Codeigniterが '$ _POST'配列を空にし、参照とセキュリティのために' $ this-> input-> post'を使用します。ファイルアップロードの場合は、ファイルアップロードライブラリを使用できます。 – MacMac

+0

いいえ、Codeigniterは '$ _POST'配列を空にしません。なぜ人々はそれを言っているのですか?クエリ文字列を無効にすると、CIは '$ _GET' *のみを解除します。 –

+0

コードを送信していただきありがとうございます。 $ _FILESと$ _POSTが空であることをどのように確認していますか?アップロードがうまくいかないのであなたはそれを*仮定していますか? pluploadのアップロードスクリプトまたはその変形を使用する必要があります。単純にCIのアップロードハンドラをpluploadのものと交換することはできません。 –

答えて

5

これは、おそらくモッズリライトのルールが悪いことが原因です。いずれかを使用している場合は、それらを無効にしてデータを再度投稿してみてください。

+0

'$ _POST'はCodeigniterで正常に動作しますが、' 'CIがポスト配列をクリーンアップすることによって何を意味するのかは不明です。 CIが$ _POST配列を設定解除することを意味するなら、あなたは間違っています。 OPの質問を読んだ場合、これは明らかです: ''標準的なHTMLフォームを使用しているとき、CIは$ _FILESと$ _POST配列を正しく表示します " –

+0

@Madあなたは絶対に正しいです - 私は答えを修正しました。 – Repox

+1

関連する可能性があります:http://stackoverflow.com/questions/6079371/updated-mod-rewrite-and-post-method-in-php-problem-post-is-always-empty、http://stackoverflow.com/questions/4733123/why-post-is-empty-when-hs-in-htaccessを使用している場合、http://stackoverflow.com/questions/1627017/files-array-in-php-is-empty –

0

それはpluploadで何かが$ _POSTと$ _FILESを傍受されている可能性があります。

codeigniterでは、通常、ポスト変数を処理するためにinput classを使用し、ファイルアップロードを処理するにはfile uploading classを使用することをお勧めします。

安全のために何か$ _POST配列と$ _FILES配列が空になっていると思います。入力とファイルのアップロードクラスを含めると、codeigniter自体が$ _POST配列と$ _FILES配列を消去してしまいます。そのクラス。 codeigniterとしての常に良いアイデアは、XSS攻撃を除去し、変数を整理します。

+0

$ this-> input-> postメソッドも空です。 – AlasdairC

1

私は通常の$ _POST変数と組み合わせて入力クラスを使用しています。これはいつも私のために働いています。 CIがポスト変数を消去するという理論は、それらを通常の形でダンプすることはできません。

csrf保護をオフにして、結果をお知らせください。 Firebugコンソールを使用して、サーバーからの応答を読み取ります。 私が使用するcsrfの回避策https://github.com/EllisLab/CodeIgniter/pull/236

CodeIgniterにはファイルタイプにも問題があります。 http://codeigniter.com/forums/viewthread/113029

私はメッセージをドロップしたい場合は、両方の作業ライブラリがあります。

+0

は私のconfig.phpから$ config ['csrf_protection'] = FALSE; – AlasdairC

+0

セキュリティのためには、電源を入れておく必要があります。次に、pluploadで問題が発生します。 – qwertzman