SlideShare a Scribd company logo
PHPのBuiltin Serverっぽい
Apache
PHPBLT #2
http://phpblt.connpass.com/event/23974/
LT用スライド
@uzulla
"who are you ?"
UZULLA
PHPer
「Perl方面からきました」
PHPといえば
LAMP(古)
皆さん
Apacheで
開発してますか?
あるメールフォーマーの話
» 色々な案件が同時に沢山走っている
» 「A案件修正」「はい」「B案件仕変」「はい」「C
案件ロールバック」「はい」
» 案件毎に環境もまちまち
» 「AWSって専用サーバーにして」「エッ」
» 「PaaSなら保守費用ゼロって読んだ」「エッ」
» 「予算500円しかない」「エッ…フティーピー」
» 環境を沢山維持して、パッパッと切り替えするのは大
変…
» そんな時、我らがPHPのBuilt-in Serverなら…?
シュッ
シュッと切り替えできる
» ので、私はできるだけBuilt-in Server(以後BS)で
も動くように心がけています
» みなさんはBuilt-in Serverつかってます?
» とはいえ、前の開発者が逃げたりした 引き継ぎ案件
や、なぜか事前にWPベースで作ると決まった CMS
案件等ではそうは行かない事も多い、なぜなら
Apache前提の案件
» 例:「WordPressはCMS」「はい」
» BSと相性悪い(秘伝のrouter.php…)
» .htaccessが要件として必須な事も多い
» 「 の既存問い合わせフォーム」と相乗
» 「ここにBasic認証」「はい」
» こうなると、やはりApache(等)が必要
» 「普通VMつかうよね」「せやな」
VM開発 のPros/Cons
» ✅ 楽に本番に寄せられる
» ❌ ホストとfs等がセパレートされている
» # IDE等のツールの取り回しが面倒
» ❓「それ、○○年後に開けるの?」
» % イメージの中のコードは検索面倒
» & 資源の無駄、エコでない
なので
私は
ネイティブ派
DISCLAIMER
» OSX(あるいはLinux)の話が続きます。
» Windowsの人も似たような事はできる…とおもいま
すがどうだろう。
よくあるネイティブ環境
» (よく見る順(私調べ))
» HomeBrew ➤ バージョン指定が困難
» XAMPP(等のFatpack) ➤ 切り替えが面倒
» System Apache + System PHP ➤ Ver固定
» 大正義 php-build ➤ ビルドたのしい!!✌('ω')✌
ガンガンビルド!最新バージョンでたら速攻でビル
ド!
ビルド
つらい
» 「ビルドします、失敗したら修正してビルドします」
» (特にエルキャピは)ハイパー面倒
» SystemのOpenSSL、BrewのOpenSSL、
LibreSSL、libxml2…
» ApacheのOpenSSLとPHPのOpenSSLがミスマッチ
でFail
» mod_php生成が軽く知恵の輪
» 「大変では?」「趣味です、いや…人生…」
» (今日はビルドの話はしません)
ということで
» OSX上でApache+PHP環境をつくることを諦めてい
る人も多いのではないでしょうか?
本題
» Apache + PHPを
» PHPのBuilt-in Serverみたいに
» 気軽に使いたい
Apacheの面倒さ(BS比)
» 「シュッって起動してシュッと終了してほしい」
» 終了を忘れていてイラッっとする(短気)
» エラーログ(ファイル)確認のtailが面倒
» confを差し替えrestart面倒
» php ver、Port、DocRoot等の切り替え…
» 開発用の秘伝の.htaccessをいれて.gitignore…
ということで
» apachehereというのをでっちあげました!!!
» $ apachehere
ってするとApacheがBSっぽく起動する!
» github.com/uzulla/apachehere
» El capitanならSystemのApacheをつかえます
(が、私は野良ビルド派)
例
apachehereというPHPのBuiltin Serverっぽいやつをつくった
BSっぽい!!
PHPerなので勿論PHP対応 !
» DocRootにかかっているphpenvのglobal、localで
指定されたversionのphp-cgiが利用され(るはず|
ます)!便利!!!!
» -mでphpenv以下のmod_phpもつかえます
» with-apxs2付でビルドし、libphpX.soを確保
» 作り方は「phpenv libphp7.so ビルド」で検索
» (ただしつらいので、php-cgiでいいのでは…
その他オプション
Usage: apachehere [-t document_root]
[-b bind_ip] : default 127.0.0.1
[-p port_num] : default 8080
[-m] : use mod_php
[-c /path/to/php.ini]
[-s /path/to/php/conf.d]
» コピーできてないし、とりあえずつくった感が良く解
る
» シェルスクリプト力不足(あるいは手抜き)を感じる
» 「PHPerなのにbash scriptなの?」
以上!
まとめと展望
» こういう事やると使い道のない知識が増えます
» 冷静な皆さんはVMかXAMPP使いましょう
» System Apache+PHPのConfくらい書きたい
» 意地でrbenvっぽくしたかったけど、むずい…
» ちなみにWordPressの案件失注しましたので
モチベーションは直近無い !
» 「あれ?…LAMPのMがたりないよ?」
M is Mysql
» そうだよね、Mysqlもないとね!
» github.com/uzulla/mysql_data_setup.php
» (BSほど気楽ではないが)案件毎にシュッっと
MysqlのData dirをつくります
» 「なぜPHPで作ったし」「PHPerだからしかたない
よね」
» demoは省略
ありがとうございました
» github.com/uzulla/apachehere
» github.com/uzulla/mysql_data_setup.php
» 時間があまれば、以下余談
Apacheの話
フォアグラウンドで動かせる
$ httpd -DFOREGROUND
» -DFOREGROUND
» 起動中が一目瞭然、^Cで終了、便利!
» そのままではログは依然としてログファイルにでて不
便
ログはSTDOUTに出せる
ErrorLog /dev/stdout
CustomLog /dev/stdout combined
» Builtin Serverっぽくなる
» FYI: combinedに拘らないほうが見やすい
LogFormat "%t %h [%>s]: %U%q" php_bs_style
CustomLog /dev/stdout php_bs_style
IfDefineで条件分岐できる
» argの-DHOGEで、<IfDefine HOGE>で条件分岐できる
» !で否定もできる
<IfDefine USE_PHP>
<IfDefine USE_MOD_PHP>
∼
</IfDefine>
<IfDefine !USE_MOD_PHP>
∼
</IFDefine>
</IfDefine>
httpd.confをもっと動的に
» httpd.conf は環境変数が使える
ServerName ${BIND_IP}:${LISTEN_PORT}
∼
DocumentRoot ${DOC_ROOT}
<Directory ${DOC_ROOT} >
∼
</Directory>
» cwdをDocRootに指定すれば、BSっぽくなる
System Apacheのつらさ
» Apacheはconfigure次第でデフォルトが色々変わる
» 「/usr,/etc,/varにバラバラで入るの誰得??」
» logs/がどこなのやら
» pidがどこに出るのやら
» mutexが∼
» moduleの場所が∼
» なので、prefixだけつけた野良ビルドが楽!!
mod_phpとphp(-cgi)
» 本番環境ではmod_phpが普通だがビルドがめんどう
(Apacheがな…)
» php-cgiはphp-buildで普通にビルドされる
(mod_actionと組み合わせ)
» この二つ、mod_rewrite設定次第で挙動が…
» [QSA]とか…
» (この他に実行ファイルとしてPHPをかいて、cgiと
して実行する方法もあるが、Shebangがキモい)

More Related Content

apachehereというPHPのBuiltin Serverっぽいやつをつくった