Monthly Archives: 12月 2012

Smartyで任意のディレクトリのファイルをテンプレート化

Smartyは、templatesディレクトリなどを作って、テンプレートはそこに置くというのが基本の使い方。
でも、実はどの階層のどのディレクトリにでもテンプレートを置くことができる。

$smarty->fetch('file:/home/xxx/public_html/information/about.html');

みたいな感じで、file:の後にフルパスで指定できる。(相対パスで書いたらtemplatesディレクトリ内での相対パスになる)

つまり、全てのhtmlファイルを前処理するようなphpスクリプトをサイトに置いて、$_SERVER['PATH_TRANSLATED'] などを参考にアクセスされたHTMLファイルのパスを取得すれば、サイトにFTPされただけの素のhtmlファイル全てに対して、Smartyテンプレートとしてタグの埋め込みが可能になる。

という事は、共通ナビゲーションの加工やログイン有無での表示切替などを、PHP+Smartyでガリガリできる。

色々面白い事ができます。

WordPressのパーミッション設定

設置したあと、パーミッションを変えなきゃならないディレクトリやファイルがいくつかある。
以下のものに書き込み権を設定しなければならない。

/wp-content/cache/
/wp-content/uploads/
/wp-content/themes/ と、それ以下のファイル
/wp-content/plugins/ と、それ以下のファイル

rsyncで同期させるときに良く使うパターン

サーバ移転やバックアップにrsyncは良く使うけど、オプションを忘れやすいのでメモ。
私がよく使うパターンだけを書いているので、その他の高度なオプションはドキュメントを見てね。

rsync -avn -e "ssh -p22" --exclude '*.tmp' --delete /home/user1 user2@999.999.999.999:/tmp/

-a : アーカイブモード(基本的に指定して使う)
-v : 進捗表示
-n : テスト実行(実際には転送しない)
-e : シェル指定(ポート番号を変更したいときだけ必要)
--exclude 'パターン' : 除外したいファイル
--delete : 削除した物は転送先からも削除
転送元 : /で終わればそのディレクトリの中身だけ、/が付いてなければディレクトリそのものも転送
転送先 : ユーザー@ホスト:ディレクトリ(ユーザやホストは必要な場合だけ)

WordPress 2.x で管理画面のCSS崩れ

WordPress 2.x 系で動作していたサイトを、新しく借りたCentOS6サーバへ丸ごと移転してきたところ、Chromeで表示した管理画面のCSSが崩れていました。

CSSを出力しているモジュールが分かったので
http://ドメイン名/wp-admin/load-styles.php?c=1&dir=rtl&load=dashboard
と直接たたいてみたところ表示できません。
Firefoxで見てみると不正なヘッダー情報が帰っているというメッセージ。

内容符号化 (Content-Encoding) に問題があります
不正または不明な形式で圧縮されているため、ページを表示できません。

色々調べてみたところ、WordPressには高速化のため複数スクリプトを統合する機能があるらしく、それがHTTPヘッダーを弄ってしまう模様(wp3.5では問題なかったので2.xだけの問題らしい)

define('CONCATENATE_SCRIPTS', false); を wp-config.php の上の方に追加

で解決できました。この指定をするとwpの動作が遅くなるらしいので、3系にアップグレードしたら wp-config.php から削除しておかないと。。

参照元 : WP2.8Jの管理画面のCSSがSafariでは適用されない

サーバー管理ツールPlesk

管理画面Pleskは嫌いです。できれば使いたくありません。

独自のディレクトリ構成を強要するからです。という事は、Plesk画面を使わずにコマンドベースで操作する場合でも、Pleskが導入されているサーバだと常に意識しないといけないという事です。
/home/httpd/vhost/ドメイン名/httpdocs/ とか、意味不明です。

なんで管理ツールのために、新しいルールを覚えなきゃいけないんだか。やっぱりWebminぐらい何もしないほうが好きです。

それでも一応、使わなきゃいけないときに読むように、メモ。。GMOマイティサーバ PLESK操作マニュアル

JQueryMobileでAjaxによるページ遷移をやめる

a タグや form タグに1個ずつ属性指定するのも面倒なときに、まるごとoffっちゃう方法があるらしい。

<script type="text/javascript">
$(document).bind("mobileinit", function(){
	$.mobile.ajaxEnabled = false;
	$.mobile.pushStateEnabled=false;
});
</script>

でも、これだと読み込み待ちのアニメーションは止まらない。やっぱり個別に data-ajax=”false” を付けた方がいいのか?

CSVをエクセルで開くと前ゼロ取れちゃう

Excelあぁエクセル。CSVを開くと勝手にデータ内容を判断して余計な事をしてくれます。なんて親切!
0001→1 と前ゼロが取れてしまう。1-2-3 →2001-02-03 と日付にしてしまう。など。

  • ダブルクリックで開くのではなく、ファイルメニューからテキストファイルとして開いて、区切り文字を指定して、フィールド属性を1つずつ指定して読み込ませればバッチリ!
  • テキストエディタで開いて、区切り記号のカンマをタブ区切りに置き換えて全コピーして。事前に全セルをテキスト形式に設定しておいたExcel画面に貼り付ければ完璧!
  • そもそもCSVなんて辞める!

どれもお客さんはウンと言いませんよ。(滅びてしまえエクセル)

結局変換ツールでテキスト属性のついたエクセルシートに変換してしまうのが、一番簡単で確実のようです。

excellent」というフリーウェアならファイルをドラッグしてボタンを押すだけ!
「入力ファイル」欄にCSVファイルをドラッグして、「開く」ボタンを押すだけでエクセルファイルを作ってくれます!(要VisualBasic6ランタイム)

やっぱり、滅びてしまえエクセル

Alias Redirect Rewrite~の使い分け

Apacheで、訪問者のアクセスを振分けて誘導する方法にも色々あるのですが、似たような各機能の違いと使い分けをまとめてみます。

(以下、mod_aliasの機能)

Alias ※confにしか書けません
他の階層にあるファイルをあたかもそこにあるように見せます。
つまり、ブラウザに見えているURLは入力したまま。
AliasMatch ※confにしか書けません
“正規表現”を使ったAliasです。
ブラウザに見えているURLは入力したまま。
Redirect
URLの絶対パス(ドメイン名以降の部分)が、指定した文字列に一致したとき、指定のURLへジャンプします。
ブラウザのURL欄も変わります。
RedirectMatch
URLの絶対パス(ドメイン名以降の部分)が、指定した”正規表現”に一致したとき、指定のURLへジャンプします。
ブラウザのURL欄も変わります。Redirectよりちょっと高級。

(以下、mod_rewriteの機能)

RewriteRule
URLのパスが指定した”正規表現”に一致したとき、指定のURLへジャンプします。
ブラウザのURL欄も変わります。
つまり、単体では上記のRedirectMatchと出来る事はほとんど同じです。
RewriteCond
RewriteRuleより前に記述して、リクエストヘッダーの内容など、URLパス以外の条件で次のRewriteRuleへ進むかどうか振り分けます。ANDやORといった組み合わせ条件も書けるので、かなり複雑な条件で、転送処理ができます。

単純なURLの書き換えだけで済むのであれば、Redirect, RedirectMatch が軽くていいと思います。ちょっと複雑な転送はRewrite、隠れて裏で処理したい場合はAlias、という感じかな?

ここで注意しておかないといけないポイントは、.htaccessに記述する場合です。
mod_alias はドメイン以降のURLの絶対パスで判断します。
mod_rewrite は、それを記述したディレクトリからの相対パスで判断します。

なので、もしサブディレクトリ/tokyo/の中の .htaccess に記述する場合に
RedirectMatch /tokyo/tower_(.*)$ /skytree/$1
RewriteRule tower_(.*)$ /skytree/$1
という違いがあります。

両方を組み合わせ使っていると、よくごっちゃになります。

mod_rewriteを使って、スマホとPCでURLを分ける

フューチャーフォン (ガラケー) の時代には、よく使ってた方法です。

RewriteEngine On

# /sp以外にスマホが来たら、/spへリダイレクト
RewriteCond %{REQUEST_URI} !/sp/
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPad|Android)
RewriteRule ^(.*)$ /sp/ [R=301,L]

# /spにスマホ以外が来たら、/へリダイレクト
RewriteCond %{REQUEST_URI} /sp/
RewriteCond %{HTTP_USER_AGENT} !(iPhone|iPad|Android)
RewriteRule ^(.*)$ / [R=301,L]

機種依存での振分けだけど、一時的な転送じゃないから Status:301 をつけてみた。