PHPのソースコードが実行されるまでの流れ
PHPのソースコードが、実行されるまでを勉強したのでメモ。
実際にコードを書く時に意識することはないですが、エラーのデバッグ時に役立つので、知っておいた方が良さそうです。
概略
PHPプログラムが実行される度に、内部的にソースコードのコンパイルを行います。
コンパイルされた結果が、「オペコード(Opcodes: Operation codes)」と呼ばれる中間コードです。
そのオペコードを実行マシンが実行することで、PHPのプログラムが動作できます。
コンパイルの流れ図
少し詳細
ソースコードのコンパイルするまでの流れを詳細に見ると、「レキサー(Lexer)」と「パーサー(Parser)」というプログラムの処理を行っています。
レキサーとは字句解析を行うプログラムのことで、PHPプログラムを解析し、構文をバラバラのトークンに分解します。
パーサーとは構文解析と意味解析(コード生成)を行うプログラムのことで、レキサーによって生成されたトークンをパースし、オペコードへ変換します。
参考
Webサーバー(Apache)のパーミッション
CentOS7を使って、Apacheの勉強をしていたのですが、パーミッションエラーなどでよくエラーになったので、整理してみました。
前半が、前提知識としてLinuxのパーミッション設定の話、後半がApacheのパーミッション設定の話になってます。
Linuxのパーミッション
所有権
種類 | 意味 |
---|---|
Owner (所有者) | ファイル or ディレクトリの所有者 |
Group (グループ) | ファイル所有者の所属グループ |
Other (その他) | その他の全てのユーザー |
実行権
種類 | アルファベット表記 | 数字表記 |
---|---|---|
Read (読み込み) | r | 4 |
Write (書き込み) | w | 2 |
Execute (実行) | x | 1 |
権限なし | - | 0 |
実行権は、ファイルの場合とディレクトリの場合で意味が異なります。
ファイルの場合
種類 | 説明 |
---|---|
Read | lessコマンドなどを利用してファイルを読み込むこと |
Write | テキストエディタなどによる上書き・rmコマンドなどによる削除 |
Execute | スクリプトファイルなどのプログラムを実行すること |
ディレクトリの場合
種類 | 説明 |
---|---|
Read | lsコマンドなどを利用して、対象のディレクトリの中にあるファイルを確認すること |
Write | 対象のディレクトリのファイルを作成・削除すること |
Execute | cdコマンドなどで、対象のディレクトリにアクセスできる権限 |
Webサーバー(Apacheなど)のパーミッション
- Apacheのユーザーである、apacheユーザーに権限があるかを意識すると良いです。
- HTMLなどの静的なコンテンツでも、PHPのようなプログラムでも、基本的にはapacheユーザーに読み込み権限があれば動作します。
HTMLなどの静的コンテンツの場合
- Webページはブラウザを通して一般ユーザーがアクセスするため、Otherに読み込み権限を与えればいいように感じますが、それは間違いです。
- 実際には、ブラウザのリクエストを元にApacheがファイルを読み込み、その内容をブラウザに返しています。そのため、apacheユーザーに読み込み権限が必要です。
PHPを実行する場合
- Apacheのデフォルト設定では、Apacheの一部である、モジュールの機能を利用してPHPを実行します。
- この時には、ApacheがPHPのスクリプトファイルを読み込んで、PHPモジュールとしてプログラムを実行するため、apacheユーザーに読み込み権限があれば実行できます。実行権限は不要です。
参考にしたサイト様
vagrant upした時に、`Vagrant was unable to mount VirtualBox shared folders. This is usually ~`というエラーが出た時の対処
Vagrantでfile_syncedを設定してvagrant up
すると、次のようなエラーで怒られました。
Vagrant was unable to mount VirtualBox shared folders. This is usually because the filesystem "vboxsf" is not available. This filesystem is made available via the VirtualBox Guest Additions and kernel module. Please verify that these guest additions are properly installed in the guest. This is not a bug in Vagrant and is usually caused by a faulty Vagrant box. For context, the command attempted was: mount -t vboxsf -o uid=1000,gid=1000 var_www_html /var/www/html The error output from the command was: mount: unknown filesystem type 'vboxsf'
これを解決するまでにやったことのメモします。
解決するには
- 次の2つのことをした後に、再起動(
vagrant reload
)をすると解決します。- カーネルのアップデート
- VirtualBox Guest Additionsのバージョンを合わせる
カーネルのアップデート
- 上記のエラーが出た時でも仮想マシンへの接続は可能なので、
vagrant ssh
で接続後、次のコマンドを実行します。
[vagrant@localhost ~]$ sudo yum -y update kernel [vagrant@localhost ~]$ sudo yum -y install kernel-devel kernel-headers dkms gcc gcc-c++
VirtualBox Guest Additionsのバージョンを合わせる
- VirtualBox Guest Additionsは、VirtualBox 上に作成したゲストOSにインストールするソフトウェアで、ホストとゲストとの間での操作を便利にしてくれる機能が使えます。このバージョンがインストールしているVirtualBoxとゲストマシンのGuest Addtionsで一致しない場合に上記のエラーで失敗してしまいます。
- 手動でバージョンを合わせる方法もありますが、「vagrant-vbguest」プラグインを使うと便利です。インストール方法は次のコマンド。
$ vagrant plugin install vagrant-vbguest
読書ノート書いてます
最近読書ノートを付けながら、技術書などを読むことにしています。
そのため、読むのに3倍くらい時間が掛かるようになった気がしてますが、なかなかいいかもと思っているのでメモ。
いいなと思っていること
- 自分の成果が目に見えて残る
- 漠然と読まなくなる
- 復習するのが楽
一番いいなと思っていることが、自分の成果が目に見えて残ることです。
「ここまではちゃんと読みきった!」という事実が、「続きも読んでみよう」「最後まで読みきってみよう」という気持ちを湧き起こしてくれます。
また、次の読書まで間が空いてしまった時も、メモを見返せばある程度の内容を思い出せるので、再開がしやすいです。
一種のセーブポイントを作りながら勉強できるのは、精神衛生的にも良いです。
ガーッと勉強したのに、ほとんど忘れちゃったなあってなる時がままあって、つらくなることがよくあるので・・・。
何はともあれ、オススメです。読書ノート。
LaravelでWebアプリを作ろうと思ってるんです。
今年も既に2%くらい終わってしまいましたが、如何お過ごしでしょうか。
僕はというと、引っ越しと風邪で新年早々「わー!」っとなっております。わー。
さて、今年の上半期の目標のひとつに、Laravelを使ってWebアプリを作ることがあります。
目標を達成するには計画が大切なので、ロードマップを作ります。
大いに変更が出そうな気もしてますが、その辺はよしなにやって、最後は笑っていたい気持ちがあります。
何作るの?
- 単語帳アプリ
車輪の再発明感があるアプリですが、自分で作ったら愛着湧いていいのではくらいの感じで決めてます。
そもそもなぜやりたいの?
割と勉強寄りな理由です。
仕事でメインで使っている言語がPHPなので、早く馴染みたいなと思ってるのが結構大きいです。
それと、設計の経験値をもっとバリバリ貯めて、綺麗な拡張しやすいコード書けるようになりたいと思ってます。
ロードマップ
雑すぎる気がする
とりあえず、今月はPHPとOOPの勉強に注力して、その成果からもう少し詳細な計画に落とし込むことにします。
Vimを最小構成で起動する
プラグインごとの挙動の確認したい時や、素のVimの挙動確認したい時の方法を調べてたので、メモ。
Macでターミナルから使用することを想定してます。
コマンド
vim -N -u NONE -i NONE --noplugin
- テスト用の.vimrcを読み込む場合は、
vim -N -u ~/test.vimrc -i NONE --noplugin
各オプションの解説
-N
オプションは、nocompatible
オプションを設定する。nocompatible
があることで、vi互換モード
になるのを防ぎ、Vimの便利機能が使用できるようになる-u
オプションは、読み込みたい.vimrc
のパスを記述する。NONE
にすることで読み込まない設定にできる-u
で.vimrcを指定すると、nocompatible
オプションが自動的にはセットされなくなる。そのため-N
オプションと合わせて使うことが多い
-i
オプションは、読み込みたい.viminfo
のパスを記述する。-u
オプションと同様に、NONE
にすることで読み込まない設定にできる- viminfoとは前回操作時の情報が保存されているファイルで、コマンド履歴や検索履歴など記録されている
--noplugin
オプションは、plugin scriptを読み込まないようにする
参考
雑記
Vim scriptテクニックバイブル~Vim使いの魔法の杖で、-U NONE
というオプションもあったけれど、ヘルプなどでも見当たらなかった。
今は使われてないオプションなのだろうか・・・?
GitHubの田植え活動をやめてみる
思うところがあって、GitHubにコードをアップする日課をやめてみます。
291日継続できたのは、自分でもよくやったなあと思います。