2012/06/15

[CakePHP2.0] 複数アプリが混在するサービスで生じた問題メモ

複数appが必要なとき、1.3の時には 何もきにせず
app_1/
app_2/

って作っていたので

2.0でも 同じ構成で作っていたら
app_1とapp_2の appController.phpに同じメソッド名があると、
app_1のappControllerを呼び出したら
app_2でappControllerをよんでも app_1のappControllerを見に行ってしまうとか

1と2に 同じ名前のControllerを置くと うまく動かないとか

いう声を聞いたので ちょっと調べたけど、未だ具体策はつかめず


いちおう メモがわりに 貼っとく


CakePHPで複数アプリケーション管理|マリンロード
http://www.marineroad.com/staff-blog/3159.html


CakePHP2.0で現状の問題点などまとめました。 | Fusic Developers' Weblog
http://blog.fusic.co.jp/archives/2207


eat cake, 複数のapp 同居
http://miztools.so.land.to/php5_list/eat_cake/ac_off/cake2.php/edit/multi_app


2012/06/05

同じネットワーク内でのvhosts設定

※まんま みーとくんからの転載 めもさせていただいた。


バーチャルホストの設定 - 肉になるメモ
http://d.hatena.ne.jp/kazumeat/20120130/1327918879

・/etc/httpd/con.d 以下にアプリ用のconfを作成
NameVirtualHost 192.168.1.111:80
#
# app1
#
<VirtualHost 192.168.1.111:80>
  DocumentRoot /var/www/app1
  ServerName app1.com
  ErrorLog logs/app1_error_log
  CustomLog logs/app1_access_log common
  <Directory "/var/www/app1">
      Options Indexes FollowSymLinks Includes ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all
  </Directory>
</VirtualHost>

#
# app2
#
<VirtualHost 192.168.1.111:80>
  DocumentRoot /var/www/app2
  ServerName app2.com
  ErrorLog logs/app2_error_log
  CustomLog logs/app2_access_log common
  <Directory "/var/www/app2">
      Options Indexes FollowSymLinks Includes ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all
  </Directory>
</VirtualHost>
・ローカルのhostsファイル設定
C:\Windows\System32\drivers\etc\hosts
192.168.1.111        app1.com
192.168.1.111        app2.com

2012/05/30

file_get_contentsで外部ファイルを読み取る


file_get_contentsで、外部のXMLや画像、webページなどを取得できる

◎普通に取得する場合
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;

◎ファイルの一部の読み込み
// 21 文字目から 14 文字ぶん読み込みます
$section = file_get_contents('./people.txt', NULL, NULL, 20, 14);
var_dump($section);

◎Basic認証
file_get_contents("http://user:password@www.example.com/");

◎ストリームコンテキストの使用
・ストリームコンテキストでのBasic認証
// ストリームを作成します
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Authorization: Basic " .base64_encode("user:password"). "\r\n"
  )
// 上で設定した HTTP ヘッダを使用してファイルをオープンします
$file = file_get_contents('http://www.example.com/', false, stream_context_create($opts));

・特定のヘッダで送信
// ストリームを作成します
$header = Array(
  "Content-Type: application/x-www-form-urlencoded",
  "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
  "Accept-language: en",
  "Cookie: foo=bar"
);
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>join("\r\n", $header),
  )
);

$context = stream_context_create($opts);

// 上で設定した HTTP ヘッダを使用してファイルをオープンします
$file = file_get_contents('http://www.example.com/', false, $context);

◎POSTで送信
$data = array(
    'param1' => 'hoge',
    'param2' => 'hogehoge',
);
$opt = array('http' => array(
    'method' => 'POST',
    'content' => http_build_query($data),
));
$contents = file_get_contents('http://www.example.com/', false, stream_context_create($opt));



クエリーキャッシュ関係を調べる

◎クエリーキャッシュが有効になっているか確認する

SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| have_query_cache | YES   |
+------------------+-------+
1 row in set (0.00 sec)

◎キャッシュのサイズを確認する

show variables like 'query_cache_size';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| query_cache_size | 0     |
+------------------+-------+

「have_query_cache」が「YES」になってても、この↑キャッシュサイズが0だったら キャッシュはされない。

◎キャッシュサイズを設定する

SET GLOBAL query_cache_size = 41984;

my.cnfで設定

query_cache_size = 32M

設定後にMySQL再起動 : service mysqld restart

◎クエリーキャッシュされたかを確認する

SHOW STATUS LIKE 'Qcache%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| Qcache_free_blocks      | 0     |
| Qcache_free_memory      | 0     |
| Qcache_hits             | 0     |
| Qcache_inserts          | 0     |
| Qcache_lowmem_prunes    | 0     |
| Qcache_not_cached       | 0     |
| Qcache_queries_in_cache | 0     |
| Qcache_total_blocks     | 0     |
+-------------------------+-------+
8 rows in set (0.00 sec)

キャッシュされると「Qcache_hits」とか「Qcache_queries_in_cache」とかの値が増える

2012/05/27

CakePHP での ログ設定 (CakePHP 1.3.6)


◎config/core.php
//PHP エラーレベルで指定
Configure::write('log', E_ERROR | E_WARNING | E_PARSE);
[Mode]
debug=0 の時
Fatal → Apacheエラーに出る
WARNIG → appエラーに出る

debug=1 の時 ↑上記のエラーに加えて、
Notice → appデバッグログに出る


◎ログファイル指定
[apache] vhostで設定 /etc/httpd/conf.d/vhosts/[user].conf
CustomLog /var/log/httpd/app_name_access_log common
ErrorLog /var/log/httpd/app_name_error_log ←PHPエラーとかが出る。

[app] アプリCakeのLogクラス)で出すログ
   →config/設定ファイル.phpで指定する
// ログPATH設定
CakeLog::config('custom_path', array(
'engine' => 'FileLog',
'path' => '/var/log/httpd/[app_name]_'
));
【出力先】
  → 「debug.log」、「error.log」は Cakeがエラーレベルに応じて出しわけます
  → Controller内とかでLogクラス使って出したものが出ます
 LOG_DEBUG:/var/log/httpd/[app_name]_debug.log
 LOG_ERROR:/var/log/httpd/[app_name]_error.log


【エラー出すときに使う↓メモ】
#var_dump(srlen(array())); //Fatal Error
var_dump(srlen('',)); //Pars Errore
var_dump(strlen(array())); //WARNIG
#var_dump($a); //Notice