8時間耐久 php構築の教室
DESCRIPTION
ビルドの基本と:TRANSCRIPT
![Page 1: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/1.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
PHP構築の教室8時間耐久
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
![Page 2: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/2.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
テキスト
![Page 3: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/3.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
http://tech.a-listers.jp/
![Page 4: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/4.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
本日の対象者PHPを使っている環境構築が苦手
真っ白になると固まる実行委員長
![Page 5: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/5.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
PHPの構築に関するイロハを徹底的に学びます
![Page 6: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/6.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
本日のメニュー
PHPの動く仕組みビルドのイロハ設定と拡張最適化への道
![Page 7: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/7.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
PHPの動く仕組み
![Page 8: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/8.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
PHPのページが動く時•Webサーバ (Apache等) URLを元にリソースを特定•PHP 指定されたPHPスクリプトを解析•PHP拡張モジュール (C言語) PHPから必要に応じて呼び出される
言語としては2番目のみがPHP
![Page 9: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/9.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
HTMLを表示する流れWebサーバ 公開ディレクトリ
ファイルを探して返すのみ
httpd.conf公開ディレクトリ
どのディレクトリを公開するか等が設定されている
![Page 10: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/10.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
PHPが動作する流れWebサーバ
PHPスクリプト
複数のプログラムが連携
PHP
拡張モジュール
自分で書くのは大抵これ
![Page 11: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/11.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
PHPが動く環境
様々なプログラムが協調して動作する環境
様々な知識が必要
![Page 12: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/12.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
自動インストール
# yum install php# apt-get install php# port install php5
何が起きたか理解している? 訳も分からずコピペしてない?
トラブルの原因がわかる? 設定の方法は?
![Page 13: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/13.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
根源的な知識
![Page 14: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/14.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
自力での構築と設定を学ぼう
![Page 15: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/15.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
注意
運用環境を1から構築するのは時代遅れ
付け焼刃の手動構築はかえって手間になる
![Page 16: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/16.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
補足
今回はVirtualBoxにCentOS6.0のイメージを入れ
て使います
CentOs 6.0 base x86_64http://virtualboxes.org/images/centos/
![Page 17: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/17.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
VM設定メモ
•DVDメディアを除去•ネットワークをブリッジ接続に•キーボードを’us’に変えておく /etc/sysconfig/keyboard•複数人ならMacアドレスの変更が必要
![Page 18: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/18.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
ビルドのイロハ
![Page 19: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/19.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
ビルドとは?
•ソースからバイナリを作る(C言語)•コンパイルとも呼ぶ•その環境用のバイナリを作る
![Page 20: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/20.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
自動インストール
•バイナリパッケージ•特定の環境用のバイナリを配布•OSやCPUが違うと非互換•RedHutのrpmがきっかけに大流行•WindowsやMacなどでは単純•誰かがどこかでビルドしたもの
![Page 21: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/21.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
gcc•GNU Compiler Collection•C言語、C++などをコンパイルできる•Richard Stallman (1985)•25年以上現役の超重要ソフトウエア
![Page 22: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/22.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
gcc入ってる?
# which gcc
/usr/bin/which: no gcc in ....
/usr/bin/gcc
•入ってない
•入ってる
![Page 23: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/23.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
gccの導入
•gccはバイナリパッケージで入れる•gccにもバージョンがある•gccが古くてビルド失敗なんて事も
# yum install gcc
![Page 24: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/24.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
gccがあれば•gccコマンドでC言語をコンパイル可能•出来たバイナリは実行できる!
$ gcc hello.c -o hello
#include <stdio.h>
int main(void) { printf("Hello World"); return 0;}
![Page 25: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/25.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
練習: gccでhello world•まっさらなCentOS6.0•キーボード設定・アカウント設定•reboot•which gcc•yum install gcc•hello worldのソースをコンパイル•出来たバイナリを実行
![Page 26: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/26.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
これでPHPもいける?
•PHPのソースは大量のCのソース•環境に合わせて変更する部分とか•コンパイルする順番も存在
周辺のツールも無いとPHPのような大きなソフトウェアは導入できない
![Page 27: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/27.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
定番なツール群•autoconf 環境に合わせてビルド設定を行う•make (automake) 順番の考慮や依存関係の解決など複雑なビルドタスクを実行する•sshd (openssl-server) sshで入って作業できると楽
![Page 28: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/28.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
sshd導入•yum install openssl-server•/etc/ssh/sshd_config に追記
•近年は攻撃が多いので鍵認証が理想•sshdの稼働ポートも課題•iptables -F しないと入れない(邪悪)
PermitRootLogin no
![Page 29: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/29.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
autoconf & make•autoconf CentOS6では入ってた•make 入ってないので導入する
# yum install make
![Page 30: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/30.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
PHPのtar ball
$ curl -L -O http://jp2.php.net/get/php-5.4.4.tar.gz/from/this/mirror $ mv mirror php.tar.gz$ tar zxf php.tar.gz
![Page 31: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/31.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
PHPのソース
$ find ./ -type f | grep "\.c" | wc 905 905 27290
•大量のCのソース群
•大まかなレイアウトを知っておくとトラブル解決に役立つ
![Page 32: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/32.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
PHPのソース
PHP内部の肝はZend Engine拡張はエンジンの機能で作られる
![Page 33: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/33.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
PHPのソース
![Page 34: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/34.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
あの関数もCで書かれている
なにやら怪しい記述
![Page 35: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/35.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
そういう事か
$ php -r "var_dump(date('Y-m-d',mktime(0,0,0,12,24,70)));"string(10) "1970-12-24"$ php -r "var_dump(date('Y-m-d',mktime(0,0,0,12,24,69)));"string(10) "2069-12-24"
![Page 36: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/36.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
PHPのビルドの流れ•configure ビルドに必要なライブラリの確認等•make バイナリを作る•make install 出来上がったバイナリをコピー
![Page 37: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/37.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
./configure してみた
libxml2が無いらしい...
![Page 38: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/38.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
libxml2
OK!
# yum install libxml2
![Page 39: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/39.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
./configure してみたが?
libxml2が無いらしい...(libxml2-devel も入れよう)
![Page 40: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/40.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
./configure 成功!
![Page 41: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/41.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
make
時間がかかる(ファンも回る)
![Page 42: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/42.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
数分後...
バイナリが出来た!
![Page 43: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/43.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
make installの前に
•make installをするとシステムに投入•システムの挙動が変わる•ビルドまでの作業はrootは不要•コマンドラインを使って動作確認
PHPに限った話ではありません
![Page 44: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/44.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
動作確認
なんか動きそう?
$ ./sapi/cli/php -vPHP 5.4.4 (cli) (built: Jul 8 2012 04:15:27) Copyright (c) 1997-2012 The PHP GroupZend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
$ ./sapi/cli/php -r 'echo "Hello Wolrd\n";'Hello Wolrd
![Page 45: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/45.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
よろしい
一応インストール完了
![Page 46: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/46.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
甘ぇよ...
MySQLが無いmbstringが無いgdが無いetc..
WordPressとか動かない
![Page 47: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/47.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
動かすだけなら...$ php -S 192.168.225.15:8000PHP 5.4.4 Development Server started at Sun Jul 8 04:50:57 2012Listening on 192.168.225.15:8000Document root is /home/yando/docsPress Ctrl-C to quit.[Sun Jul 8 04:51:00 2012] 192.168.225.5:57229 [200]: /index.php
PHP5.4からの新機能(PHPだけで開発サーバになる)
![Page 48: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/48.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
ここまでのまとめ
•ツールを揃えて•ソースからビルドしてインストール•望む構成を得るにはさらに設定が必要
現代の日本人にはこれだけでは不十分
![Page 49: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/49.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
練習: phpをmake•curl -L -O {url from php.net}•mv mirror php.tar.gz•tar zxf php.tar.gz•yum install make•cd php-5.4.4•./configure•make
![Page 50: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/50.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
設定と拡張
![Page 51: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/51.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
設定と拡張の必要性
•mbstringが使いたい•MySQLが使いたい•gdが使いたい•○○が使いたい設定により上記を可能にするのが
PHP拡張
![Page 52: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/52.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
PHP拡張
PHP自体はセットアップできた
MySQLやmbstringは拡張
![Page 53: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/53.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
configureオプション
•configureの際にオプションを付けるとビルドされるバイナリ、拡張が変わる•configure後は再度、ビルドを行う•ビルド後は変えられない設定も
どのオプションでビルドされたか?がとても重要
![Page 54: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/54.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
オプションの調べ方•configure --help•PHPのマニュアルを見る
ものすごくたくさん(約250種)
![Page 55: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/55.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
mbstring•文字コードの変換などに使う•日本では事実上、必須の拡張
有効にするのは簡単
$ configure --enable-mbstring$ make# make install
![Page 56: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/56.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
入った!
![Page 57: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/57.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
もう一つの方法•共有ライブラリ•拡張部分が別のバイナリになる•有効にするには php.ini の変更も必要
一見面倒に見える
$ configure --enable-mbstring=shared$ make# make install
extension=mbstring.so
![Page 58: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/58.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
静的リンクと動的リンク
PHPPHP
mbstringmbstring
静的リンク 動的リンク
静的リンクはPHP本体のバイナリに拡張が組み込まれる
![Page 59: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/59.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
運用上の違い•静的リンクはバイナリが大きくなる•動的リンクは僅かにオーバヘッド•拡張の更新があった場合 静的リンクは全コンパイル 動的リンクはライブラリのみ差替可能
動的リンクの方が柔軟性が高い
![Page 60: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/60.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
mysql / PDO_MySQL
•MySQLに接続する機能•PHP5.3以前は要MySQL
最近はビルドが簡単に
$ configure --with-mysql --with-pdo-mysql$ make# make install
![Page 61: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/61.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
GD
•PHPから画像の処理を行う拡張•リサイズや変換などに使われる
余裕余裕
$ configure --enable-gd$ make# make install
![Page 62: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/62.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
png.h
libpng-devel が必要
![Page 63: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/63.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
入りました# yum install libpng-devel$ configure --enable-gd$ make# make install
![Page 64: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/64.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
全部まとめると
./configureオプションが長くなるのが世の常
$ ./configure --enable-mbstring=shared \--with-mysql=shared \--with-pdo-mysql=shared \--with-gd=shared
\ はコマンドラインで改行したい時に使う
![Page 65: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/65.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
オプションは残る
自分のPHPがどのようなオプションでコンパイルされたか
![Page 66: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/66.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
php.ini
•PHPの挙動を決める重要な設定•拡張モジュールの読み込み•トラブルシュートに欠かせない•設定の構成や配置はインストール次第
「php.iniを確認してください」
![Page 67: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/67.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
php.iniの場所
•--with-config-file-path 通常は/usr/local/lib/php.ini•--with-config-file-scan-dir 複数に分割して読み込む•pnpinfo()からも確認できる
己のphp.iniを探す
![Page 68: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/68.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
php.iniの中身
![Page 69: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/69.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
php.iniの書き方
•設定名=値•;(セミコロン)以降はコメント•ログの出力、表示設定、文字コード、タイムゾーン、拡張モジュールなどさまざまな設定項目
不適切なphp.iniは危険
![Page 70: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/70.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
特に重要な項目
•display_errors•date.timezone•upload_max_filesize•allow_url_fopen•extension•memory_limit
運用に応じて様々な設定
![Page 71: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/71.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
練習: 実用的なビルド
•make•make install•php.ini-developmentをコピー
$ ./configure --enable-mbstring=shared \--with-mysql=shared \--with-pdo-mysql=shared \--with-gd=shared
![Page 72: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/72.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
最適化への道
![Page 73: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/73.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
PHPをバリバリ使う
•Apache連携•APC•nginx
実際にサービスを安定稼働させる為に必要な要素
![Page 74: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/74.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
mod_php•ApacheからPHPを動作させる•PHPのソースとApacheが必要
出来上がったmod_phpはapacheから有効にする
# yum install httpd httpd-devel$ configure --with-apxs2$ make# make install
![Page 75: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/75.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
httpd.conf•Apacheの設定ファイルに下記を追記
Apacheを再起動すれば...
LoadModule php5_module /usr/lib64/httpd/modules/libphp5.so<FilesMatch \.php$> SetHandler application/x-httpd-php</FilesMatch>
![Page 76: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/76.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
動いた
![Page 77: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/77.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
APC
•PHPスクリプトの解析結果を保存•解析抜きでZendEngineが稼働•WordPressなら4倍くらい速く•スクリプトが多い複雑なコードに効く•Key-Value Storeとしても使える
# pecl install apc
![Page 78: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/78.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
http://vipinkrsahu.blogspot.jp/2010/06/apc-vs-memcache-in-joomla-and-magento.html
![Page 79: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/79.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
php-fpm•スーパー高速なnginxで稼働させる•実はPHPにはほとんど効果がない•SAPIの一種
nginxは画像やCSSに効く
$ configure --enable-fpm$ make# make install
![Page 80: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/80.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
SAPICLI Apache2 php-fpm などが
ある
PHPが外部から呼ばれる窓口
![Page 81: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/81.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
apache + mod_phpapache 公開ディレクトリ
PHPが不要な時もphpのバイナリ込みのapacheが動作
mod_php
![Page 82: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/82.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
nginx + php-fpmnginx 公開ディレクトリ
ファイルを探して返すのみ
php-fpm.php
PHPに専念
![Page 83: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/83.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
nginxの導入
/etc/yum.repos.d/nginx.repo に追加
[nginx]name=nginx repobaseurl=http://nginx.org/packages/centos/6/x86_64/gpgcheck=0enabled=1
# yum install nginx
![Page 84: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/84.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
/etc/nginx/conf.d/default.conf location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; }
# cp -f /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf# cp -f sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm# chmod 755 /etc/init.d/php-fpm# mkdir /var/log/php-fpm# chown -R nginx:nginx /var/log/php-fpm
![Page 85: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/85.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
色々設定
• /etc/nginx/conf.d/default.conf•fastcgiparam•/usr/local/etc/php-fpm.conf•pid user group
# service nginx start# service php-fpm start
![Page 86: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/86.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
練習: WordPressを導入•yum install mysql-server•service mysqld start•/usr/share/nginx/html の下が公開•/etc/nginx/conf.d/default.conf の index に index.php を足す
![Page 87: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/87.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
まとめ
![Page 88: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/88.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
ビルドは基本
•全てのものはビルドが必要•yumなどは便利なので使うべき•yumで不足がある場合は? 自分でソースからビルドする 拡張だけビルドして入れ替える
PHPに限った話ではない知識
![Page 89: 8時間耐久 PHP構築の教室](https://reader033.vdocuments.mx/reader033/viewer/2022061611/556a5528d8b42a7a138b4a18/html5/thumbnails/89.jpg)
8時間耐久PHP構築の教室 / Yusuke Ando (@yando)
PHPの構築
•最低でも5.3.x or 5.4.x•新しいものは早い•APCも絶対入れるべき•nginxは状況次第