サンプル・プログラム
変換対象の URL を入力し[変換]ボタンを押すと、変換され、テキスト・ファイルを保存するか否かを問い合わせてくる。
解説:HTTPヘッダ
0076: header('Content-Disposition: attachment; filename=download.txt');
0077:
ただし、後半はテキストファイルを出力するため、HTML 形式ではなくなる。そこで、前半部分に HTML を構成する<!DOCTYPE html>~</html>をすべて入れてある。

組み込み関数 header が、テキスト・ファイルを出力するための肝である。
header は、サーバが HTML コンテンツを送信する前に付加する HTML レスポンス・メッセージのメッセージ・ヘッダ――HTTP ヘッダ――を出力するための関数である。
"download.txt" という名前のテキスト・ファイルを、サーバからクライアントに向かって送信するには、サンプル・プログラムのように記述する。

サーバから送られてきた拡張子 ".txt" のファイルに対してクライアント側がどのように動くかについては、ブラウザの MIME 設定による。一般的なブラウザでは、ファイルを保存するようなメッセージが出る。

ここで、HTTP ヘッダについて簡単に説明しておこう。
通常の HTML コンテンツの場合、以下のようなメッセージ・ヘッダが返る(サーバは Apache)。
HTTP/1.1 200 OK
Date: Thu, 20 Mar 2003 11:03:45 GMT
Server: Apache
Last-Modified: Mon, 10 Mar 2003 05:58:20 GMT
Connection: close
Content-Type: text/html
これが gif ファイルだと以下のようになる。
HTTP/1.1 200 OK
Date: Thu, 20 Mar 2003 11:03:45 GMT
Server: Apache
Last-Modified: Mon, 10 Mar 2003 05:58:20 GMT
Connection: close
ETag: "833be-ae7-383bb23c"
Accept-Ranges: bytes
Content-Length: 12345
Content-Type: image/gif
テキスト・ファイルを送る場合は、header("Content-Type: text/txt") とするだけでも十分なのだが、そうすると、保存ファイル名が php ソースと同じ名前になってしまう。
解説:HTMLタグを除く
0084: while (! feof($infp)) {
0085: $str = fgets($infp, 1000); //最大1000バイトを読み込む
0086: $str = strip_tags($str); //HTML および PHP タグを取り除く
0087: $str = mb_convert_encoding($str, INTERNAL_ENCODING, 'auto');
0088: $str = trim($str); //空白文字を除く
0089: if (strlen($str) > 0) print $str . "\n"; //0文字以上なら出力する
0090: }
HTML や PHP タグを取り除いて 1行を読み込むのに、 fgetss を使っていたが、この関数は PHP7.3 から非推奨になったため、 fgets と strip_tags 関数に置き換えた。
strip_tags 関数は、オプションで一部のタグを残しておくこともできる。table, tr, td タグのみを残しておきたいなら、strip_tags($str, "<table><tr><td>") のように記述する。

次に、入力された文字列を内部エンコード INTERNAL_ENCODE に変換する。この処理は関数 mb_convert_encoding を使えばよい。
そこで今回は、インターネット上の HTML コンテンツをシフト JIS のテキスト・ファイルに変換するプログラムを作ってみることにする。
(2021 年 2 月 6 日)PHP8 対応