int配列をList<Integer>に変換
package test; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Test { public static void main(String[] args) { int arr[] = {0,1,2,3,4,5,6,7,8,9}; List<Integer> list = Arrays.stream(arr).boxed().collect(Collectors.toList()); System.out.println("array: " + Arrays.toString(arr)); System.out.println("list : " + list.toString()); } // array: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] // list : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] }
Symfony2のMasterSlaveConnection設定
更新系クエリはmaster、参照系はslaveへと自動振り分けさせる為、doctrineのソースに入っているMasterSlaveConnectionを利用してみました。
変更前
# config.yml
doctrine:
dbal:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
orm:
変更後
# config.yml
doctrine:
dbal:
default_connection: master
connections:
master:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
wrapper_class: Doctrine\DBAL\Connections\MasterSlaveConnection
slaves:
slave1:
host: "%slave1_database_host%"
port: "%slave1_database_port%"
dbname: "%slave1_database_name%"
user: "%slave1_database_user%"
password: "%slave1_database_password%"
charset: UTF8
slave2:
host: "%slave2_database_host%"
port: "%slave2_database_port%"
dbname: "%slave2_database_name%"
user: "%slave2_database_user%"
password: "%slave2_database_password%"
charset: UTF8orm:
Profilerで確認したところ、以下のようにmasterの記述しかなく、振り分けられているかは一見わかりません。しかし、DBを直接確認したところ問題なく動作していました。
QueriesConnection master
SELECT t0.id AS id1, t0.name AS ...
SELECT t0.id AS id1, t0.name AS ...Database Connections
| Key | Value |
| master | "doctrine.dbal.master_connection" |
Symfony 2.4.2
doctrine 2.2
Authorizationヘッダー情報をPHPで取得
apacheのデフォルト状態だとAuthorizationヘッダーを送っても、$_SERVERには入ってこない。
下記の設定を追加する事で環境変数に渡す事ができます。
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]もしくは
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
なお、apacheに設定しなくとも
apache_request_headers()を使えば値の取得は可能でした。
$headers = apache_request_headers()
var_dump($headers);
DateTimeクラスで指定秒を追加
例)3600秒追加
$date = new \DateTime();
$date->modify('+3600 seconds');
//echo $date->format('Y-m-d H:i:s');constructでセットしても同様の結果が得られる
$date = new \DateTime('+3600 seconds');
//echo $date->format('Y-m-d H:i:s');php 5.4
Symfony2でmemcacheセッションを使う設定
config.ymlやservices.ymlなどに以下の設定をします
parameters:
session_memcache_host: localhost
session_memcache_port: 11211
session_memcache_prefix: sess_
session_memcache_expire: 86400
services:
session.memcache:
class: Memcache
calls:
- [ addServer, [ %session_memcache_host%, %session_memcache_port% ]]
session.handler.memcache:
class: Symfony\Component\HttpFoundation\Session\Storage\Handler\MemcacheSessionHandler
arguments: [@session.memcache, { prefix: %session_memcache_prefix%, expiretime: %session_memcache_expire% }]これでOK。
以下コマンドでデータが入ったか確認できます
$ memcached-tool localhost:11211 dump
前提として以下の環境です。
$ rpm -qa | grep memcache memcached-1.4.15-1.el6.x86_64 php-pecl-memcache-3.0.8-2.el6.ateam.x86_64
※php-pecl-memcachedもあるそうですが自分はmemcacheなのでMemcachedではなくMemcacheを指定しています。
ポート別に複数memcached起動
あらかじめインストール済みのmemcached関連ファイルをコピーして修正する事で可能になります
/etc/sysconfig/memcached
/etc/init.d/memcached
/usr/bin/memcached
例)11212ポートで開くmemcachedを追加
cd /etc/sysconfig cp memcached memcached.11212 vim memcached.11212 // PORT="11212"に変更
cd /usr/bin cp memcached memcached.11212 こちらはまったく同じでOK ※ちなみにプログラムがないと起動時に以下のエラーが出力されます "Distributed memory caching (memcached.11212) を起動中: /bin/bash: memcached.11212: コマンドが見つかりません"
cd /etc/init.d/memcached cp memcached memcached.11212 vim memcached.11212 // PORT、SYSCONFIG、progを修正。あわせてコメントも修正
$ diff memcached memcached.11212 10,11c10,11 < # processname: memcached < # config: /etc/sysconfig/memcached --- > # processname: memcached.11212 > # config: /etc/sysconfig/memcached.11212 17c17 < PORT="11211" --- > PORT="11212" 22c22 < SYSCONFIG="/etc/sysconfig/memcached" --- > SYSCONFIG="/etc/sysconfig/memcached.11212" 28c28 < prog="memcached" --- > prog="memcached.11212"
以上で起動できるようになります
# /etc/init.d/memcached.11212 start Distributed memory caching (memcached.11212) を起動中: [ OK ]
プロセスも確認できました
# ps aux | grep mem nobody 2226 0.0 0.0 352304 688 ? Ssl Feb10 2:09 memcached -d -p 11211 -u nobody -c 1024 -m 64 nobody 26883 0.0 0.0 340012 940 ? Ssl 12:25 0:00 memcached.11212 -d -p 11212 -u nobody -c 1024 -m 64 root 26961 0.0 0.0 107460 884 pts/1 S+ 12:25 0:00 grep mem