PHPには、CGI版とモジュール版がある

レンタルサーバのPHPの設定を見ると、

CGI版

モジュール版

とあります。

なんなんだ?

PHP公式のページ?を参照すると

サーバーに PHP を組み込む方法が 2 種類あります。多くのサーバーに対して、各サーバー独自のモジュールインターフェイス (SAPI とも呼ばれます) を通じて、ダイレクトに PHP を動作させることができます。 Apache、Microsoft Internet Information Server、 Netscape、iPlanet サーバーなどがサポートされています。 ISAPI と呼ばれるマイクロソフト互換のモジュールインターフェイスを 持つ Web サーバー(OmniHTTPd など)もサポートされます。 PHP がモジュールのサポートをしていない Web サーバーに対しては、 CGI もしくは FastCGI プロセサとして PHP を使用することができます。つまり、PHP ファイルへのリクエストの処理を、 PHP のコマンドライン版の実行ファイルを使って行うよう Web サーバーを設定することができます。

https://www.php.net/manual/ja/install.general.php

CGI版のPHPの動き

  1. ユーザからWEBサーバにリクエスト(例、ホームページにアクセスする)
  2. 1のリクエストを受け取ると、WEBサーバがCGI(プロトコル)の仕組みを利用してPHPを実行する。
  3. WEBサーバがCGI経由のPHPの実行結果をユーザに返す。

モジュール版のPHPの動き

  1. ユーザからWEBサーバにリクエスト(例、ホームページにアクセスする)
  2. 1のリクエストを受け取ると、WEBサーバが直接PHPを実行する。
  3. WEBサーバがPHPの実行結果を、ユーザに返す。
CGI版FastCGI版モジュール版
実行速度遅い速い速い
php.iniの読込毎回プロセス生成時初回のみ
php.iniを変更した場合サーバの再起動が必要
CGI版とモジュール版の比較結果

CGIは、リクエストがあるたびに、プロセスが1つ生成され、完了したらプロセスが破棄される仕組み。プロセスの生成と破棄は、負荷が高い処理。

モジュールは、WEBサーバの機能として組み込まれているため、そのまま実行して完了できる。プロセスの生成と破棄といったことはない。

CGIは、改良されたFastCGIと呼ばれるものがある。FastCGIは、初回起動したプロセスを一定時間保持して利用することにより、プロセスの生成と破棄を毎回行わない。モジュール版のPHPと同等の速度がでる。

よし!今日も1つ知らないことがわかって、頭が賢くなった気がしました。

色々なデバイスでフルスクリーン(表示画面いっぱい)の中央に画像を配置したい

画面上下中央にローディング画像を表示したかったので調べてみました。

前提知識として知っておきたいこと

ビューポート!

最近は、PC以外にスマホ、タブレットなど複数のデバイスがあなたのWEBサイトを閲覧します。ときどき、スマホでWEBサイトを閲覧すると、小さい画面が表示されたりしたことはないでしょうか?そうです。ビューポートが設定されていないからです。ビューポートを使用すると、様々なデバイスの表示に対応することができます。

ビューポートの使用例

width=device-width を追加して、デバイス非依存ピクセルで画面の幅を合わせます。

initial-scale=1 を追加して、CSS ピクセルとデバイス非依存ピクセルが 1:1 の関係になるように指定します。

https://developers.google.com/web/fundamentals/design-and-ux/responsive/?hl=ja

↑とてもわかりやすい説明でしたので、引用させてもらいました。

ビューポートを使用して画面中央に配置する

<meta name="viewport" content="width=device-width, initial-scale=1">

ヘッダに、ビューポートの設定をします。デバイスにより広い、狭いがあるがあるが自動的に画面の幅をデバイスの幅にあわせる設定をしてます。

{
   width: 100vw;
   height: 100vh;
   background-image: url(loading.gif);
   background-repeat: no-repeat;
   background-position: center center;
}
プロパティ名説明
vwビューポートの幅を設定。1/100 で設定する。
vhビューポートの高さを設定。1/100 で設定する。

ビューポートの幅と高さに対して100を設定(画面いっぱい)にしてから、上下中央にローディング画像を配置する。

viewport

metaタグのviewportとは

モバイルブラウザの表示方法を制御する。 モバイルブラウザは、viewportの指定がない場合、デスクトップサイズの幅で表示する。 結果、文字が小さいなどの表示くずれが発生する。  

推奨設定

<meta name="viewport" content="width=device-width, initial-scale=1">
width=device-width
モバイルデバイスにあった領域の幅を設定。レスポンシブ!
initial-scale=1
初期のズームサイズの設定
device-widthとinitial-scale=1で、モバイルデバイスの幅とWEBページの幅を同じとする。

そのた

オプションは、他にもあるが基本的に使用しない。使用しない理由は、ユーザの操作を制限するため使いにくいと感じる。ってグーグル先生が言ってた。。。

例外処理

例外処理、あたりまえのように使用していましたが、他人のプログラムを見たときにどういった場合に例外処理を使用していいのか、ふと疑問に思いました。 一度きっちり整理して自分なりにまとめたいと思います。

メリット

wiki を参考に 戻り値は、無視できるため、例外処理にすると確実にエラーを発生させることができる。 エラーコードの制限(例、戻り値int 32ビット)をなくすことができる。 呼び出し側で毎回エラーの戻り値チェック(判定文)をなくすことができる。

やってはいけないこと

エラー処理以外で使用すること。   上記から、なんとなくわかってきたが

いつ例外処理を使用するのか

状況により判断する。 例えば、ファイルが存在しない場合は例外とするのか? 1.前提として、ファイルが存在することは確定している場合、例外処理 2.前提として、ファイルが存在するかしないかわからない場合、通常のエラー処理    

メモ

w3c日本語訳
    

 

グループコンテンツ

<ol>

項目の順序が決まっている場合

<ul>

項目の順序が重要でない場合

<dl>

dl要素は、0個以上の名前-値グループ(記述リスト)から成る連想リストを表す

<p>

段落

<div>

div要素は、一切特別な意味を持たない。適切なタグがない場合、デザインを当てはめる目的のみ使用するのがいい。
参考リンク

https://momdo.github.io/html5/

文章構造 article section p nav

サンプル

<header>
 <h1>Navigation</h1>

 <nav> 
  <ul>
 	<li>リスト1</li>
 	<li>リスト2</li>
  </ul>
 </nav>
</header>

<article>
 <h1>車について</h1>
 メーカー別に...

 <section>
   <h2>トヨタ</h2>
   <p>.....</p>
 </section>
 <section>
   <h2>トヨタ</h2>
   <p>.....</p>
 </section>
</article>

<footer>
  コピーライト@ビットリンク
</footer>
articleタグ
article要素は、文書、ページ、アプリケーション、またはサイトの中で完全もしくは自己完結した構造を表す。 ページの主要コンテンツ(すなわちフッター、ヘッダー、ナビゲーションブロック、およびサイドバーを除く)が、すべて単一の自己完結型の構成物である場合、コンテンツはmain要素でマークアップされるべきであり、かつコンテンツはまたarticleでマークアップされてもよいが、(単一の文書であるように、ページが単一の構成物であることは自明なので)この場合は技術的に冗長である。
sectionタグ
section要素は、文書またはアプリケーションの一般的セクションを表す。この文脈においてセクションは、主題を表すコンテンツのグループである。
pタグ
段落。文章のひとかたまり。
navタグ
他のページへのリンク、ページ内リンクをもつセクションに使用する。 fotterタグは、一般的に上記意味あいをもっているため、使用するのは冗長である。