AWSでEC2を起動したらまずやっておく設定

http://qiita.com/shojimotio/items/79264678e9ea10b6fd19

何度もやるよね〜ということで上記URLを参考にメモメモ。いつもシェルスクリプトにしておこうと思うんだけど、やりたいこと、設定したいことが変わるかもと思うと手でやってしまう。

# yum update -y

これは忘れない。

# vim /etc/sysconfig/clock

ZONE=”Asia/Tokyo”
UTC=false

# cp /usr/share/zoneinfo/Japan /etc/localtime
# date
Thu Sep 4 10:37:21 JST 2014

※再起動
# /etc/init.d/crond restart

これを忘れると大変なことになる。

# free
# dd if=/dev/zero of=/mnt/swapfile bs=1M count=1280
# mkswap /mnt/swapfile
# swapon /mnt/swapfile
# chmod 0644 /mnt/swapfile
# free
# sudo vim /etc/fstab
これを追記
/mnt/swapfile swap swap defaults 0 0

イメージをコピーした時にswapどうなるんだっけ?問題ないか。

# echo “LANG=ja_JP.UTF-8” > /etc/sysconfig/i18n
# yum install -y man-pages-ja

日本語環境にしなくても今はデフォルトでなってる説。
一応メモ。

とりあえずこんな感じで後は思いついたら追記する。

モダンPHPアンチパターン

QiitaでモダンPHPアンチパターンが纏められていたのでメモ。

http://qiita.com/tadsan/items/157969b338fd8b782b21

なんでこれに行き着いたかってc++とphpのリファレンスの違いで混乱しちゃって
久々にPHPで参照渡しで速度&メモリを測ってみたら
普通に値渡しとパフォーマンスに差がない……というか参照渡しのほうが遅い、という結果になったので
色々調べてしまいました。

もう参照渡しは使わないぞ。
後、大量配列、大量ループでarray_shiftは遅いぞ。

isset, empty, is_null の動作まとめ

isset, empty, is_null の動作、分かっているつもりでも忘れちゃうことあるので時々見直そうと思います。

http://qiita.com/mpyw/items/51bf42fe1ad8a7e535aa

is_nullが関数である、とか、値が空のxmlドキュメントがemptyになる、とか知らなかった。

PhpStormでCtrl+[で挿入モードから抜ける

http://qiita.com/shiena/items/0b82b242e32f4e4d02c0

PhpStormで使っているvimっぽい動作ができるideavim。
最近のは、ホームディレクトリに

.ideavimrc

ファイルを置いて設定となりました。

inoremap
inoremap ¥ \
inoremap \ ¥

私はJISキーボードなので、c-[でなく、c-]で設定して、実際はc+[で入力するという、説明しててややこしい感じですね。

mysqliライブラリがインストールできない

mysqliライブラリがインストールできない!

CentOSなどで、

# yum install php55-mysqli

しても、php55-mysqliなパッケージが見つからない!
と思っていたら、パッケージ名が変わっていたのでした。

# yum install php55-mysqlnd

でインストールできます。

AWS SDK for PHP のパフォーマンスを改善するたった3つのこと

http://qiita.com/iwai/items/c712316755b13d106da5

AWS SDK入れるならやっておきたいですね。

Google App EngineのSDK入れる時のも調査しておkないあと。。

phpspecでテスト駆動開発?

https://laracasts.com/lessons/phpspec-is-so-good

phpspecでのコーデョング方法が動画になってます。沿って自分でもやってみましたが、面白いですね。
これを実戦で使うとなるとまた別なんですが。。。

PhalconやらLaravelやらZendFrameworkやら、、PHPのフレームワークを使ってて「セッションがおかしい!」とお嘆きのあなたへ。

PHPでもフレームワーク、便利じゃないですか。

CakePHP、Symfony、Zend Framework、FuelPHP、CodeIgniter、Laravel、ほとんど使って、今はPhalconに落ち着いた私です。

で、つい最近そういうフレームワークを使っている人が、

「どうにもセッションがおかしい!ページ遷移してもindexコントローラを読んでる」

みたいなことを言う人がいて。確かにセッションの動きって怪しいな?と思う時あるし、特にフレームワークのライブラリとかを使っている場合、中をちゃんと読まないと不安ですよね。まあよく分からない場合はベタにセッションを扱えばいいんです。

でもね、上記のような事態に陥ってここに検索できた人に、少しでも助けになればとメモしておきます。フレームワーク、大体ルーターがついてるじゃないですか。document_rootのindex.phpがbootstrap的に走るじゃないですか。そうするとウェブサーバでURIをrewriteし、


    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]

みたいに書くじゃないですか。

話は変わるんですけど、ほとんどのブラウザはファビコン、「favicon.ico」を読み込みますよね? で、favicon.icoの実ファイルは置いてありますか?

ファビコンがリクエストされたらどうなりますか?

http://www.example.com/favicon.ico

にリクエストされて、Apacheが上記設定で、実ファイルがなかったら、

http://www.example.com/index.php

にアクセスがいきますよね?
つまりそういうことです。

誰かの助けになれば!

AWS EC2で nginx php55-fpm phalcon を動かす。

AWS EC2で nginx & php55-fpm 上で phalcon を動かしてみた。本当はphp5.6が入れたいんですが・・。手間が2段階ぐらい上がっちゃうんですよね。

まず、nginxをインストール。

# yum install nginx

php用のリポジトリを追加。

# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

remiのphp5.5を有効にしておきましょう。

# vi /etc/yum.repos.d/remi.repo

[remi]
name=Les RPM de remi pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/remi/mirror
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-php55]
name=Les RPM de remi de PHP 5.5 pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/php55/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/php55/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi]と[remi-php55]のenableを1に。

で、php5.5系をどどっとインストールします。

# yum install php55 php55-devel php55-fpm php55-mbstring php55-mcrypt php55-opcache php55-pdo

phalconの為のgccとgitもついでに。

# yum install gcc git

phalconをダウンロード。

$ git clone git://github.com/phalcon/cphalcon.git

でインストール。

cd cphalcon/build/
# ./install

phalconの設定ファイルを作りましょう。

# vi /etc/php-5.5.d/phalcon.ini

extension=phalcon.so

それでは順番に起動していきます。

# /etc/init.d/php-fpm start
# /etc/init.d/nginx start

特にエラーもなければ、自動起動にしておきましょう。

# /sbin/chkconfig nginx on
# /sbin/chkconfig php-fpm on

後は、nginxの設定をすればとりあえず動くところまではいったと思います。

改めて homebrew で macにphp5.5をインストール。

いつも書きますけど、「Homebrew(ホームブルー)」なんですよね。読み方は。

「Mac OS Xオペレーティングシステム上でソフトウェアの導入を単純化するパッケージ管理システムのひとつである。」

とWikiにありますが、最近ほんとに便利になってきたなと思って、(前から?) 思い切ってhomebrewごと新しくして、php5.5のインストールからやってみました。MacPortsは最近どうなんでしょうね。

(自己責任で)ずばっと、

# rm -rf /usr/local/

前も書きましたが、brewは rootで実行しない!(←よくやりました。これ。なので /usr/local の permissionがめちゃくちゃでした)

で、公式の通り

$ ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

$ brew doctor

で問題ないかのチェックを忘れずに。

で、php5.5をインストール。本当は5.6が使いたいのですが、EC2にさくっとphp5.6が入らないので。。

$ brew install php55

で、

$ brew install php55
Error: No available formula for php55
Searching formulae...
Searching taps...
homebrew/php/php55-amqp                 homebrew/php/php55-pimple
homebrew/php/php55-apcu                 homebrew/php/php55-proctitle
homebrew/php/php55-augmentedtypes       homebrew/php/php55-propro

No availableだそうですが、tapsも探してくれるようになったんですよね。便利。前から?

$ brew tap homebrew/php

でtapを追加。

$ brew instal php55

==> Installing php55 from homebrew/homebrew-php
Cloning into '/usr/local/Library/Taps/homebrew/homebrew-dupes'...

homebrew-dupesも自動で追加されましたね。

これでインストール出来ないという方はぜひコメントをください。誰がやっても同じ結果になる、というのがパッケージツールを使う意義なので。ぜひぜひ。