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

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

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

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

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

3回答

11548閲覧

Ajaxで画像をアップロードする

osamuya

総合スコア241

PHP

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

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

4クリップ

投稿2014/08/28 05:20

お世話になります。
Ajaxで画像ファイルをPHPに送信するというプログラム書いております。今現在、Ajaxでファイル自体の転送が出来ている感じで、PHP側では$_FIlESを受け取ることができていて、
name=>3e6ffb8b55ca034fc29f49fba2906xxxx.jpg
type=>image/jpeg
tmp_name=>/tmp/phpvSmIDl
error=>0
size=>208500
といういつもの配列の内容を表示するところまではできています。
Ajaxは以下のように書いています。

lang

1[Javascript] 2var files = $("#image_file").prop('files')[0]; 3filedata = new FormData(); 4filedata.append("files", files) 5 6$.ajax({ 7 type:"post", 8 url:"./img.php", 9 data:filedata, 10 contentType: false, 11 processData: false 12 13}).done(function(message) { console.log( "Data Saved: " + message ); });

この$_FILESをフォームからPHP(img.php)で受け取って保存しようとする時に私はいつも教科書通りに、

lang

1[PHP] 2if (is_uploaded_file($_FILES["files"]["tmp_name"])) { 3 if (move_uploaded_file($_FILES["files"]["tmp_name"], "files/" . $_FILES["files"]["name"])) { 4 echo $_FILES["files"]["name"] . " Success Upload."; 5 } else { 6 echo "can not upload !"; 7 } 8} else { 9 echo "failure !"; 10}

という風に保存しております。
しかしAjaxで送信した場合にis_uploaded_file()関数ですでにコケていて、php側でアップロードファイルであるかどうかの判断ができないようです。同様にmove_uploaded_file()関数も使えないようでした。
Ajaxで画像ファイルを送信する際にPHP側ではどのような処理をすれば保存できるでしょうか。
(あるいは、何かしら根本的に間違っているのかもしれません。。。$_FILESには文字列しか取得できていないとか。。。)
詳しい方いましたらご教授おねがいいたします。

よろしくおねがいいたします。

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

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

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

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

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

guest

回答3

0

投稿2014/09/25 04:52

NIA

総合スコア181

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

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

0

NIAさん

お世話になります。
いろいろやって実際に動いたものはこんな感じになりました。かなりミニマルなところまでコードをそぎ落としてあるので、エラーなんかの機能は取り除いていますが、肝は、

lang

1$form = $('#upload-form'); 2fd = new FormData($form[0]);

ですね。
これがわからなかったので、全然動かなかった感じです。
一応動いたソースあげておきました。
uploadというディレクトリだけ作って適切なパーミッションあたえれば動くかと思います。

送信元javascript (index.html)

lang

1<script> 2function upload(form) { 3 $form = $('#upload-form'); 4 fd = new FormData($form[0]); 5 $.ajax( 6 'http://example.com/uploader.php', 7 { 8 type: 'post', 9 processData: false, 10 contentType: false, 11 data: fd, 12 dataType: "json", 13 success: function(data) { 14 alert( data.message ); 15 console.log(data); 16 }, 17 error: function(XMLHttpRequest, textStatus, errorThrown) { 18 alert( "ERROR" ); 19 alert( textStatus ); 20 alert( errorThrown ); 21 } 22 }); 23 return false; 24} 25</script>

lang

1<form id="upload-form" method="post" enctype="multipart/form-data" onSubmit="return upload(this);"> 2 <input id="upload-form-file" name="userfile" size="27" type="file" accept="image/*;capture=camera"/>

送信先 uploader.php

lang

1<?php 2 $textUpload = ""; 3 4 if ($_FILES['userfile']): 5 $uploadfile = __DIR__ . '/uploads/image.jpg'; 6 if (move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadfile)) { 7 $textUpload = "File is uploaded"; 8 } else { 9 $textUplaod = "Upload fail"; 10 } 11 endif; 12 13 header( 'Content-Type: application/json; charset=utf-8', true ); 14 echo json_encode( array("message" => "Upload is OK") ); 15 16?>

投稿2014/09/21 03:46

osamuya

総合スコア241

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

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

NIA

2014/09/25 05:00

動くようになって何よりです。 実用段階にはセキュリティの対策等が、 少々面倒ですが頑張ってください。 スマホ対応の場合とかでも動画をやられると 処理が止まるか落ちるかしそうですね(笑)
guest

0

ベストアンサー

画像をアップロードするだけなら以下の方法が参考になればと、、、

lang

1./img_upload.php 2※./img/フォルダは、パーティションを777にする 3[PHP] 4<?php 5 $img_tmp = $_FILES["dataFile"]["tmp_name"]; 6 $img_name = $_FILES["dataFile"]["name"]; 7 $img_size = $_FILES["dataFile"]["size"]; 8 if($_FILES){ 9 if($img_tmp != "" and $img_size <= 3000000){ 10 $FilePath = "./img/".date("Ymdhis").".".GetExt($img_name); 11 move_uploaded_file($img_tmp,$FilePath); 12 }else{ 13 $size_error = "選択なし。または、ファイルサイズが3メガバイト以上です。"; 14 } 15 } 16 // GetExt 17 // ファイルの拡張子を取得します。 18 function GetExt($FilePath){ 19 $f=strrev($FilePath); 20 $ext=substr($f,0,strpos($f,".")); 21 return strrev($ext); 22 } 23?>

lang

1./imglist.php 2[PHP] 3<?php 4 $lst = "./img"; // 表示するリストの名前(パス) 5 6 $dir = dir($lst); 7 8 while($fl=$dir->read()) { 9 $timelist[] = filemtime($lst."/".$fl); 10 $array_dir[] = $lst."/".$fl; 11 } 12 array_multisort($timelist,SORT_DESC,$array_dir); 13 foreach($array_dir as $fl){ 14 if($fl!="./img/.." && $fl!="./img/." ) { 15 echo "<img src='{$fl}' class='img_list' title='クリックして追加' />"; 16 } 17 } 18 $dir->close(); 19?>

lang

1./add.js 2[Javascript] 3$(function(){ 4 /*IE対策メソッド--------------------------*/ 5 $.ajaxSetup({ 6 cache: false //キャッシュをさせないようにする 7 }); 8 /*画像の読み込み機能--------------------------*/ 9 function img_read(){ 10 $.ajax({ 11 url: "./imglist.php", 12 dataType:"html" 13 }).done(function(data){ 14 if(data!="") 15 $("#img_list").html(data); 16 else 17 $("#img_list").html("追加された画像が表示されます<br />"); 18 }); 19 } 20 img_read(); 21 /*画像アップロード機能--------------------------*/ 22 $("#imgForm").submit(function(){ 23 var $form, fd; 24 $form = $("#imgForm"); 25 fd = new FormData($form[0]); 26 $.ajax($form.attr("action"), { 27 type: 'post', 28 processData: false, 29 contentType: false, 30 data:fd, 31 dataType:'html' 32 }).done(function(){ 33 if($("#sendFile").val()!="") 34 $("#img_message").html("送信完了"); 35 else 36 $("#img_message").html("選択してください"); 37 img_read(); 38 }).fail(function(){ 39 $("#img_message").html("送信失敗"); 40 }); 41 return false; 42 }); 43}); 44

lang

1[HTML] 2<script type="text/javascript" src="./jquery-2.0.3.js"></script><!--ダウンロードしてくる--> 3<script type="text/javascript" src="./add.js"></script> 4<!-- img --> 5<div id="contents_image"> 6IMAGE&nbsp; 7<span id="img_message"></span> 8<form id="imgForm" method="post" action="./img_upload.php" enctype="multipart/form-data" encoding="multipart/form-data"> 9<input name="dataFile" id="sendFile" type="file" size="22" /><br /> 10<input id="imgSubmit" type="submit" value="送信"> 11</form> 12<br /> 13</div> 14<div id="img_list"> 15追加された画像が表示されます<br /> 16</div>

即席で作ったので動かなかったら適当に流してもらって構いません!

投稿2014/08/29 08:46

NIA

総合スコア181

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

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

osamuya

2014/09/06 00:24

ありがとうございます。とても参考になりました。 実際に何とかAjaxを使ってシームレスに画像のアップロードができるようになりました。仕組み的には理解できているのですが、何らかのコードでひかかっていたみたいです。 また以下のサイトさん参考になりました。 http://blog.asial.co.jp/1260 動くようにはなったのですが、解析がまだ全然できていなくて細かいカスタマイズがまだできない状況でありますので、またご報告いたします。 ありがとうございます。
NIA

2014/09/08 04:17

参考になって良かったです。 解析の方も頑張ってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問