この前「Jqueryを使ってHTML5ドラッグ&ドロップファイルアップロード」を紹介しました。
http://www.it-view.net/drag-and-drop-file-upload-jquery-178.html
質問に対してクライアントからアップロードされたファイルをサーバーに保存する方法を紹介します。
今回はphpでサーバーにファイル保存方法を説明します。
クライアントのソースは「Jqueryを使ってHTML5ドラッグ&ドロップファイルアップロード」のままで利用できます。
使用する関数の説明
☆is_uploaded_file&move_uploaded_file☆
サーバーには、主にphpのis_uploaded_file関数とmove_uploaded_file関数を使用してファイルをサーバーに保存します。
・is_uploaded_file関数はHTTP POST でアップロードされたファイルかどうかを調べる。
・move_uploaded_file関数はアップロードされたファイルを新しい位置に移動する。
関数の詳細使い方と説明を下記phpオフィシャルページを参考してください。
is_uploaded_file:http://php.net/manual/ja/function.is-uploaded-file.php
move_uploaded_file:http://php.net/manual/ja/function.move-uploaded-file.php
move_uploaded_fileにはファイル保存場所の指定が必要ですので、phpファイルと同じ場所にfilesフォルダを作成し、書き込み権限を与えて置きましょう。
☆$_FILES☆
クライアントから送信されたファイル情報は$_FILESというグローバル配列に格納されます。
phpが自動的に値をセットしてくれます。
クライアントのjavascriptより”file”をキーとして$_FILESに保存されます。
[javascript]
fd.append(‘file’, files[i]);
[/javascript]
$_FILES[“file”][“tmp_name”]はPHPによって一時的に作成されたアップロードファイルの名前です。
$_FILES[“file”][“name”]はアップロードされたファイルのオリジナルのファイル名です。オリジナル名をfilesフォルダに保存します。
プログラム作成
クライアントから送信されたデータを受け取るphpプログラムを作成します。
[php]
<?php
if (is_uploaded_file($_FILES["file"]["tmp_name"])) {
if (move_uploaded_file($_FILES["file"]["tmp_name"], "files/" . $_FILES["file"]["name"])) {
echo $_FILES["file"]["name"] . "をアップロードしました。";
} else {
echo "ファイルをアップロードできません。";
}
} else {
echo "ファイルが選択されていません。";
}
?>
[/php]
また、chmod関数を使って、サーバーに保存されたファイルの権限を修正できます。
[php]
chmod("files/" . $_FILES["file"]["name"], 0644);
[/php]
以上、phpでサーバーにファイルを保存する方法でした。
–EVERY LITTLE MAKES–
お忙しい中、早速に回答頂きありがとうございます。
回答のphpスクリプトで、最初にif文で、アップロードされたファイルを確認しているということは、前項のアップロードスクリプトの拡張子をphpにして、回答のスクリプトを追記するということなのでしょうか?
こうすると「変数file未定義エラー」になってしまいます。
このスクリプトをどのように組み込めばよろしいのでしょうか?
phpはまだまだ勉強中なので、また質問になってしまい、恐縮です。
別phpファイルにしてください。
アップロードのスクリプトに「var uploadURL =”upload.php”; 」でサーバのファイル名を指定していますので、”upload.php”の名前でいいでしょう。
たびたびすみませんです。
作りたいスクリプトのイメージは、ファイルをドラッグ&ドロップでサーバーにアップロードして、そのファイルのリンクurlを得たいのです。
複数ファイルであれば複数のリンクurlというようなイメージです。
アップロードしたファイルをサーバーに保存されたら、urlを取れます。
例文の場合、「”files/” . $_FILES[“file”][“name”]」がリンクurlとなります。
お忙しい中、いろいろと教えて頂き、ありがとうございます。おかげさまで指定したサーバーのフォルダにアップロードできました。
ただ、このスクリプトの6行目にある「echo $_FILES[“file”][“name”] . “をアップロードしました。”;」が実行されていないように見えるのですが、瞬間的に表示されるのだけなので表示されないように見えてしまうのでしょうか?
ajaxを使っていますので、画面表示もajaxで処理します。成功後のsuccessに表示したいメッセージを設定してください。
success: function(data){
function(){status.setProgress(100)};
$(“#status1”).append(“File upload Done
“);
}
※引数のdataはサーバーからリターンしたデータです。
ありがとうございます。Ajaxは、よく分かってないのですが、もう少し勉強してみます。
いろいろとアドバイス頂き、ありがとうございます。