楽しいだけで十分です

好きなことを書きます

SPL (Standard PHP Library)って?

「SPL」という単語をちょいちょい見かけるのですが、何か分からなかったので、調べてみました。

SPLとは

  • PHP用の標準的なクラスライブラリです。
    • クラス ライブラリというのがポイントで、一部の関数やインターフェイスを除いて、ほとんどがクラスとして定義されています。
  • ライブラリの内容としては、標準的な問題を解決するためのクラスなどが集められています。
    • 例えば、spl_autoload_register()関数は、__autoload()関数ではできない、オートロードの処理をコールバック関数の形式にできます。
  • PHP5.0.0以降の場合、デフォルトで導入されているため、外部ライブラリなどは不要です。

参考

PHP: SPL - Manual

vol.8 ‐ PHP『Standard PHP Library(SPL)について』 | 特集・コラム特集・コラム

PHPの変数展開は、{$variable}構文を使うのがいいみたいです

同僚さんから、「PHPの変数展開は、{$variable}構文で書くのがいいよ」と教えてもらったので、メモ。
ちなみに、ちゃんとはまだ分かってません・・・難しい。

PHPの変数展開は3種類ある

  1. 単純な構文
  2. 複雑な構文 ({$variable} タイプ)
  3. 複雑な構文 ({$expr} タイプ)

ちなみに、単純と複雑という名前は記述方法の難易度ではなく、表現できることの範囲を表してるらしいです。
PHP: 文字列 - Manual

1. 単純な構文

  • ドル記号($)を見つけると、$の後ろに続く文字列から、パーサーが変数名を形成できることが可能な最長のトークンを取得します。
  • []による配列の指定は可能ですが、次のことができません。
    • インデックスをクォートで囲めない
    • 多次元配列を指定できない
  • プロパティにアクセス可能ですが、次のことができません。
    • プロパティの配列要素を指定できない
    • プロパティのプロパティを指定できない

2. 複雑な構文 ({$variable} タイプ)

  • {$文字列}の形になっている時に、変数を展開してくれます。
  • 基本的に、通常のPHP構文の中で$から始まる変数参照はすべて使えます。

3. 複雑な構文 ({$expr} タイプ)

  • 通常の変数参照だと、1.単純な構文よりできることが少ないです。
  • しかし、${から}までの間の文字が、変数名として有効ではない場合は、${から}の間がPHPの式として評価されるという機能を持っています。
<?php

${". ."} = 'hoge';  // 変数名が、`. .`(dot space dot)という変数に、'hoge'を代入
echo ${". ."};      // 上の行で代入した、'hoge'を出力

まとめ

とりあえず、{$variable}構文で書こう!!!

参考

d.hatena.ne.jp

SSHクライアントの設定の読み込み順をまとめる

SSHクライアント(sshやscpなど)の設定の読み込み順をまとめます。

[前提知識] クライアントの設定方法

クライアントの設定方法には、次の3種類があります。

  • コマンドラインのオプションを指定
  • ユーザーコンフィグファイル(~/.ssh/config)に記述
  • ホストコンフィグファイル(/etc/ssh/.ssh_config)に記述

設定の優先順位

設定の読み込む順番は次のものになっています。 (先に読み込んだ設定が優先される)

  1. コマンドラインオプション
  2. ユーザーコンフィグファイル
  3. ホストコンフィグファイル

ここでの重要なポイントは、コンフィグファイルがどのような設定になっていても、コマンドラインのオプションが最優先されることです。

補足

  • コマンドラインオプションの中で、同じオプションや設定が複数指定されている場合は、最後に記述されているものが優先されます。
  • コンフィグファイルの中で、同じ設定項目が複数ある場合は、先に評価されたものが優先されます。
  • コマンドラインにも、コンフィグファイルにも記述されていない動作は、デフォルトの設定が採用されます。

参考

OpenSSH[実践]入門:書籍案内|技術評論社

SSHクライアントのコンフィグファイルをまとめる

SSHクライアントのコンフィグファイルをまとめてみました。

ディレクトリ単位の分類

コンフィグファイルを含むディレクトリとしては、以下の2つに分類されます。

パス 役割
~/.ssh ユーザー個別の設定ファイルを置くディレクト
/etc/ssh 全ユーザーに影響する設定ファイルを置くディレクト
全ユーザーの動作を決めるディレクトリであるため、管理者(root)のみが編集できるようにパーミッションを変更しておくことが推奨

~/.ssh/ に置かれるファイルの説明

  • .ssh/known_hosts
    • ユーザーが過去にログインしたリモートホストのホスト公開鍵が保存されます。
    • 「ホスト公開鍵データベース」とも呼ばれます。
  • .ssh/config
    • SSHクライアントのコンフィグファイルです。
  • .ssh/rc
    • ユーザーがログインした時に、ユーザーのシェル、あるいはコマンドが実行される前に、実行されるファイルです。
  • .hushlogin
    • このファイルが存在する場合、ユーザーが対話的にログインした際に表示されるメッセージを表示しません。

/etc/ssh に置かれるファイルの説明

  • .ssh_config
    • SSHクライアントのコンフィグファイルです。
    • 全ユーザーに適用できるファイルであるため、オプションを省略した時のデフォルトの動作などを記述しておくことができます。
    • e.g. どのリモートホストに接続するときでも、認証エージェント転送を有効にする場合の設定
Host *
 ForwordAgent yes

参考

OpenSSH[実践]入門:書籍案内|技術評論社

OpenSSHでログインできるまでの流れ

SSHをなんとなくで使っていて、サーバーと接続できないとなった時に、どこから調べたらいいんだろうな?ってことがままあったので、お勉強を始めてみました。

ひとまずSSHでログインできるところまでの流れをまとめます。
なお、OpenSSHのプロトコルバージョン2の話です。

全体の流れ

  1. パラメータネゴシエーション
  2. セッション鍵交換 (DH鍵交換)
  3. ホスト認証
  4. ユーザ認証
  5. セッションの確立

パラメータネゴシエーション

  • サーバーとクライアント間で使用する暗号方式やホスト鍵の形式を決めます
  • 形式については、サーバーが提示するものをクライアントが選択して行きます。
    • このやりとりの中で、決められない項目が1つでもある場合は、接続が終了します。

セッション鍵交換

ホスト認証

  • ホスト認証では、クライアントが「ログイン先のサーバーが正しいかどうか」を確認します。
  • 確認方法として、クライアントはサーバーから送られてきたホスト公開鍵をホスト公開鍵データベース(~/.ssh/known_hosts)と照合し、接続するかを判断します。
  • デジタル署名を行い、クライアントに対してサーバーの証明を行います。

ユーザ認証

  • ユーザ認証では、ログイン先のサーバーが接続してくるクライアントに対して、「正規のクライアントであるかどうか」を確認します。
  • 確認方法として、クライアントは使用する認証方式をサーバーにリクエストし、それぞれの認証方式の手続きを経て完了させます。

セッションの確立

  • セッション鍵の共有、ホスト認証、ユーザ認証がすべて完了するとセッションが確立し、環境の確認や設定、シェルへのログインが行われます。

参考

gihyo.jp

PHPの言語構造とは

パーフェクトPHPを写経しながら読んでるのですが、「echo文は言語構造である」の意味がよく分からなかったので調べてみました。

言語構造とは

  • 言語構造(Language Constructs)とは、言語を構成する要素です。
  • 例えば、ifやwhileなども言語構造に該当します。
  • 言語に最初から存在するものとしてハードコーディングされているため、関数とは異なり、呼び出し方に制約はありません。
  • 基本的には値を返さないものであるため、式としては使用できません (ただし、print文などの例外はあります)

参考

akisi.tabiyaku.net