phpのフォームでファイルのアップロードをする1

phpでファイルをアップロードするときのやり方です。

基本的にhtmlのフォームからデータを投げて(submitして)、phpで受け取るという処理です。
同じページで処理しても構いませんが、ここでは単純化するためにindex.html→upload.phpという流れにします。
内容は最低限必要な要素。

index.html

<html>
<head>
<title>ファイルのアップロード STEP1</title>
</head>
<body>
<form action="./upload.php" method="POST" 
enctype="multipart/form-data" accept-charset="utf-8">
<input type="hidden" name="MAX_FILE_SIZE" value="10485760" />
<!--1024*1024*10 = 10MB-->
<input type="file" name="my_file" />
<input type="submit" value="ファイルの転送開始する" />
</form>
</body>
</html>

サンプル

パーツの説明

form action=””

データをアップロードするアドレスです。
ここではupload.php

form enctype=”multipart/form-data”

パートごとにデータを送りますという宣言。
これがないとfileタイプのデータを送れない。

form accept-charset=”utf-8″

文字コードの指定。
ファイル名ではまるので指定したほうが無難、というか必須。最近はほぼ全てutf-8が標準。
サーバーの環境に合わせる。

input type=”hidden” name=”MAX_FILE_SIZE” value=””

ユーザー側ブラウザにファイルのアップロードの最大サイズを指定する。
セキュリティ上は全く当てにならないが、ブラウザ側で最大サイズ以上を弾いてくれたりすることがある。
単位はバイト。

input type=”file” name=”your_file”

ファイルを選択するボタン。
複数あっても良い。

input type=”submit”

サブミットボタン。
単に「submi」というよりも、ユーザーにハッキリとアップロードすることが分かるようにした方が親切。

サーバーの設定など

基本的のどこのサーバーでも、サーバー側の設定でアップロードできるファイルサイズが決まっています。
ややこしいので別記事に。

サイトを一新しました。

ss

久々にUP300.netのサイトを一新しました。
主なアップデートは下記の通りです。

・全体のデザイン変更。機能は増やしましたが、表示される項目を減らしました。
・アップロードできるファイルサイズを1GBに増量。
・503が頻発することがあったので、サーバーの増強。
・chromeで動作しなかったプログレスバーの修正。
・保存期間を指定できるようにした。
・ダウンロード回数を指定できるようにした。
・ダウンロードページにアクセスした人の履歴を残せるようにした。(表示しない設定も可)
・ファイルをダウンロードした人の履歴を残せるようにした。(表示しない設定も可)
・最近アップロードしたファイル一覧を表示されるようにした。

追加しなかった機能

たまにご要望があるパスワード設定の機能ですが、基本的に意味が無く、使う人が一手間増えるだけと思われるので追加しませんでした。
メール送信機能、SSLも追加しませんでした。
以下詳細な理由。

パスワード機能を追加しなかった理由
・そもそもURLのハッシュ値が32桁もあるので、URLの取り扱いに気をつければ、あえてパスワードを増やす必要がない。
・例えばパスワードを使用する場合、URLをメールで伝え、電話などでパスワードを伝える必要があるが、実際そうされることが少ない。
(ありがちだが同じメールにURLとパスワードを記載しては何の意味もない)
またパスワードを一つに決め打ちしている会社もあるが、長く広く使い、セキュリティ的にはかなり弱い。
・パスワードとURLのハッシュ化で煩雑さは増えるが、一つのサービスに両方を依存すると(この場合up300.netのこと)万が一の場合意味がなくなる。パスワードZIP圧縮などし、リスク分散が一番適しているとおもわれる。
・しかし短縮URLを使用すると、URLが漏洩する可能性が飛躍的にアップし、パスワードがあったほうがよい。
ただ短縮URL+8桁程度のパスワードでは、32桁のハッシュ値URLの方が強度が強い。

メール送信機能を追加しなかった理由
・あったほうが便利なのは分かるが、
1.迷惑メールに分類される
2.メールアドレスの指定ミス
3.遅延
などの理由で届かず、データを送ったのに届いていないなど頻繁に起こる。
(実際に送信してないのにサーバー理由で送信出来なかったことを理由にできるメリットは残るが・・・・)
なので使用する人が問題の切り分けをすることが難しいため。
使用する人がURLを取得、メールの送信を別々することで切り分けでできる。

ただ今後、機能として追加すると思う。上記問題は解決できないので弱腰の機能になると思われる。

サイト名がおかしいという意見

サイト開設当時300MBのアップロードなので、up300と名づけましたが、現在は1GBです。
up1gb.netやup1000.netなども考えられますが、ややこしいので当分このままにします。

謝辞

Fontello
The WooThemes Blog
http://preloaders.net/

よくある質問 FAQ

よくある質問です。

機能として使用出来る範囲以外でのお問い合わせ、ご要望には法令に定めること以外、一切お応えできません。

Q.無料ですか?
A.
無料のサービスです。
ただし、サーバー圧迫回避のため、ファイルサーバーなどとしての利用はご遠慮ください。
Q.ファイルを復元して欲しい。
A.
一度削除されたり、ダウンロード期限が切れたり、ダウンロード回数を消費したファイルは即時サーバーからも削除されます。
ファイルの復元は一切できません。
Q.ファイル、ダウンロード履歴、アクセス履歴等を削除したい。
A.
ファイルの削除は、ダウンロードURLが分かっている場合、そのページからファイルを削除してください。
ダウンロードURLがわからない場合は、削除できません。

ダウンロードURL、ファイル名、ダウンロード履歴、アクセス履歴の削除には一切応じられません。
ダウンロード履歴、アクセス履歴はアップロードの際に、表示するか選択できます。

Q.使用者の情報、ファイルの中身をこっそり教えて欲しい。
A.
できません。
法令に定める警察、裁判所等以外の開示にはいかなる場合も応じられません。
Q.ダウンロードした人を教えて欲しい。
A.
ダウンロード履歴はダウンロードURLに表示できるような設定があります。設定をOffにした時は閲覧できません。
Q.個人情報を記録していますか?
A.
個人を特定できる情報は一切保管しておりません。
ただし、個人を特定出来ない範囲でアクセス記録を行なっております。
Q.機能追加要望、または個別提案がある。
A.
お知らせください。
ただし、内容によっては返信できない場合があります。
Q.プログラムのバグを見つけた。
A.
見つけて頂きありがとうございます。
お手数ですが、お知らせくださいませ。
Q.著作権法違反のファイルがある、もしくは疑いがある。
A.お手数をおかけいたしますが、ダウンロードページから削除してください。
ダウンロードページにアクセスできる場合は、誰でもファイルを削除することができます。
Q.重大な法令違反を犯している状態で利用者が操作できない場合
A.
お知らせください。
基本的に警察、裁判所等以外には対応できません。
Q.使っているブラウザから利用できない。
A.
モダンブラウザで利用できない場合は開発の手助けとなりますので、お知らせください。
古いブラウザは対応を諦めていますので、お手数ですが、違うブラウザをご使用ください。
Q.アクセス制限されているような気がする
A.
短期間に大量のファイルをアップロードすると使用できない場合があります。
数日後お試しください。
また、運営に影響ある場合、個別に制限させて頂くことがあります。
Q.サーバーがダウンしています。
A.
申し訳ございません。全力で復旧作業を行ないます。
Q.自社専用に似たようなサービスを作って欲しい。
A.
お問い合わせください。目安としてご予算100万円~程度になります。