質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

3068閲覧

PHPのフレームワークのCodeIgniterとjavascriptプラグインを使用してファイルアップロードのファンクションを作成したい。

mizuiroclub

総合スコア11

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/06/16 09:00

###前提・実現したいこと
PHPのフレームワークのCodeIgniterを使用してファイルアップロードのファンクションを作成しています。
その際に、画像をクロッピングしてからディレクトリのフォルダに画像を保存したいです。
クロッピングするために「Slim」
http://slim.pqina.nl/
というプラグインを購入し、組み込みました。
すると、先ほどまでディレクトリに作成した「tmp」という名前のフォルダに画像を保存できていたのですが、
エラーになってしまいました。
調べてみたところ、「Slim」のjavascriptが悪さしているようです。

解決の糸口がそれ以上全くつかめないので、もし気づいたことなどあれば、お答えいただきたいです。
宜しくお願い致します。

###発生している問題・エラーメッセージ

'upload_formが見つかりません'

↑上記のエラーは単にupload_formページを作成していないためです。

###該当のソースコード
【cropimage.php】:view page

<html> <head> <title>Upload Form</title> <link href="<?php echo base_url('/assets/slim/slim.css') ?>" rel="stylesheet" type="text/css"> </head> <body> <?php echo $error;?> <?php echo form_open_multipart('cropcontroller/do_upload');?> <div class="slim"> <input type="file" name="userfile"/> </div> <br /><br /> <input type="submit" value="upload" /> <script src="<?php echo base_url('/assets/slim/slim.kickstart.js') ?>"></script> </body> </html>

【cropcontroller.php】:controller page

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Cropcontroller extends CI_Controller { public function __construct() { parent::__construct(); $this->load->helper(array('form', 'url')); } public function index() { $this->load->view('cropimage', array('error' => ' ' )); } public function do_upload() { $config['upload_path'] = './tmp/'; $config['allowed_types'] = 'gif|jpg|png'; $config['max_size'] = 100; $config['max_width'] = 1024; $config['max_height'] = 768; $this->load->library('upload', $config); if ( ! $this->upload->do_upload('userfile')) { $error = array('error' => $this->upload->display_errors()); $this->load->view('upload_form', $error); } else { $data = array('upload_data' => $this->upload->data()); $this->load->view('administrationsite/cropimage', $data); } } } ###試したこと cropimage.phpの <script src="<?php echo base_url('/assets/slim/slim.kickstart.js') ?>"></script>

をコメントアウトすると、画像保存ができたので、おそらくjavascriptに原因あり。

他にもjqueryのファイルなども試してみましたがダメでした。

slim.kickstart.jsのファイルがとても長いので省きますが、始まりは下記のようになります。(本当に一部のみで申し訳ないです。)
(function(root, undefined) {

// Cut the mustard for really old browsers if (!root || !root.addEventListener) { return; } // Slim lib root.Slim = function() { function _classCallCheck(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function getOffsetByEvent(t) { return { x: "undefined" == typeof t.offsetX ? t.layerX : t.offsetX, y: "undefined" == typeof t.offsetY ? t.layerY : t.offsetY } }

###補足情報(言語/FW/ツール等のバージョンなど)
PHP version : 5.4
CodeIgniter version : 3.0.6
OS X El capitan
Browser : Chrome

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

【cropimage.php】

<html> <head> <title>Upload Form</title> <link href="<?php echo base_url('/assets/slim/slim.css') ?>" rel="stylesheet" type="text/css"> </head> <body> <?php echo $error;?> <?php echo form_open_multipart('cropcontroller/do_upload');?>
<div class="slim" data-label="Drop your avatar here" data-size="240,240" data-ratio="1:1" data-max-file-size="3.5"> <input type="file" required name="slim[]" id="slim"/> </div>

<br><br>
<input type="submit" value="upload" />

<script src="<?php echo base_url('/assets/slim/slim.kickstart.js') ?>"></script> </body> </html>

【cropcontroller.php】

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); require_once ('slim.php'); class Cropcontroller extends CI_Controller { // get posted data, if something is wrong, exit // try // { // $images = Slim::getImages(); // } // // catch // (Exception $e) { // Slim::outputJSON(SlimStatus::Failure); // return; // } public function __construct() { parent::__construct(); $this->load->helper(array('form', 'url')); } public function index() { $this->load->view('cropimage', array('error' => ' ' )); } public function do_upload() { $images = Slim::getImages(); if (count($images) === 0) { Slim::outputJSON(SlimStatus::Failure); return; } // should always be one file (when posting async) $image = $images[0]; $file = Slim::saveFile($image['output']['data'], $image['input']['name']); // echo results Slim::outputJSON(SlimStatus::Success, $file['name'], $file['path']); } }

投稿2016/06/17 04:34

mizuiroclub

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

http://slim.pqina.nl/ のサンプルをみただけなのですが・・・

html

1<input type="file" required name="slim[]" id="slim" />

とサンプルにあるようにinputのname,idを指定してみてはどうでしょうか

投稿2016/06/16 09:19

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mizuiroclub

2016/06/17 00:56

ご返信ありがとうございます。 inputにnameとidを指定してみたのですが、うまくいきませんでした。 また、Slimの製作者の方に問い合わせてみたところ、 1) <?php echo form_open_multipart('cropcontroller/do_upload');?> <div class="slim"> <input type="file" required name="slim" id="slim"/> </div> <br><br> <input type="submit" value="upload" /> ↑上記の部分がformタグで閉じられていないから? 2) SlimはJSON形式でデータを送っている。だから$_FILES配列ではなく、$_POSTで送る という返答がきました。 1は試してみましたがうまく行かず、 2のJSON形式で送っているというところに原因がある?と思いました。 しかし、CodeIgniterのControllerを通して画像をフォルダに送らないといけないです。 もし何か他にも試してみれそうなことがありましたら、ぜひ教えていただきたいです。 宜しくお願い致します。
mizuiroclub

2016/06/17 04:32

Slimを使ってクロッピングした画像をCodeIgniterを使って保存ができました! nameとid重要でした。 また、javascriptに問題があるわけではなく、PHPで画像を保存する際に使用しているAPIが必要だったようです。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問