(問題)階乗を含む数列

Nginx、php-fpm、FuelPHPの環境で開発することになったので、 開発環境を構築してみました。
<参考書籍>
ハイパフォーマンスHTTPサーバ Nginx入門
はじめてのフレームワークとしてのFuelPHP
<参考サイト>
FuelPHPをNginxで動かしてみる
ソースのダウンロードと展開
1 $ wget -O php-5.3.15.tar.gz http://jp2 .php.net/g et/php-5.3 .15.tar.gz /from/jp.p hp.net/mir ror 2 --2012-08- 13 18:13:07-- http://jp2 .php.net/g et/php-5.3 .15.tar.gz /from/jp.p hp.net/mir ror 3 jp2.php.ne t (jp2.php.ne t) をDNSに問いあわせています... 49.212.134 .217 4 jp2.php.ne t (jp2.php.ne t)|49.212.134 .217|:80 に接続しています... 接続しました。 5 HTTP による接続要求を送信しました、応答を待っています... 302 Found 6 場所: http://jp. php.net/di stribution s/php-5.3. 15.tar.gz [続く] 7 --2012-08- 13 18:13:08-- http://jp. php.net/di stribution s/php-5.3. 15.tar.gz 8 jp.php.net (jp.php.net ) をDNSに問いあわせています... 61.195.146 .164 9 jp.php.net (jp.php.net )|61.195.146 .164|:80 に接続しています... 接続しました。 10 HTTP による接続要求を送信しました、応答を待っています... 200 OK 11 長さ: 14806681 (14M) [applicatio n/x-gzip] 12 `php-5.3.15 .tar.gz' に保存中 13 14 100%[========== ========== ========== ========>] 14,806,681 67.7K/s 時間 3m 49s 15 16 2012-08-13 18:16:57 (63.0 KB/s) - `php-5.3.15 .tar.gz' へ保存完了 [14806681/1 4806681] 17 $ 18 $ tar zxf php-5.3.15 .tar.gz
phpのビルドに必要なライブラリのインストール
1 $ sudo apt-get install libxml2-dev libevent-d ev
PHP-FPMを有効化してconfigure
1 $ ./configure --enable-f pm
PHPインストール
1 $ sudo make all install
PHP-FPM用ユーザ作成
1 $ sudo useradd --shell /sbin/nologin php-fpm
PHP-FPM設定ファイル作成
1 $ sudo cp /usr/local/etc/php-f pm.conf.de fault /usr/local /etc/php-f pm.conf 2 $ sudo vi /usr/local /etc/php-f pm.conf 3 $ diff /usr/local /etc/php-f pm.conf.de fault /usr/local /etc/php-f pm.conf 4 140,141c140,141 5 < user = nobody 6 < group = nobody 7 --- 8 > user = php-fpm 9 > group = php-fpm
PHP-FPM起動
1 $ sudo /usr/local/sbin/php- fpm 2 $ ps aux | grep php-fpm | grep -v grep 3 root 20053 0.0 0.1 15688 2032 ? Ss 20:28 0:00 php-fpm: master process (/usr/local /etc/php-f pm.conf) 4 php-fpm 20054 0.0 0.1 15688 1576 ? S 20:28 0:00 php-fpm: pool www 5 php-fpm 20055 0.0 0.1 15688 1576 ? S 20:28 0:00 php-fpm: pool www
gccがインストールされていることを確認
1 $ which gcc 2 /usr/bin/gcc
PCRE(Perl Compatible
1 $ sudo apt-get install libpcre3 libpcre3-dev
zlibライブラリインストール
1 $ sudo apt-get install zlib1g zlib1g-dev
OpenSSLインストール
1 $ sudo apt-get install openssl libssl-dev
Nginxのソースのダウンロードと展開
1 $ wget http://nginx.org/dow nload/ngin x-1.2.3.ta r.gz 2 --2012-08- 13 11:03:03-- http://ngi nx.org/dow nload/ngin x-1.2.3.ta r.gz 3 nginx.org (nginx.org) をDNSに問いあわせています... 206.251.25 5.63 4 nginx.org (nginx.org)|206.251.25 5.63|:80 に接続しています... 接続しました。 5 HTTP による接続要求を送信しました、応答を待っています... 200 OK 6 長さ: 723294 (706K) [applicatio n/octet-st ream] 7 `nginx-1.2. 3.tar.gz' に保存中 8 9 100%[========== ========== ========== ========>] 723,294 68.0K/s 時間 11s 10 11 2012-08-13 11:03:14 (65.1 KB/s) - `nginx-1.2. 3.tar.gz' へ保存完了 [723294/723 294] 12 13 $ 14 $ tar zxf nginx-1.2. 3.tar.gz 15 $
Nginx用ユーザ作成
1 $ sudo useradd --shell /sbin/nologin nginx
Nginxビルド、インストール
1 $ cd nginx-1.2.3/ 2 $ ./configur e --user=ngi nx --group=ng inx --with-htt p_ssl_modu le --with-htt p_realip_m odule 3 $ make 4 $ sudo make install
Nginx起動確認
1 $ sudo /usr/local/nginx/sbi n/nginx 2 $ ps aux | grep nginx | grep -v grep 3 root 14718 0.0 0.0 5792 684 ? Ss 17:58 0:00 nginx: master process /usr/local /nginx/sbi n/nginx 4 nginx 14719 0.0 0.1 5948 1316 ? S 17:58 0:00 nginx: worker process
PHP-FPM,Nginx,FuelPHPの連携設定
1 $ sudo vi /usr/local/nginx/con f/nginx.co nf 2 $ diff /usr/local /nginx/con f/nginx.co nf.default /usr/local /nginx/con f/nginx.co nf 3 37a38,39 4 > root /var/www/f uelphp-sam ple/public ; 5 > index index.php; 6 39c41 7 < #charset koi8-r; 8 --- 9 > charset utf-8; 10 41c43,44 11 < #access_log logs/host. access.log main; 12 --- 13 > access_log logs/fuelp hp-sample. access.log ; 14 > error_log logs/fuelp hp-sample. error.log; 15 42a46 16 > # すべてのアクセスをindex.phpに振る。 17 44,45c48 18 < root html; 19 < index index.html index.htm; 20 --- 21 > try_files $uri /index.php ?$uri$args; 22 48,54c51,57 23 < #error_page 404 /404.html; 24 < 25 < # redirect server error pages to the static page /50x.html 26 < # 27 < error_page 500 502 503 504 /50x.html; 28 < location = /50x.html { 29 < root html; 30 --- 31 > # phpを実行できるようにする。 32 > location ~ .*\.php$ { 33 > fastcgi_pa ss 127.0.0.1: 9000; 34 > fastcgi_in dex index.php; 35 > fastcgi_pa ram SCRIPT_FIL ENAME $document_r oot$fastcgi_sc ript_name; 36 > #fastcgi_pa ram FUEL_ENV production ; #リリース時にはコメントを外して有効にする。 37 > include fastcgi_pa rams; 38 57,78c60,65 39 < # proxy the PHP scripts to Apache listening on 127.0.0.1: 80 40 < # 41 < #location ~ \.php$ { 42 < # proxy_pass http://127 .0.0.1; 43 < #} 44 < 45 < # pass the PHP scripts to FastCGI server listening on 127.0.0.1: 9000 46 < # 47 < #location ~ \.php$ { 48 < # root html; 49 < # fastcgi_pa ss 127.0.0.1: 9000; 50 < # fastcgi_in dex index.php; 51 < # fastcgi_pa ram SCRIPT_FIL ENAME /scripts$fastcgi_sc ript_name; 52 < # include fastcgi_pa rams; 53 < #} 54 < 55 < # deny access to .htaccess files, if Apache's document root 56 < # concurs with nginx's one 57 < # 58 < #location ~ /\.ht { 59 < # deny all; 60 < #} 61 --- 62 > # すべての不可視ファイルをアクセス不可にする。 63 > location ~ /\. { 64 > access_log off; 65 > log_not_fo und off; 66 > deny all; 67 > } 68 $ cat /usr/local /nginx/con f/nginx.co nf 69 70 #user nobody; 71 worker_pro cesses 1; 72 73 #error_log logs/error .log; 74 #error_log logs/error .log notice; 75 #error_log logs/error .log info; 76 77 #pid logs/nginx .pid; 78 79 80 events { 81 worker_con nections 1024; 82 } 83 84 85 http { 86 include mime.types ; 87 default_ty pe applicatio n/octet-st ream; 88 89 #log_format main '$remote_add r - $remote_use r [$time_local ] "$request" ' 90 # '$status $body_bytes _sent "$http_refer er" ' 91 # '"$http_user_ agent" "$http_x_for warded_for "'; 92 93 #access_log logs/acces s.log main; 94 95 sendfile on; 96 #tcp_nopush on; 97 98 #keepalive_ timeout 0; 99 keepalive_ timeout 65; 100 101 #gzip on; 102 103 server { 104 listen 80; 105 server_nam e localhost; 106 root /var/www/f uelphp-sam ple/public ; 107 index index.php; 108 109 charset utf-8; 110 111 access_log logs/fuelp hp-sample. access.log ; 112 error_log logs/fuelp hp-sample. error.log; 113 114 # すべてのアクセスをindex.phpに振る。 115 location / { 116 try_files $uri /index.php ?$uri$args; 117 } 118 119 # phpを実行できるようにする。 120 location ~ .*\.php$ { 121 fastcgi_pa ss 127.0.0.1: 9000; 122 fastcgi_in dex index.php; 123 fastcgi_pa ram SCRIPT_FIL ENAME $document_r oot$fastcgi_sc ript_name; 124 #fastcgi_pa ram FUEL_ENV production ; #リリース時にはコメントを外して有効にする。 125 include fastcgi_pa rams; 126 } 127 128 # すべての不可視ファイルをアクセス不可にする。 129 location ~ /\. { 130 access_log off; 131 log_not_fo und off; 132 deny all; 133 } 134 } 135 136 137 # another virtual host using mix of IP-, name-, and port-based configurat ion 138 # 139 #server { 140 # listen 8000; 141 # listen somename:8 080; 142 # server_nam e somename alias another.al ias; 143 144 # location / { 145 # root html; 146 # index index.html index.htm; 147 # } 148 #} 149 150 151 # HTTPS server 152 # 153 #server { 154 # listen 443; 155 # server_nam e localhost; 156 157 # ssl on; 158 # ssl_certif icate cert.pem; 159 # ssl_certif icate_key cert.key; 160 161 # ssl_sessio n_timeout 5m; 162 163 # ssl_protoc ols SSLv2 SSLv3 TLSv1; 164 # ssl_cipher s HIGH:!aNULL:!MD5; 165 # ssl_prefer _server_ci phers on; 166 167 # location / { 168 # root html; 169 # index index.html index.htm; 170 # } 171 #} 172 173 } 174 $ sudo /usr/local /nginx/sbi n/nginx -s reload
Xdebugのコンパイルに必要なコマンドをインストール
1 $ sudo apt-get install autoconf gcc g++
Xdebugのソースをダウンロード、展開
1 $ wget http://xdebug.org/fi les/xdebug -2.2.1.tgz --2012-08- 13 21:14:58-- http://xde bug.org/fi les/xdebug -2.2.1.tgz 2 xdebug.org (xdebug.org ) をDNSに問いあわせています... 82.113.146 .227 3 xdebug.org (xdebug.org )|82.113.146 .227|:80 に接続しています... 接続しました。 4 HTTP による接続要求を送信しました、応答を待っています... 200 OK 5 長さ: 248057 (242K) [applicatio n/x-gtar-c ompressed] 6 `xdebug-2.2 .1.tgz' に保存中 7 8 100%[========== ========== ========== ========>] 248,057 53.8K/s 時間 5.6s 9 10 2012-08-13 21:15:04 (42.9 KB/s) - `xdebug-2.2 .1.tgz' へ保存完了 [248057/248 057] 11 $ tar zxf xdebug-2.2 .1.tgz 12 $ cd xdebug-2.2 .1/
コンパイル用設定
1 $ phpize 2 Configuring for: 3 PHP Api Version: 20090626 4 Zend Module Api No: 20090626 5 Zend Extension Api No: 220090626 6 configure. in:3: warning: prefer named diversions 7 configure. in:3: warning: prefer named diversions 8 $ which php-config 9 /usr/local /bin/php-c onfig 10 $ ./configur e --enable-x debug --with-php -config=/u sr/local/b in/php-con fig
コンパイル、インストール
1 $ make 2 $ sudo make install 3 $ ls -l /usr/local/lib/php/e xtensions/ no-debug-n on-zts-200 90626/xdeb ug.so 4 -rwxr-xr-x 1 root root 669138 8月 13 21:53 /usr/local /lib/php/e xtensions/ no-debug-n on-zts-200 90626/xdeb ug.so
php.iniを用意
1 $ sudo cp /home/akanuma/src/ph p-5.3.15/p hp.ini-dev elopment /usr/local /lib/php.i ni
Pharを正しく扱うためのdetect_uni
1 $ sudo vi /usr/local/lib/php.i ni 2 $ diff /home/akan uma/src/ph p-5.3.15/p hp.ini-dev elopment /usr/local /lib/php.i ni 3 928a929,930 4 > detect_uni code = Off 5 > 6 1914a1917,1929 7 > 8 > [xdebug] 9 > zend_exten sion = "/usr/local /lib/php/e xtensions/ no-debug-n on-zts-200 90626/xdeb ug.so" 10 > xdebug.col lect_param s = 4 11 > xdebug.dum p.GET = "*" 12 > xdebug.dum p.POST = "*" 13 > ;xdebug.pro filer_enab le = 0 14 > xdebug.rem ote_enable = 1 15 > ;xdebug.rem ote_handle r = "dbgp" 16 > ;xdebug.rem ote_host = "localhost" 17 > ;xdebug.rem ote_log = "/var/log/x debug/xdeb ug.log" 18 > ;xdebug.rem ote_mode = "req" 19 > ;xdebug.rem ote_port = 9000
リモートデバッグ用のログを準備しておく
1 $ sudo touch /var/log/xdebug/xdeb ug.log 2 $ sudo chmod 666 /var/log/x debug/xdeb ug.log 3 $ ls -l /var/log/x debug/xdeb ug.log 4 -rw-rw-rw- 1 root root 0 8月 13 23:11 /var/log/x debug/xdeb ug.log
php-fpmを再起動し、http://loc
Eclipseの公式サイトからダウンロードするか、パッケージマネージャを使ってEclipseをインストールします。詳細は割愛します。
Eclipseの[Help] メニューの [Install New Software] からPDTをインストールします。詳細は割愛します。
Eclipseの[Help] メニューの [Install New Software] からMakeGoodをインストールします。詳細は割愛します。
PEARのチャネルを更新します。
1 $ sudo pear update-channels 2 [sudo] password for akanuma: 3 Updating channel "doc.php.ne t" 4 Channel "doc.php.ne t" is up to date 5 Updating channel "pear.php.n et" 6 Channel "pear.php.n et" is up to date 7 Updating channel "pecl.php.n et" 8 Channel "pecl.php.n et" is up to date
PEARパッケージをアップグレードします。
1 $ sudo pear upgrade -a PEAR
インストール済みのすべてのパッケージをアップグレードします。
1 $ sudo pear upgrade-all 2 Will upgrade channel:// pear.php.n et/console _getopt 3 Will upgrade channel:// pear.php.n et/archive _tar 4 downloadin g Console_Ge topt-1.3.1 .tar ... 5 Starting to download Console_Ge topt-1.3.1 .tar (Unknown size) 6 ........done: 21,504 bytes 7 downloadin g Archive_Ta r-1.3.10.t ar ... 8 Starting to download Archive_Ta r-1.3.10.t ar (Unknown size) 9 ...done: 98,304 bytes 10 upgrade-al l ok: channel:// pear.php.n et/Console _Getopt-1. 3.1 11 upgrade-al l ok: channel:// pear.php.n et/Archive _Tar-1.3.1 0
新規チャネルを自動的に探すようにPEARの設定を変更します。
1 $ sudo pear config-setauto_disco ver 1 2 config-set succeeded
キャッシュをクリアします。
1 $ sudo pear clear-cache 2 reading directory /tmp/pear/ cache 3 28 cache entries cleared
PHPUnitをインストール
1 $ sudo pear install -a pear.phpunit.de/PHPU nit
インストールされたPHPUnitのバージョン確認
1 $ phpunit --version 2 PHPUnit 3.6.12 by Sebastian Bergmann.
Gitをインストールします。
1 $ sudo apt-get install git
インストールされたGitのバージョンを確認します。
1 $ git --version 2 git version 1.7.9.5
curlをインストールします。
1 $ sudo apt-get install curl
FuelPHPのoilコマンドをインストールします。
1 $ curl get.fuelphp.com/oil | sh 2 % Total % Received % Xferd Average Speed Time Time Time Current 3 Dload Upload Total Spent Left Speed 4 100 244 100 244 0 0 204 0 0:00:01 0:00:01 --:--:-- 628 5 $ which oil 6 /usr/bin/o il
HTTPサーバのWebディレクトリにFuelPHPをインストールします。
1 $ cd /var/www 2 $ sudo oil create fuelphp-sample
http://loc
FuelPHPの言語設定、タイムゾーン設定、ロギング設定、default_ch
1 $ cp fuel/app/config/conf ig.php fuel/app/c onfig/conf ig.php.bak 2 $ vi fuel/app/c onfig/conf ig.php 3 $ diff fuel/app/c onfig/conf ig.php.bak fuel/app/c onfig/conf ig.php 4 12a13,15 5 > // set default charset 6 > ini_set('default_ch arset', 'UTF-8'); 7 > 8 76c79 9 < 'language' => 'en', // Default language 10 --- 11 > 'language' => 'ja', // Default language 12 78c81 13 < 'locale' => 'en_US', // PHP set_locale () setting, null to not set 14 --- 15 > 'locale' => null, // PHP set_locale () setting, null to not set 16 89c92 17 < 'default_ti mezone' => 'UTC', 18 --- 19 > 'default_ti mezone' => 'Asia/Tokyo ', 20 101c104 21 < 'log_thresh old' => Fuel::L_WA RNING, 22 --- 23 > 'log_thresh old' => Fuel::L_AL L,
PHP実行可能ファイルの設定
[Window] メニューから [Preference
「Name」は「PHP」とし、「Executable
次に左カラムから、 「PHP」の「Debug」を選択し、「PHP Debugger」に「XDebug」を、「PHP Executable
第220回検定で1次:計算技能検定のみ合格し、先日の第223回検定では2次:数理技能検定のみを受検していたのですが、何とか合格することが出来ました。