【ワレコ備忘録】PHP・HTMLの豆知識 – PHPのfile()とHTMLのtbodyについて

この記事は約7分で読めます。
スポンサーリンク

当記事では、ワテが最近覚えたPHPやHTMLの豆知識を紹介したい。

では、本題に入ろう。

スポンサーリンク
ワテ推薦のプログラミングスクールで学ぶ
スポンサーリンク
スポンサーリンク

<table></table>の中に<tbody> 要素を入れる場合の注意事項

Mozilla Developer Networkによると、

<tbody> の許可された親要素は <table> 要素

まあ、これは分る。

<table></table>の中に<tbody></tbody>を入れておけば良いのだ。

 

ところが、

<tbody> は <caption> 要素、<colgroup> 要素、<thead> 要素または <tfoot> 要素の後に配置しなければなりません。

引用元 https://developer.mozilla.org/ja/docs/Web/HTML/Element/tbody

と説明されている。

 

つまり、これはエラーになる(下図)。<thead>などが無いからだ。

<table>
   <tbody>
      ...
   </tbody>
</table>

 

これなら正常。

<table>
   <thead>
      ...
   </thead>
   <tbody>
      ...
   </tbody>
</table>

 

さて、WordPressの場合には、簡単なテーブルを作成すると、一つ前に例にあげたテーブルのように、<thead>無しでいきなり<tbody>で始まるテーブルが作成される。

なので、HTMLの文法チェックをしてくれる有名なサービス

Markup Validation Service
Check the markup (HTML, XHTML, …) of Web documents
https://validator.w3.org/

に掛けると、エラーが出る。

 

対策としては、テーブルを作ったら、必ずテーブルヘッダーを作成する習慣を付けておくと良い。

でも中にはヘッダーが無いテーブルも作りたい場合があるので、根本解決にはならない。

そう言う場合時はどうするべきなのかな?

こんな小細工をすればいいのかな?

<table>
   <thead style="display:none;"></thead>
   <tbody>
      ...
   </tbody>
</table>

分からん。

なお、本日(2019/1/28)の時点で最新のWordPress 5.0.3でもやはりtheadが無いのにtbodyのみのtableが生成されるようだ。

PHPでテキストファイルを配列に読み込むなど

PHPは、一時猛烈に勉強したのだが、ワテが使っているVisual Studio 2017 Community の環境でPHPを使う為には有料製品が必要になる。

PHP Tools for Visual Studio

だ。

一ケ月の無料お試し期間が切れると、デバッガーが使えなくなるけれども、実行する事は可能だ。またエディタのインテリセンスも使える。

と言う事でお試し期間が切れているので、デバッガーが使えないのでPHPプログラミングはあまりやらない。

でも、WordPressのカスタマイズなどの場合にPHPが必要なので、今日久しぶりに使ってみた。

PHPでファイルを読み込む処理はワテの場合、あまり経験がない。

file()関数 テキストファイルを配列に読み込む

ファイル全体を配列に読み込むには、file()関数を使えば良いみたい。

  array file ( string $filename [, int $flags = 0 [, resource $context ]] )

引用元 http://php.net/manual/ja/function.file.php

例えばこんな感じか。

   $lines = file($pathFileName,
                 FILE_IGNORE_NEW_LINES |FILE_SKIP_EMPTY_LINES));

 

この二つのオプションを付けておくと空白行を除去出来た。

FILE_IGNORE_NEW_LINES 配列の各要素の最後に改行文字を追加しません。

FILE_SKIP_EMPTY_LINES  空行を読み飛ばします。

注意:
FILE_IGNORE_NEW_LINES を指定しない限り、 配列に取り込まれた各行は行末文字も含みます。 行末文字を取り除きたい場合には rtrim() を使用する必要があります。

引用元 http://php.net/manual/ja/function.file.php

 

例えば、こんなファイルの場合には、

文字列1[CR][LF]

文字列2[CR][LF]
文字列3[CR][LF]

[EOF] 

三つの文字列要素を持つ配列 $lines が出来る。

"文字列1"
"文字列2"
"文字列3"

 

もしFILE_IGNORE_NEW_LINESオプションを付けないと、配列データの中に[CR]が読み込まれるようで、空白行を除去出来なかった。

 

空白行を除去したうえで、一行の文字列に連結したい場合には、こんな感じか。

   $lineJoin = implode('', file($pathFileName, 
                 FILE_IGNORE_NEW_LINES |FILE_SKIP_EMPTY_LINES));

 

 

readfile — ファイルを出力する

ファイルを読む別の関数として、

(PHP 4, PHP 5, PHP 7)
readfile — ファイルを出力する

説明

int readfile ( string $filename [, bool $use_include_path = false [, resource $context ]] )

引用元 http://php.net/manual/ja/function.file.php

と言うのも使ってみたが、これだとファイルを読み込んで標準出力に書き出すだけなので、空行を除去出来ないようだ。

それで冒頭のfile()を使ってみたら上手く行った。

 

ファイル関連のもう一つ別の関数もある。

file_get_contents — ファイルの内容を全て文字列に読み込む

(PHP 4 >= 4.3.0, PHP 5, PHP 7)
file_get_contents — ファイルの内容を全て文字列に読み込む

説明 

string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = 0 [, int $maxlen ]]]] )

この関数は file() と似ていますが、 offset で指定した場所から開始し maxlen バイト分だけ ファイルの内容を文字列に読み込むという点が異なります。

失敗した場合、file_get_contents() は FALSE を返します。

引用元 http://php.net/manual/ja/function.file.php

offsetとmaxlenを指定出来る点が便利そうではあるが、今回のワテの用途では、空行を除去したかったのでこの関数は使わなかった。

また別の機会に使ってみるかな。

まとめ

PHPのデバッガーを使いたいのだが、マイクロソフト社純正のツールは無いのかなあ。

あるいはXamarinがマイクロソフト社に買収されて無料でVisual Studioに組み込まれたように、PHP Tools for Visual Studioの開発元を買収してこのツールも無料でVisual Studioに組み込んでくれると、ワテとしてはとっても嬉しい。

ワテもPHPの本を買ってみるかな。

30時間でPHPが覚えられるのか?

スポンサーリンク
ワテ推薦のプログラミングスクールで学ぶ
コメント募集

この記事に関して何か質問とか補足など有りましたら、このページ下部にあるコメント欄からお知らせ下さい。

HTMLPHP
スポンサーリンク
warekoをフォローする
スポンサーリンク
われこ われこ

コメント