「PHP/ファイル入出力」の版間の差分

削除された内容 追加された内容
HTMLのdownloadプロパティだ
ダウンロード関連の話題が長くなったので、節を分割。
192 行
 
== サーバーからのダウンロード ==
=== 概要 ===
PHPでダウンロードをブラウザに問いかけるには、下記のように header 関数というのを使って、ブラウザに問い掛けできる。
 
277 ⟶ 278行目:
 
 
*=== 豆知識など ===
PHPのここらへんの仕様は、あまり論理的ではなく、規則としてこう決まっていると思ったほうがいい。
 
316 ⟶ 317行目:
 
 
 
* 実際の例
* ソケット通信
高度なので説明を省略するが「ソケット通信」というパソコンどうしのネットワーク通信の際、HTTPサーバーとの通信方法は国際規格などで方式が決まっており、HTTPヘッダといわれるメッセージで命令を送受信する仕組みである。
 
PHPはソケット通信のための関数をサポートしており、そのソケット通信の関数の一部としてHTTPヘッダの関数も用意されており、本ダウンロードのコードではそれらの機能を流用している。
 
 
なお、サーバー系の言語としてPHP同様に有名な Perl という別言語もまた、ソケット通信の関数をいろいろとサポートしている。
 
 
 
*=== 実際の例 ===
上記のコードだと、ページが表示される前にダウンロードが始まってしまう。そのため、とても見づらくなる。
 
338 ⟶ 350行目:
 
 
*== HTMLのdownloadプロパティ ==
2020年の近年、じつはダウンロードするだけなら、PHPなどを用いなくても、HTMLのHTML5で追加されたdownloadプロパティ 属性だけで実装できるようになっている。
 
HTML5では a タグに download 属性が追加された。
 
 
;コード例
346 ⟶ 361行目:
</syntaxhighlight>
::(2020年5月18日 に Fedora 32 上でのブラウザ Firefox76 で動作確認。)
のようにhrefのハイパーリンクのあるタグに download プロパティ属性を追加するだけでも、実は簡単にダウンロードを実装できるようになっている。
 
なお、href で、コンテンツ名およびコンテンツの場所を指定する。コンテンツの場所がともにHTMLとともにドキュメントルートにあるなら、単にコンテンツのファイル名だけでよい。
 
上記コードの場合、単に「ダウンロード」をクリックするだけで、画像のダウンロードが開始する。
 
 
 
* ソケット通信
高度なので説明を省略するが「ソケット通信」というパソコンどうしのネットワーク通信の際、HTTPサーバーとの通信方法は国際規格などで方式が決まっており、HTTPヘッダといわれるメッセージで命令を送受信する仕組みである。
 
PHPはソケット通信のための関数をサポートしており、そのソケット通信の関数の一部としてHTTPヘッダの関数も用意されており、本ダウンロードのコードではそれらの機能を流用している。
 
 
なお、サーバー系の言語としてPHP同様に有名な Perl という別言語もまた、ソケット通信の関数をいろいろとサポートしている。
 
== 参考文献 ==