PHPのファイルアップロード処理
”PHPのファイルアップロード処理”のupload_max_filesize
ディレクティブの説明に加筆しました。
ページの背景として設定した画像を印刷にも反映させるための小技
需要があるかどうかは分かりませんが、img
タグでHTMLに埋め込まず、CSSを利用して背景として読み込む設定にした画像を、ページを印刷する時にも反映させるためのちょっとした小技を紹介します。
導入
まず、今回の小技がどう役立つのかの状況説明。
- 背景に設定(CSSにおいて
background
プロパティで指定)した画像は、ページの印刷時には反映されない。(読み込まれない) - 画像の右クリック保存防止*1のため、または文書構造上の配慮などから
img
タグを用いず、CSSからブロック要素の背景として画像を読み込む構成にした場合に、それらの画像を印刷時のページにも反映したい。
こういった状況下において、今回の小技は何らか役に立つのではないかと思われます。
因みに、この小技を実施する上では、
- 印刷ページ用のCSS定義を行う
というのが大前提です。
そもそも、印刷ページ専用のCSS定義を行っていないページというのが、かなり多いのが実情かもしれませんが、本件を実施するに当たっては、まず印刷ページ専用のCSS定義を行うことになります。
方法としては、@media
ルールを用いてメディアタイプにprint
を指定し、その中に各スタイル定義のプロパティを指定するという形になります。((因みに、メディアタイプにscreen
を指定すると、通常のモニター表示に対するスタイルとなります。))
@media print {
property : value ;
:
:
}
コード例
ここでは以下のサンプルコードをそれぞれ、”test.html”、”default.css”に保存するものとします。
HTML(test.html):
<html>
<head>
<title>test</title>
<link rel="stylesheet" type="text/css" href="default.css" />
</head>
<body>
<div id="cover">
<h1>タイトル</h1>
<p>本文</p>
</div>
</body>
</html>
CSS(default.css):
@media screen {
body {
background-image: url("bg_img.jpg");
}
}
@media print {
div#cover:after {
content: url("bg_img.jpg");
}
}
解説
この例では、単純にモニター表示用の背景画像を、印刷時に単独の画像として印刷に反映させることしかしていませんが、これに表示位置制御のスタイルを適応するなど、応用次第では色々使い道があるのではないかと思います。
ポイントとしては、モニター表示用にはbackground
(background-image
)プロパティでurl()
関数を使用して読み込んだ画像を、印刷時にはcontent
プロパティに設定して読み込む、という点です。
因みに、content
プロパティは:before
または:after
の擬似要素が適応対象となるので、content
プロパティを用いる時は、セレクタに:before
または
:after
を付加するのをお忘れなく。
:before
と:after
の違いは、付加したセレクタ要素内のコンテンツの、先頭にcontent
でしたコンテンツが付加されるか、末尾に付加されるかの違いです。
div#cover:before
[bg_img.jpg]
タイトル
本文
div#cover:after
タイトル
本文
[bg_img.jpg]
注意点
現状でテストした限りですと、この小技はIEでは反映されない模様です。*2画像分のスペースは空けられてレイアウトされるようですが、画像自体は表示されません。著作権に対する配慮などからなのでしょうか。
なお、IE以外のFirefoxやGoogle ChromeなどWeb標準に準拠する意思のあるブラウザでは正常に反映されます。
ですので、IEユーザをあえて締め出したいWebデザインの場合などに是非ご活用下さい。;-)
DNSについて
リゾルバ
DNSサーバ
検索要求の種類と処理の流れ
DNS情報管理の実際
DNSのセキュリティ対策
用語解説
DNS関連用語の解説
- 名前解決
- IPアドレスとホスト名をマッピングして相互解決すること。
- ドメインツリー
- 名前解決を分散協調して行うための、DNSサーバによって構成される概念。
各ドメインを管轄するDNSサーバは、リゾルバの問い合わせに対して、自身の管理するドメインの情報やサブドメインのDNSサーバ名を返答し、リゾルバはそれらの情報を元にドメインツリーを下位方向に向かって問い合わせを再帰的に繰り返すことで、目的の名前を解決することができる。 - 名前空間 (ネームスペース)
- ある実体を一意に決定付けるための、構造化された名前によるデータ構造。
- DNS名 (ドメイン名)
- 各ノードの管轄するドメイン(領域)を示す名前空間の名前。
上位ドメインのドメイン名を、ピリオドで区切られた階層構造をなして含む。
また、”.”(ルートノード)を起点として右から左に記述される。
”.”(ルートノード)から記述されたものを、絶対パス形式といい、これが無い場合は、相対パス形式であるとみなされる。
(ただし、Webブラウザなどではデフォルトでルートノードがスタートポイントとみなされるので、通常は省略される。) - ホスト名
- ドメインツリーに属する各ノードが持つ名前。また、各ホストを示すDNS名。
ホスト名は各ノードのドメイン内でのユニーク性さえ保証されれば、DNS全体でのユニーク性も保証される。 - FQDN (Fully Qualified Domain Name)
- ドメインツリー上のTLDからの位置を完全な形で示すDNS名。
ex) ┏サードレベル・ドメイン ┃ ┏セカンドレベル・ドメイン(SLD) ┃ ┃ ┏トップレベル・ドメイン(TLD) ┃ ┃ ┃ ┏ルートノード www . example . com . │ ↓ └─┬─┘ │ ホスト名 + DNS名 = FQDN(ホスト名) ↓ └────┬────┘ ホスト名 + DNS名 = FQDN(ホスト名) └──────┬──────┘ DNS名
※ ホスト名とDNS名(FQDN)の扱いの違い
→ ホスト名は対応するホスト(アクセス可能な実体)が存在すること前提で用いられる呼称であり、DNS名は必ずしも対応するホストが存在する必要はなく、あくまでDNS上の管理領域区分を示すための呼称である。
- サブドメイン
- ドメインツリーにおいて、自身の下位に位置するドメイン。
- DNSサーバ
- ドメインツリー上の各ノードに位置し、自身の管理するドメインの情報やサブドメインのDNS名を返答する”コンテンツサーバ”と、クライアントからの検索要求を受けて、コンテンツサーバに対して再帰検索を行い、名前解決を行う”キャッシュサーバ”がある。
また、クライアントからの検索要求を受け付けるが、自身では検索を行わず、他のキャッシュサーバへ検索要求を転送して、その結果をクライアントに返答するのみの”スレーブサーバ”というものもある。 - リゾルバ
- DNSサーバへ問い合わせを行うDNSクライアントのこと。
- ルートサーバ
- 各TLDのネームサーバ情報を保持し、ドメインツリーの頂点に位置するDNSサーバ。
再帰検索を行う際、一番初めに問い合わせを行う場所。
”*.ROOT-SERVERS.NET”のドメイン名を持ち、世界にA〜Mの13種類のホストが存在する。 - プライマリ・サーバ
- ゾーン情報を記した”ゾーンファイル”を起動時にローカルから読み込むコンテンツサーバ。
- セカンダリ・サーバ
- ゾーンファイルを、プライマリサーバからゾーン転送により取得するコンテンツサーバ。
- 権限委譲 (delegation)
- 各レベルのDNSサーバは、それぞれ自身が直接管理するドメインの情報(サブドメインを管理するDNSサーバ名を含む)のみを保持し、それ以下のサブドメインにどのようなホストが含まれるかについては関知せず、それぞれのレベルのDNSサーバを信頼して管理権限を任せる性質のこと。
- 上位ドメインより、そのドメインを管理しているDNSサーバとして認められ、NSレコードにて指定されている状態であることを示す概念。
上位ドメインのDNSサーバのNSレコードに指定されることを”オーソリティを付与される”という。 - ゾーン転送
- DNSコンテンツサーバの信頼性向上のための多重化を行う際、管理コスト低減のために、プライマリサーバが管理するゾーン情報をセカンダリサーバへ、コピーを行うことをいう。
ゾーン転送に関する更新間隔などの設定情報はSOAレコードに記されている。
関連団体
- ICANN (Internet Corporation for Assigned Names and Numbers)
- 1998年設立のドメイン名・IPアドレス・ポート番号等の管理業務を担う非営利団体。
民間の非営利団体であるが、歴史的経緯により米商務省の影響下にあるとされている。
cf. インターネットガバナンス - 米国商務省電気通信情報局(NTIA:National Telecommunications and Information Administration)
- DNSのルートサーバレコードの管理権を持ち、ICANNに管理監督権を付帯している。
⇒2016/10/1、IANA機能の監督権限をICANN(グローバルなマルチステークホルダーコミュニティ)に移管。
http://internet.watch.impress.co.jp/docs/news/1022940.html - IANA (Internet Assigned Numbers Authority)
- ICANNが設立される以前、IPアドレス・ドメイン名などの管理運営を行っていた組織。
ジョン・ポステルが南カリフォルニア大学のISIにおいて米国防総省との契約のもと開始した。
1999年からICANNの下部組織となり、2000年2月に機能をICANNへ移す。
http://en.wikipedia.org/wiki/Internet_Assigned_Numbers_Authority
http://www.nic.ad.jp/ja/basics/terms/iana.html - InterNIC (Internet Network Information Center)
- かつてNetwork Solutions社が、唯一のドメイン登録事業者であった時に使用していた名称。
元は全米科学財団のネットワークインフォメーションセンターの機能強化プロジェクトの名称。
Network Solutions社はそこで登録サービスの担当をしていたことに由来する。
- JPRS (日本レジストリサービス)
- jpドメインの登録管理業を行う会社。
- JPNIC (日本ネットワークインフォメーションセンター)
- ICANNの日本における連絡役。
2002年3月までjpドメインの登録管理を行っていた。現在は後援。 - WIDE (Widly Integrated Distributed Environment) プロジェクト
- DNSのルートサーバの一つである”M.ROOT-SERVERS.NET”を管理している。
- JUNET (Japan University NETwork)
- TCP/IPによるインターネットの導入以前に存在した、日本国内の学術組織を結ぶ、UUCPによるコンピュータネットワーク。
JPドメイン導入以前に.junetというドメインが用いられ運用されていた。
また、このネットワークで用いられていた日本語表現のための文字エンコーディングが現在のISO-2022-JPであり、当初はJUNETコードと呼ばれていた。
インターネットリソースの管理組織
<ドメイン名> ┏ レジストリ ─ レジストラ ICANN ┫ ┗ IANA ─→ RIR ┬ NIR 委託 │ └ LIR └ LIR <IPアドレス> ┌ ARIN(北アメリカ担当) ├ RIPE NCC(ヨーロッパ、中東、中央アジア担当) NRO ──┼ APNIC(アジア・太平洋地域担当) │ ├ JPNIC │ │ └ ISP │ └ ISP ├ LACNIC(ラテンアメリカ、カリブ海地域担当) └ AfriNIC(アフリカ担当)
- レジストリ
- ドメイン名の登録管理を行っている団体。
TLDごとに担当する団体が存在する。 - レジストラ
- ドメイン名の登録を仲介する業者。
レジストラ業務を行うのは、ICANNの認可を受けた業者、または、ccTLDの場合には各ccTDLレジストリの認可を受けた業者である必要がある。
- RIR (Regional Internet Registry: 地域別インターネットレジストリ)
- 世界を5つの地域に区分し、各々の地域に属する国に対して、インターネットリソースの配分と登録を管理する組織。
- NIR (National Intarnet Registry: 国別インターネットレジストリ)
- 一部の国に置かれている、国ごとにインターネットリソースの管理を行う組織。
その国の属する地域のRIR配下に置かれている。 - LIR (Local Internet Registry: ローカルインターネットレジストリ)
- 実際にエンドユーザに対して、インターネットリソースの割り当てを行う組織。
一般的に、ISPがこの役割を担う。
- NRO (Number Resource Organization)
- 5つのRIR間の調整と取りまとめを行う非営利団体。
各RIR選出の代表およびオープンフォーラム選出の代表から構成される。
PHPのファイルアップロード処理
HTTPアップロードの設定
php.iniの設定
- file_uploads
- HTTPアップロードの有効無効の切り替えを行う。
ファイルサイズの制限設定
php.iniの設定
Apache設定
HTML内の指定
- HTML中のINPUTタグ (
type="hidden" name="MAX_FILE_SIZE" value="*****"
) - ブラウザ側でのアップロードファイルの容量制限に用いる。
- ※ 最近のブラウザではこの指定を無視するものが多い。
パース処理時間の制限設定
その他の時間制限の設定
処理の流れ
Timeout ⇒ max_input_time ⇒ max_execution_time 入力待ち 入力受付け中 処理実行
アップロードファイルの処理手順
- アップロードファイルの情報取得
⇒ オートグローバル変数”$_FILES”により取得。 - アップロードファイルの検証および移動
⇒is_uploaded_file()
により、テンポラリディレクトリに保存されたファイルを検証。
または、move_uploaded_file()
により、任意の恒久的な保存領域へ移動。
cf.- テンポラリディレクトリはupload_tmp_dirディレクティブで指定した場所。
- 一時保存されたファイルのパスは$_FILES['userfile']['tmp_name']で参照可能。
- 処理対象のファイルであるかフィルタリング。
⇒ サイズ、MIMEタイプ、エラーコードなどに基づき分別。 - ファイルの処理