![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.5ベストアンサー
- 回答日時:
もちろんバイトストリームを自分で処理してファイルに追記していくのを手動でやってもいいですが、PHPにはそういったローレベルの操作をサポートしている「クラス」は存在しません。
古典的に「関数」を使って書きにくいコードを書くしかないです。それぐらいならば $_FILES や $_SESSION といったPHP言語レベルでサポートされたファイルアップロード機能(テンポラリファイル生成機能)を利用すべきだと私は考えますね。実際こっちのほうがメモリ消費も少ないと思います。PHPの変数の最小単位(zval構造体)は、PHPのもとになっているC言語の変数の最小単位よりも遥かに大きな記憶領域を必要とします。
>>PHPにはそういったローレベルの操作をサポートしている「クラス」は存在しません。
理解不足ですみませんでした。
教えていただいたようにPHP5.4 アップロード進捗の取得を使えばよいことでようやく納得しました。
色々な言語を使っていたり、詳しいことが分かっていなかったりして、
分かりづらい質問ばかりで申し訳ありませんでした。
アップローダについて悩んでおりましたが、解決です。
ありがとうございました。
それにしても最近のSNSはやっぱり凄いですね。
No.4
- 回答日時:
えーっと…まさにそのことについてのリンクをさっきから掲載しているんですが…(汗
メモリ上にではなくテンポラリファイルとして生成されます。これは通常のアップロードであってもセッションを利用したアップロードであっても同じです。ちゃんと記事に書いてあるので読んでください。
>> ["tmp_name"]=>
>> string(22) "/private/tmp/phpeMGDne"
>> ["start_time"]=>
>> int(1323713434)
>> ["bytes_processed"]=>
>> int(155540)
こういうところを見て「テンポラリファイルに徐々に書き込まれていく」っていうのを察してほしいですね…
No.3
- 回答日時:
PHP5.4以降のセッションを利用したアップロードを行う場合、一般的なファイルのアップロード処理方法とは大きく異なります。
先ほどの回答で記載したリンク先で具体的に分かりやすく解説されているのでそちらが参考になるかと思いますが…【通常のアップロード】
Qiita - ファイルアップロードの例外処理はこれぐらいしないと気が済まない
http://qiita.com/mpyw/items/939964377766a54d4682
こちらではそのままechoして結果を表示していますが、JavaScriptに受け取らせるには
header('Content-Type: application/json; charset=utf-8');
echo json_encode($message);
のようにしてJSON形式にします。もしクロスドメインである場合は
header('Content-Type: application/javascript; charset=utf-8');
echo 'callback(' . json_encode($message) . ')';
のようにしてJSONP形式にする方法も候補として上がるでしょう。
【セッションを利用したアップロード】
こちらの方法は通常の方法と完全に異なります。通常の方法ではファイルが全てアップロードされるのを待ってからスクリプトが1回実行されるだけでしたが、こちらの方法ではアップロードが終わる前にPHPのスクリプトが開始されます。
・JavaScript側でアップロードリクエストを開始
↓
・PHP側でセッションへ進捗情報の格納を開始
・PHP側から「Set-Cookie: PHPSESSID=xxxx」としてセッションクッキーが送られるのでJavaScript側はこれを記憶しなければならない
・PHP側から進捗情報をJSONまたはJSONPで返し、JavaScript側でこれをパースして表示を行う
↓
・Cookieをセットして2回目のリクエストを行う
・PHP側から進捗情報をJSONまたはJSONPで返し、JavaScript側でこれをパースして表示を行う
↓
・Cookieをセットして3回目のリクエストを行う
・PHP側から進捗情報をJSONまたはJSONPで返し、JavaScript側でこれをパースして表示を行う
↓
(以降繰り返し)
これを一定ミリ秒ごとにJavaScript側から繰り返し実行し続ければ実現できます。
この回答への補足
解説ありがとうございます。説明不足ですみません。
気にしているのは、PHP側のファイル処理の仕方です。
大容量のファイルをアップロードされた場合、サーバにアップロード完了するまでメモリ上に残していると問題があると思いました。最悪の場合PHPのプロセスだけでメモリを食いつぶすこともありえそうに思えました。
アップロード処理はどのように実装しているのでしょうか(すべきでしょうか)。
できれば,参考になるものを紹介していただけると助かります。
※Javaのファイルストリームようにバッファサイズを超えたらファイル出力するような処理を実装すべきではないかと考えております。
No.2
- 回答日時:
No.1
- 回答日時:
PHPで即座にアップロードじゃなくて、JavaScriptを使って非同期でアップロードしてるだけです。
もちろんサーバー側にはJavaScriptからの通信を受け付けるPHPスクリプトが控えていますが、ユーザーが見るものとは別物で、HTMLを表示したりはしません。JSONでレスポンスを返すだけです。こういうの参考になるんじゃないでしょうか↓
http://webdelog.info/2013/03/web/javascript/drop …
この回答への補足
回答ありがとうございます。
非同期についてはわかりましたが、非同期を受けるサーバ側はどのような処理をしているのでしょうか。
非同期で受けるサーバ側のファイルアップロードの処理はどのようにすべきなのでしょうか。
PHPで受け取ってファイル出力する方法でよろしいのでしょうか。
※ファイル出力は受信しながら、ストリーム処理をすればいいのでしょうか(よく分かっておりません)。
大きいファイルのアップロードの定石はないのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP $filePath = './user_img/' . $file['name'];? 1 2022/12/10 07:29
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- PHP どうして送信されないのでしょうか? 1 2022/12/09 05:23
- YouTube ユーチューブへの動画投稿にサムネイルを付ける方法は? 1 2022/07/21 23:45
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- PHP アップロードファイルの数に応じてCSSを動的に変更したいのですが、方法がわかりません 3 2023/07/23 21:59
- PHP 画像ファイルの名前をそのままURLにする 3 2022/10/16 11:18
- その他(IT・Webサービス) メモリ不足のため、直前の操作ができませんとエラーメッセージが出て、画像のアップロードができなくて困っ 6 2023/07/05 17:06
- Google Drive Googleドライブについて 3 2023/08/06 12:19
- PHP 'member_picture/'に/がありますが 、「スラッシュ」は必要でしょうか? 1 2022/11/27 04:32
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
onedrive にexcelファイルをア...
-
FTPClientで転送結果(OKかFAIL)
-
アップロードの仕方
-
マイクロソフトオフィスアップ...
-
BASP21を利用してリネームファ...
-
aws cloud9というものを使って...
-
PHP 画像アップロード 重複防止
-
ファイルをGET送信でアップロー...
-
ファイルアップロードの上限を...
-
VBでクラウドストレージにア...
-
ガラケーサイトで写真のアップ...
-
フォームでのファイルアップロ...
-
10MB以内のJPG画像
-
PHPのif文でその処理を途中で抜...
-
フォントの色を変えるには?
-
.phpと.incファイルの違いはな...
-
拡張子php画像をjpg画像等に変...
-
プリクラの設置してある場所
-
XMLのロードに失敗する
-
URLが.PHPってどういう...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
onedrive にexcelファイルをア...
-
ファイルアップロードの上限を...
-
youtubeに音声のみのmp4ファイ...
-
FTPClientで転送結果(OKかFAIL)
-
one drive のアップロード失敗...
-
unlinkでどうしてもファイルが...
-
ファイルをGET送信でアップロー...
-
ftpでアップロードが出来ない
-
ファイルサイズがpost_max_size...
-
PHPでxmlをAPIに送信する方法(P...
-
aws cloud9というものを使って...
-
ファイルアップロードについて...
-
DUMPした巨大SQLファイルをイン...
-
全角ファイル名をアップロード...
-
PHPMailerで大きなファイルが送...
-
SmartyでHTMLソースの変更が反...
-
Struts2 ファイルアップロード
-
ファイルアップロードしたもの...
-
画像ファイルの名前をそのままU...
-
サーバーにアップロードしたい
おすすめ情報