1

ファイルアップローダーを使用して、ページにコードを記述しようとしています。生成されたページには、ユーザーが背景としてアップロードした画像のパス名を持つ css コードが必要です。私はcodeigniter file_writeを使用しています。背景色とタイトルも取得するための入力があります。ビューにlayout.phpページがあります(777許可)しかし、アップロードボタンをクリックした後、コードが機能せず、「アップロードパスが有効ではないようです」というエラーが表示されます

 class Upload extends CI_Controller {

    public function __construct()
        {
            parent::__construct();
            $this->load->helper(array('form', 'url', 'file', 'directory'));
        }

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

    public function do_upload()
        {

            $path = $this->input->post('new-folder');
            $title = $this->input->post("title");
            $bgcolor = $this->input->post("bgcolor");

            $upload_path_url = site_url().'uploads/'.$path.'/';

            $config['upload_path'] = './uploads/'.$path.'/';
            $config['allowed_types'] = 'gif|jpg|jpeg|png';
            $config['max_size'] = '2000';
            $config['max_width']  = '1920';

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

            if ( ! $this->upload->do_upload()) {
                $error = array('error' => $this->upload->display_errors('<p class="error">','<p>'));
                $this->load->view('upload_form', $error);

            } else {
                $data = $this->upload->data();

                //set the data for the json array   
                $info->name = $data['file_name'];
                $info->size = $data['file_size'];
                $info->type = $data['file_type'];
                $info->url = $upload_path_url .$data['file_name'];

                $info->thumbnail_url = $upload_path_url .$data['file_name'];
                $info->delete_url = base_url().'upload/deleteImage/'.$data['file_name'];
                $info->delete_type = 'DELETE';

                //this is why we put this in the constants to pass only json data
                if (IS_AJAX) {
                    echo json_encode(array($info));

                // so that this will still work if javascript is not enabled
                } else {
                     echo $upload_path_url;

                    if(!is_dir($path))
                    {
                        mkdir($upload_path_url,0777,TRUE);

                    } 

                    $page_layout = $this->load->view('layout');
                    $write_data = '<div style="width:100%; height:100%; background: url(../uploads/'.$data['file_name'].')"></div></body></html>' ;

                    if ( ! write_file( $page_layout . $write_data, 'a+') )
                    {
                        $msg_file = '<label>Unable to generate the page</label>';
                    }
                    else
                    {
                        $msg_file = '<label>Layout Page was generated!</label>';
                    }


                    $file_data['msg_file'] = $msg_file;
                    $file_data['title'] = $title;
                    $file_data['bgcolor'] = $bgcolor;
                    $file_data['upload_data'] = $this->upload->data();
                    $this->load->view('upload_success', $file_data); 
                }
            }
        }
}

form_upload.php の一部:

<!-- Site title -->
<label>Title:</label>
<input type="text" size="40" name="title" />
<br /><br />
<label>Background color:</label>
<input type='text' value='#fff' name='bgcolor' id='bg' size="10" />
<br /><br />

upload-success.php の一部:

    if ( isset($msg_file) ) { echo $msg_file; }
    echo '<br /><br />';
    echo '<label>Site title: '. $title.'</label>';
    echo '<br />'; 
    //echo $write_data;
    echo '<br />'; 
    echo '<label>background-color: '. $bgcolor.'</label>';
    echo '<br />';
4

1 に答える 1

2

「アップロードパスが有効ではないようです」というメッセージがあなたの$config['upload_path'] = './uploads/'.$path.'/'行を参照しています。これは、ディレクトリが存在しないか、権限が正しくないことを意味します。コードを見ると、 $path はフォームからの POST データを介して取得され、アップロードする前にそのフォルダーをどこにも作成していません。アップロード フォルダーが存在しない場合、CI の Upload クラスはアップロード フォルダーを作成しないと思います。私はそれをテストしていませんが、次のようなものを試してください:

$config['upload_path'] = './uploads/'.$path.'/';
[...]

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

if (!empty($path) && !file_exists($config['upload_path'])) {
   if (!mkdir($config['upload_path'], 0777, true)) {
    die('Failed to create folders...');
   }
}

if ( ! $this->upload->do_upload()) {
[...]

これは別の問題であるため、POSTデータチェックについては話していません。

于 2013-10-30T15:44:45.837 に答える