PHP

PHPでファイルを開いて、一行ずつ読み込むやーつー。

file()とかfile_get_contents()でファイルを読み込むと
一気にデータがぶちこまれるから便利なんだけど、
ファイルの中身が数万行とかあると、メモリの使い方的によろしくないので
1行ずつ検証していきたい時用。

$file= 'example.txt';
$text = fopen($file, 'r');
for($l = 1; !feof($text); $l++){
    $line = fgets($text);
    if($line){
        //処理を記述
    }
}
fclose($text);

ファイルの存在チェックもかますとなおベター。

PHPのmb_send_mail()を使用する際の設定。

文字化け対策とか引数の順番とか
細かい部分で毎回調べてる気がするのでザックリめも。

$to = ''; //宛先アドレス
$subject = ''; //題名
$body = ''; //本文
$sender = ''; //送信者名
$from = ''; //送信元アドレス

mb_language('ja');
mb_internal_encoding('UTF-8');
$from = 'From: '.mb_encode_mimeheader($sender).' <'.$from.'>';
$body = mb_convert_encoding($body, 'ISO-2022-JP');
mb_send_mail($to, $subject, $body, $from);

とりあえずこれでメールは送信される(はず)。
sendmailのポート問題とかはまた今度。

Cakephp2.2にDebugKitを導入する。

忘れないようにメモ。

ココからDebugKitをダウンロードして解凍。フォルダ名を”DebugKit”にリネーム。pluginsディレクトリにフォルダごとぶち込む。
次にAppController.phpに以下を記述。

class AppController extends Controller {
  public $components = array('DebugKit.Toolbar'); //この行を追加。
}

最後にapp/Config/bootstrap.phpのどこでもいいから以下を追加。

CakePlugin::load('DebugKit');

以上で完了。
core.phpでデバッグレベルが0とかになってると出てこないので注意。

Cakephp2.2のバリデーション。

いつも忘れるので書式をメモ。

public $validate = array(
  'title' => array(
    array(
      'rule' => 'notEmpty',
      'message' => '*[title]必須項目です。',
    ),
    array(
      'rule' => array('maxLength', '80'),
      'message' => '*[title]80文字以内で入力してください。',
    ),
  ),
  'body'=>array(
    array(
      'rule' => 'notEmpty',
      'message' => '*[body]必須項目です。',
    ),
    array(
      'rule' => array('maxLength', '20000'),
      'message' => '*[body]20000文字以内で入力してください。',
    ),
  ),
);

あとはコントローラーからモデルにset()してvalidates()。
エラーメッセージは$this->Model->validationErrorsに全部ぶち込んであるので便利。

特定のブラウザでCakephp2.2のSessionが消える問題。

現象の再現方法は以下の通り

・CSSや画像関連で実際に存在しないパス&URLを指定しているとSessionが切れる。
・favicon.icoのパス指定がおかしいとSessionが切れる。
・IE8でCakePHP使うとセッションが切れる。

以下、人によっては解決するかもしれない方法

・Layoutをデフォルトに戻す。
・CSS, JSで画像してる部分が正しいパスであるか全部確認。
・CSS, JSを切る。
・core.phpのSecurity.levelをlowにする。
・SessionCompornentとSessionHelperをAppControllerで読み込んでみる。
・Session変数の名前を変えてみる。
・webroot直下の.htaccessを以下に書き換える。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.(cgi|css|gif|jp?g|png)$
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

ここまでやってもだめなら次の方法
core.phpに以下を貼っつける。

Configure::write('Security.cookie', 'cakephpfdebackend');
Configure::write('Session.cookieTimeout', 0);
Configure::write('Session.checkAgent', false);

これで治るよ!やったねたえt(ry