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

 



文字列フィールドの 平均バイト数を出す

select avg(b.length) from (SELECT length(comment) as length from blogs where del_flg=0) as b;

$.each() でスキップする


phpだと continue;
jQuery.each()の場合は return true;



Carbon Emacs


Carbon Emacs (おまけ)
Ctl+X+F で file find モード
※Ctl押しながら 「X」 続けて「F」と押す
※ユーザのhomeディレクトリ配下を見てる

Carbon Emacsパッケージは、銭谷誠司氏が開発を続けているMac OS X向けのEmacsパッケージである。有用スクリプト等がデフォルトで含まれているほか、日本語環境向けのパッチなども導入されており、日本語環境で利用するならもっともおすすめできるEmacsパッケージである。
参考)Emacs超入門[1]:Emacsの基本的な使い方とショートカットキー - SourceForge.JP Magazine : オープンソースの話題満載 -http://sourceforge.jp/magazine/09/04/06/1138226/2



デフォルトの ComponentとHelper


coreのcontroller.phpで確認すると
特に指定しないでも、
デフォルトで呼ばれる(使える) ComponentとHelperは以下のとおり

var $helpers = array('Session', 'Html', 'Form');

var $components = array('Session');

↑これを 各コントローラ(app_controller.phpとか自前_controller.php)で使うときは
にオーバーライドするか、functionの中に

$this->helpers[] = 'Javascript';
と書いておk~




任意の場所で Auth(User)情報を使いたいとき


【View】
session ヘルパーを使う
$session->read('Auth.User.id');
【Controller】
Session コンポーネントを使う

参考)



auto_increment リセット


ALTER TABLE `table` PACK_KEYS =0 CHECKSUM =0 DELAY_KEY_WRITE =0 AUTO_INCREMENT =1
※あちこちでみかけた、
alter `table` test auto_increment=1;」
じゃ、出来なかった


===========================
(追記)2012/10/24

テーブルに データが入ったままの場合は 別の方法で振り直す

オートインクリメント(自動連番)カラムの値を振り直す場合、下記の手順で実行する(例では ID カラムがこれに該当)
  1. ID カラムを削除
    alter table TBL-NAME drop column ID;
    オートインクリメント・カラムは各テーブルに一つだけしか作成できないので、連番を振り直す場合は、一旦カラムを削除して新たに作り直す必要がある
  2. 新規 ID カラム(整数型・自動連番)を追加
    alter table TBL-NAME add ID int(5) primary key not null auto_increment first;
    primary key は重複を許さない主キーのことであり、NOT NULL でなければならない


参考)
MySQL よく使うコマンド - WEB + PC http://weblogs.tail-lagoon.com/WebPC/2008/03/18/15/

今更ながら Cakeを焼く


cakeコマンドは coreの中のcake/console/cake (←shell)をbashで叩く
 →たたかれると 単に 同ディレクトリの cake.phpが呼ばれるだけ
これでうまくいかないなら
直接 php -q cake.php を叩けばいい
 ※ただ 上記のbashを利用すると自動でphpコマンドに「 -working」オプションをつけてくれるけどね カレントディレクトリが入るっぽい
■appをビルドする
cake bake
 →app アプリ一式をべべーっと作ってくれます
■各Controllerとか つくる
 ↑で作成した appディレクトリに行って
 cake bakeを叩くと なにつくるかーって聞かれます
$app>cake bake
Welcome to CakePHP v1.3.6 Console
---------------------------------------------------------------
App : app
Path: /hoge/huga/app
---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[F]ixture
[T]est case
[Q]uit
What would you like to Bake? (D/M/V/C/P/F/T/Q)
 Controllerなら[C]すかね?
 そっからの参考は→こちら
手順的な流れは M→C→V かな



ファイル名一括変更

※ Unixには無いらしい


rename [ -option ] perlexpr [ files ]
Unixには無いらしい
こんなファイルがあったとして
diary_YYYYMMDD.html
例)2011/08月分のファイルを一括バックアップリネーム→.html_bkにする
# 一覧確認
ls -l diary_201108??.html
rename 's/.html/.html_bk/' diary_201108??.html
# 一覧(再)確認
ls -l diary_201108??.html
参考)
ファイル名を一括変更するには(renameコマンド) - UbuntuJapanese Wiki






日付指定で touch


-d
touch -d "2 February 2011" [file_path]
touch -d "2003/1/1 00:00:00 am" [file_path]
 ※日時の設定は一般的な書き方をすることができる(例:"2000/1/8 13:14:00","Sat Jan 8 00:15:00 JST 2000",など)
-t
touch -t 200512011205 [file_path] 2005年12月1日12時05分に更新
 ※([CC]YY)MMDDhhmm[.SS]



[Perl] モジュールが使えるか確認する


perl -MMODULE_NAME -e ''
  ex)Image::Magick が利用可能かどうか調べる
  perl -MImage::Magick -e ''
モジュールが使えないとエラーが出る
Can't locate Image/Magick.pm in @INC (@INC contains: [....この部分は環境によって異なる.....]).
BEGIN failed--compilation aborted.
使える場合は 何も出ない
参考)




2012/05/26

[Perl] mkdirでパーミッション777にならない


mkdir "[dir_path]", 0777 or die &procEnd("[WARNING]error:mkdir 0777 [dir_path]");
↑で 777ディレクトリが作れなくて ナンデジャボケー(# ゚Д゚)コラー って暴れてたら
perlでmkdirするときは umask設定を解除しないとダメらしいとのこと。ぐはー!!
↓魔法の言葉
umask(0);
mkdir ~~
アリガトウゴザイマス<(_ _)>




Vim コマンドとかショートカットとかイロイロ


■移動系
| 行の先頭に移動(空白を無視)
_ 行の先頭に移動
  1. 下の行の先頭に移動
$ 行の末尾に移動
■カーソルがあってる文字列で次を検索
# *の逆
% 対応するカッコに移動
( 次の段落に移動(次の空行など)
) (の逆
e 単語単位で次に移動
b eの逆
g ファイルの始点に移動
G ファイルの終端に移動
:数字 数字の行に移動
Ctrl + u 画面半分上に移動
Ctrl + d 画面半分下に移動
■入力モードへの変更
i カーソルの左側から入力開始
I 行の先端から入力開始
a カーソルの右側から入力開始
A 行の終端から入力開始
o カーソルの下に改行してから入力開始
O カーソルの上に改行してから入力開始
■その他
undo ヒストリーバック
Ctrl + r redo uの逆
コピペ削除など
dd 今いる行を切り取り
d数字 今いる行+下の数字分の行を切り取り
yy 今いる行をコピー
y数字 今いる行+下の数字分の行をコピー
文字列検索とか
文字列検索
/検索文字列
n 次の該当箇所
N 前の該当箇所
:%s/痴漢前/痴漢後/g 全部痴漢
■ビジュアルモード的な感じ
v 項目選択
vを押下後に十字キーもしくは、hjklで移動すると文字列を選択しながら移動する
V 現在の行を全て選択
選択した状態で以下のコマンド
y 選択箇所をコピー
d 選択箇所を切り取り
p 選択箇所に上書きでペースト
r後に任意のキー 選択箇所全てをキーの文字列痴漢
u 選択箇所を全て小文字に
U 選択箇所を全て大文字に
■File explorer
:Sex ウインドウを分割してファイルエクスプローラを開く

参考*1