php.iniの探し方

php.iniといえばPHPの設定ファイルですが、編集しようとして置き場が分からず困る、ということがまれによくあるので、メモしておきます。

方法1 ターミナルからコマンドを叩く

LinuxやMac OS XのようなUNIX系のOSで使える方法です。以下の行をコピペしてターミナルに貼り付けてreturn。

php -r ‘phpinfo();’ | grep php.ini

正常に実行できた場合、

Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

といった結果が出力されると思います。仕組みとしては、PHPをコマンドラインから実行して(php -r ‘実行したいコード’)、phpinfo()で設定情報を出力、出力された情報から「php.ini」という文字列を含む行だけをgrepという検索コマンドで抽出しています。

上手く結果が返ってこない場合、方法2でやってみるか、最後につけた付録を参照してください。

方法2 phpinfo()出力用のファイルを用意する

<?php
phpinfo();
?>

上の3行をコピペしてエディタに貼り付け、適当な名前をつけて保存。保存したファイルをWebサーバーの公開ディレクトリに置いて、そのファイルにブラウザーでアクセスする。するとPHPの設定情報が出力されたページが表示されるので、そこで「Loaded Configuration File」という項目を探す。

付録 トラブルシューティング

php -r ‘phpinfo();’ | grep php.ini

↑を実行した結果、

A. エラーメッセージが出力される → (1)へ
B. 大量に出力される → (2)へ

(1) 「php -v」を実行して、PHPのバージョン情報が返ってくるかチェック
 → 返ってくる → phpコマンドは正常に動いてるので、コマンドの打ち間違いをチェック
 → 返ってこない
  →  「/usr/bin/php -v」で結果が返ってくるかテスト
   → 返ってきた → 「/usr/bin/php -r ‘phpinfo();’ | grep php.ini」を実行すればOK(環境変数のパスが通ってない)
   → 返ってこない → PHPをCUIから実行できるようになっているかチェック

(2) 「grep –help」を実行
 「そんなコマンドねーよ」と返ってきた場合は、grepコマンドがインストールされていない

※「php – v」及び「grep –help」の両方が正常に出力される場合、打ち間違いの可能性が高い

Essential ActionScript 3.0 読書メモ 第31回 静的メソッド

静的変数が、クラス全体に関係する情報を追跡するのに用いられることは既に学んだ通り。同様に、静的メソッド(static methods)は、単にそのクラスの個々のインスタンスの機能を定義するのではなく、クラスの全体としての振る舞いを定義する。

たとえば、FlashのランタイムAPIには、Pointという名前のクラスがある。直交点座標(座標平面)上の点を表現するクラスである。Pointクラスは、極座標ペアのデータ(距離と角度)を与えられると、Pointオブジェクトを生成する、polar()という静的メソッドを定義している(Point.polar()の解説 by Adobe)。

理論的に言って、極座標を直交点座標に変換することは、直交点座標に一般的に関連する処理であり、特定のPointオブジェクトに関連する処理ではない。それゆえに、polar()は静的メソッドとして定義されている。

インスタンスメソッドと同様、静的メソッドはクラスの中でfunction定義を用いて作られる。しかし、静的メソッドの定義には必ずstatic属性を含まなければならない。
例:

class SomeClass {
  static function methodName (identifier = value) {
  }
}

アクセスコントロール修飾子によってアクセス可能性を制御できる点、及び使用可能なアクセスコントロール修飾子の種類、アクセスコントロール修飾子のデフォルトがinternalである点は、いずれもインスタンスメソッドと同じである。アクセスコントロール修飾子はstatic属性の前につける。
例:

class SomeClass {
  public static function methodName (identifier = value) {
  }
}

静的メソッドを呼ぶには、以下のように書く。

SomeClass.methodName(value)

定義したクラスの内部であれば、静的メソッドは、クラス名を頭に付けなくても呼べる。
例:

SomeClass {
  static function methodName (identifier = value) {
  }

 methodName(); // SomeClass.methodName(); と同じ
}

しかし、静的メソッドとインスタンスメソッドを区別するため、厳密には必要でなくとも、クラス名をつけて静的メソッドを呼ぶことが多い。

静的メソッドだけを定義しているクラスもある。そのようなクラスは、関連する機能をまとめるが、インスタンス化されることは無い。

たとえば、組み込みのMouseクラスはshow()とhide()という静的メソッドだけを定義している。これらはマウスポインターの表示・非表示を切り替えるのに使う。これらの静的メソッドは、Mouseクラスのインスタンスを通さず、Mouseクラスから直接アクセスできる(例:Mouse.show(), Mouse.hide())。Mouseクラスのオブジェクトが作られることは無い。

静的メソッドには、インスタンスメソッドには無い2つの制限がある。1つ目は、静的メソッドはthisキーワードを使えないということである。2つ目は、静的メソッドは同じクラス内で定義されているインスタンス変数とインスタンス変数にアクセス出来ないという点である。

(一方、インスタンスメソッドは静的変数や静的メソッドに加え、インスタンス変数や他のインスタンスメソッドにもアクセス出来る)

一般に、静的メソッドは静的変数に比べて使用される頻度は低い。

今日の進捗:307→312/2689

オライリー電子書籍:Kindle版とオライリー版の違い

↓は最近買ったMac OS Xの解説書。

Learning Unix for OS X Mountain Lion
Learning Unix for OS X Mountain Lion

本書は紙、オライリーのeBook(DRM Freeのpdf/epub/mobi/DAISY)、Amazon
Kindle版の3バージョンが入手できる。価格はそれぞれ1,554円(Amazon.jp)、12.99ドル(o’reilly
media)、753円(Kindle Store JP)で、Kindle版が一番安かったので、今回はKindle版を購入してみた。

ただ、日本のKindle
Storeの本は現状、Kindle/iOS/Androidのいずれかでしか読めない(Mac版Kindleアプリは、日本のKindle
Storeに対応していない!)。利便性を考えると、多少高くてもオライリー版のeBookの方が良かったかな。。。

……と思いながらKindle版を読んでみたところ、冒頭にアップグレードオプションの提示があった。Kindle版の購入者は、$4.99の追加料金を支払うことで、オライリー版にアップグレード出来るらしい。Kindle版とオライリー版の違いは以下。

☆Kindle
・DRM付き
・mobi(Kindle用の電子書籍フォーマット)のみ

☆オライリー
・DRM Free
・mobi/ePub/PDF/DAISYが入手可

他に、オライリー版だと「Lifetime Update」が付くらしい。たぶん、正誤訂正のこと。逆にいうと、Kindle版は初版の誤りがそのまま残ってるのか…?

ともあれ、オライリーの電子書籍には基本的に2つのバージョンがあることがわかった。オライリーから直接販売されている「フルバージョン」と、オライリー以外で販売されている「廉価版制限付きバージョン」である。

● 2013-03-10追記

Kindle版は、クラウド上で蔵書管理したり、読書の進捗を別のデバイス間でも共有できるのに対し、Kindle以外で購入した書籍をKindle(端末|アプリ)で読む場合には、蔵書管理や進捗共有ができない。したがって、オライリー版は、Kindle版の完全上位互換ではない。

個人的には、(2013-03-10現在)PCで閲覧できないという不便さを考えてもなお、管理の容易さや進捗共有の便利さから、オライリー書籍はKindle版を好んで買っている。とはいえ、オライリー・ジャパンの電子書籍は現状Kindle版が皆無で、ほとんどpdf版しか入手できないのだけど…

『カンフーマック』を読了

カンフーマック ―猛獣を飼いならす310の技
カンフーマック ―猛獣を飼いならす310の技

オライリーのpdf電子書籍を買ったのはこれが初めてなのだけど、Macで快適に読むことができた。最近iPad miniも買って本格的に電子書籍を読む環境が整ったので、今後はオライリー本は電子書籍メインで買っていこうと思う。(とか言いつつ、カレンダー目当てで『インタフェースデザインの心理学』買ったり。。。)

で、本書『カンフーマック』について。原著は、300個のtipsを雑然と並べたものだったらしい。訳者は本書に惚れ込んだようで、それらのtipsを整理し、章立てして体系性を持たせ、さらにMac初心者向けの基礎知識の補充やiCloudの解説、Mountain Lionでの動作確認等、原著にこれでもかというほどの+αを載っけている。本書に関して、原著と邦訳のいずれを選ぶべきか問われたら、迷わず邦訳をオススメする。

一方、本書が他人に勧められる本かというと、正直言って微妙。。。300個も載っているのだから、1つや2つ、いや10個や20個くらいは「これは」というtipsが見つかる。私も、Spotlightの使い方を教えてもらった。

ただ、一つ一つのtipsはあくまで表面的なので、本としての「栄養価」は今ひとつに感じられる。これで3000円近くするのはちょっとなあ、という印象。本屋で立ち読みして、気になるtipsがいくつも見つかったら買ってもいいかも。

Essential ActionScript 3.0 読書メモ 第30回 定数

定数(Constants)は、最初に定義した値が変わることのない変数である。定数を作るには、varキーワードの代わりにconstキーワードを用いる。伝統的に、定数は全て大文字で名付ける。値の変わらない静的変数の定義は次のように書く。

static const IDENTIFIER = value;

値の変わらないインスタンス変数/ローカル変数を定義するには、次のように書く。

const IDENTIFIER = value;

定数として定義された変数に値を再代入しようとすると、エラーになる。

定数は、典型的には、固定値によってプログラムの設定を定義する静的変数として用いられる。例えば、ブログの背景色を設定するプログラム中で、背景色の色を定義するには、次のように書く。

public class Blog {
  // それぞれの色に対応する数値を設定
  public static const BACKGROUND_RED = 1;
  public static const BACKGROUND_GREEN = 2;
  public static const BACKGROUND_BLUE = 3;
 
  // 背景色の初期値を設定
  private var background = Blog.BACKGROUND_BLUE;
 
  // backgroundに入っている値を元にして背景色を実際に設定
  private function setBackground () {
    if (background == BACKGROUND_RED) {
      // 背景色を赤に
    } else if (background == BACKGROUND_GREEN) {
      // 背景色を緑に
    } else if (background == BACKGROUND_BLUE) {
      // 背景色を青に
    }
  }
}

定数は、プログラムを動かすために必須の要素ではない。定数を使わなくても、同じように動くプログラムは作れる。しかし、定数は、数値の目的を分かりやすくしてくれる。また、値を変更する際にも、定数定義の箇所だけを書き換えれば、その定数を使用した箇所は全て書き換わるため、メンテナンス性も向上する。

なお、プログラム中にそのまま書かれた数値のことをmagic numberという。magic numberを多用したプログラムは、作り変える際に苦労する。

今日の進捗:182→186/1644