1月
14
2010
2

[メモ]さくらインターネットで管理しているドメインにSPFレコードを設定
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

この度、自前のECサイトを携帯対応するべく「PHPで作る携帯サイトデベロッパーズガイド」を購入して、ぼちぼち勉強からスタートしたところですが、4章のサーバー設定の項目でSPFレコードを設定した方がいいよ、との記述が。

以前からお客様とのやり取りで携帯メールアドレスを指定されることも多く、そのやり取りでメールが届かないということがたびたびあったのでSPFレコードの設定をするといいということは知っていたのですが、そのときはさくらインターネットのレンタルサーバでは無理!との結論で、あきらめていたことを思い出しました。

でもまてよ、と。
念のためもう一回調べてみようと思って、
さくらインターネット会員メニュー > 契約情報 > ドメインメニュー > ゾーン設定 を開いてみると…

できるじゃん!

ドメイン設定メニュー

ドメイン設定メニュー

書籍では
txt @ v=spf1 mx ~all
になってましたが、こちらの環境のmxレコードの指定が書籍と異なっていたので、
txt @ v=spf1 +ip4:000.000.000.000 ~all
※000.000.000.000にはサーバのIPアドレスを設定。管理画面のサーバ情報にあったと思う。
と設定しました。

さくらの設定画面だと、上から
@
テキスト(TXT)
v=spf1 +ip4:000.000.000.000 ~all
する
(チェックしない)

翌日linuxのターミナルから
$ dig ドメイン txt
と打って確認したところちゃんと設定されているようで一安心。

参考にさせていただいたのはこちら
SPFレコードを確認する – Hidde’s Tips

これでメールの未達が減ればいいのだけれど・・・。

追記
良く考えたらおかしなタイトルだったので修正
[メモ]さくらインターネットのドメインにSPFレコードを設定

[メモ]さくらインターネットで管理しているドメインにSPFレコードを設定

Written by suzukenn in: メモ | タグ:
12月
11
2009
0

[jQuery]IEがajaxのリクエスト結果をキャッシュする問題の解消方法
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

DBにあるデータをランダムに取得する処理をjQuery.ajaxで書いたところ、Firefox(多分ヤツ以外は)ではうまくいくけど、IEだけは常に同じデータを取得してくるという問題に遭遇。
どーせヤツのことだ、ググれば答えは一発で出てきた。

どうやらIEはXmlHttpRequestの結果をキャッシュするらしい。
そして、それを防ぐためには$.ajax()の前に下記を追加すればいいとのこと。

$.ajaxSetup({ cache: false });

参考サイト

IEがajaxキャッシュするのを抑制 – はらぐろブログラマン
大変助かりました。ありがとうございます!

余談ですが・・・

僕のまわりでは、もうMSはブラウザを作らなければいいのにってみんな言ってます。
素晴らしいブラウザは他にたくさんあるんだから、OS作りに全精力傾けて欲しいものです。。。

Written by suzukenn in: メモ | タグ: ,
11月
19
2009
0

[CakePHP]htmlヘルパーを<link rel=”canonical” />に対応させる
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

SEO的な事情で<link href=”URL” rel=”canonical” />を特定のページに入れる必要があったのでそのメモ。

html->cssの引数にrelがあったのでViewで$html->css(”URL”, “canonical”, array(), false));でできるかなーと思ってやったら、残念。
type=”text/css”が出てしまって、思うようにできませんでした。

なので、#6309 (Canonical meta tag in HTML Helper) – CakePHP : The Rapid Development Framework for PHP – Tracこちらのようにhtmlヘルパーを変更し*1 、該当アクションのViewで、

echo $html->meta("canonical", "URL", array(), false);

しました。

以上、メモでした。

200911201447
半角で<link rel=”canonical” />書いたら表示されていなかったので修正

  1. もちろん/app/views/helpersにコピーして []
Written by suzukenn in: メモ | タグ:
11月
18
2009
0

[CakePHP][cron][さくら]うまくいかない原因が環境変数って・・・
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

このたび、生涯で初めてcronを使ったのですが、なぜかうまくいかず散々悩んだ挙句がCakePHPに仕込んでいた「環境変数による判定」が原因だったというお話。2度と同じ轍を踏まないようメモしておきます。

サーバはさくらインターネットのレンタルサーバ・ビジネスプロを使ってます。

CakePHPのアクションを用意する

ZiSTA Cake: XREAのCronでCakePHPのシェルを実行する
こちらのようにコマンドラインから実行できるシェル形式にする方法もあるようですが、よくわからんので、今回は
CakePHPでcronを使う方法 – ElectricBrain Standard
こちらにある、Cakeのアクションをcronで実行するやり方でチャレンジしました。

複数のECサイトの売上を集計して、1日1回メールで売上日報を送信します。
ソースは割愛しますが、ブラウザからそのURLを開くと日報メールが送信されることを確認しました。

cronに設定してみる

[000742]CRONや.mailfilterに記述したプログラムが動作しません。
こちらにあるとおり、

cd /home/アカウント名/www/app/webroot ; /usr/local/bin/php send_report.php

てなかんじでコマンドを入力して、とりあえずテストのため実行時間を5分後くらいにセットして実行してみたのですが…
メールがこない。。。なんで?

あれこれ試してみたのですが一向にうまくいかない。
じゃあ、そのコマンドを直接コンソールから実行してみよう!というわけでやってみたところ、原因がわかりました。

リターンされてきたデータを見ると、データベースの接続に失敗している模様。
ブラウザからはうまくいくのに、なんで?と思いながらも/app/core/database.phpを見てみたら、環境変数を条件にローカルの開発環境と本番環境を振り分けしてました(笑)

結論・まとめ

ローカルの開発環境と本番環境では使うデータベースが違うので、database.phpで以下のように振り分けを行っていました。
/app/core/database.php

if (strpos($_SERVER['SERVER_NAME'],"サイトURLの一部") === false) {
    // ローカル開発環境のDB設定
} else {
    // 本番環境のDB設定
}

cronが実行するときにはSERVER_NAMEなんてとれないんですね。
というわけで、以下のように修正しました。

// さくらの場合/home/アカウント名/www....というフルパスになるので、それで判定する。
// ローカル環境にも同じようにアカウント名が含まれていれば使えないけど、いかようにもなりますね。
if (strpos(dirname(__FILE__), "アカウント名") === false) {
    // ローカル環境のDB設定
} else {
    // 本番環境のDB設定
}

その後コンソールからもcronからも無事にメールが送信されました^^

僕の知識の外のトラブルだったので解決に少してこずりましたが、何とかなってよかった :-)
今日から毎晩0:05に、売上報告が届く予定なので楽しみです♪

Written by suzukenn in: メモ | タグ: ,
10月
28
2009
0

[PHP]YahooとGoogleのリファラーからキーワードを抽出する
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

アクセスログのrefererからキーワードを抽出するメモです。
とりあえずヤフーとグーグルだけ。

// $refererにリファラが入っているとして…
if (strpos($referer, "www.google.co.jp/search") !== false) {
	// Google
	ereg("[?&]q=([^&]+)", $referer, $tmp);
	// もしかしたら文字コード変換もしなきゃかも
} elseif (strpos($referer, "search.yahoo.co.jp")) {
	// Yahoo
	ereg("[?&]p=([^&]+)", $referer, $tmp);
	// 検索クエリーのエンコーディングを取得
	ereg("[?&]ei=([^&]+)", $referer, $encoding);
	if ($encoding[1] != "UTF-8") {
		// 文字コードがUTF-8以外なら、UTF-8に変換(urldecode⇒mb_convert_encoding⇒urlencode)
		$tmpKeyword = mb_convert_encoding(urldecode($tmp[1]), "UTF-8", $encoding[1]);
		$tmp[1] = urlencode($tmpKeyword);
	}
}

というような感じでやってますが、もしかしたらまだ穴があるかもしれません。
また、もっと効率のいい方法もあると思います。もしご教示頂ける方がいらっしゃいましたら、コメント欄やトラックバックで教えていただけるととっても嬉しいです。

【注意事項】

  • Googleの方はエンコードの変換処理を入れなくても(とりあえず僕が持っているログでは)問題が無いので、入れてません。
  • ちなみに他の検索エンジンからの訪問は、全て合わせて5%程度なので、うちでは無視してます。(検索キーワードの抽出において)
Written by suzukenn in: メモ | タグ:

| I have been indebted to Aeros Theme. | Background image owner is NASA.