Neo Inspiration

Avatar

中の人:jakkrokk (HN統一しました) がphp,javascript,air,flex などなど好き勝手書いてます。仕事は主にWEBシステムの設計と開発、SEO全般など。

.htaccessでファイルがあったらリダイレクトしない処理

なんか今日3人から聞かれたので何でだろうって思ったら、
「.htaccessでファイルがあったらリダイレクトしない」 みたいなかんじで
検索しても出てこないんですね。

「RewriteCond」まで思いつけば割とすぐなんですが。

ということで、こんなかんじですよっと。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

・!-f はファイルがあったら以下のRewriteRuleを適用しない
・!-d はファイルがあったら以下のRewriteRuleを適用しない

これで「.htaccessでファイルがあったらリダイレクトしない」で検索して
ヒットしてくれればいいんだけどw

sakuraサーバで 2013:Lost connection to MySQL server エラー

さくらで運用しているアプリを弄っていたら
突然こんなエラーが

ERROR 2013: Lost connection to MySQL server at 'reading initial communication packet' Error 61

無論DBにアクセスできない状態になったので、なんなのかなーと探っていたら
10分ほどして勝手に直った。

直った?っていうか本当に直ったの?ってことで
一応作業を終えた後色々調べていたら
どうもプロセスが死んでリスタートされてる間にアクセスすると
こんなエラーになるらしい。

このエラーが出た間に裏側ででたmysqlのエラーログはこんなかんじ。

Server shutdown in progress

Lost connection to MySQL server during query

Can't connect to MySQL server on '***.db.sakura.ne.jp'

てっきり作業でUPDATE文とかINSERT文とか1000行単位でぶちこんでいたから
それのせいなのかと思ってただけによかったよかった。
なんかのタイミングでmysqlサーバが再起動してたぽいですね

ということでまたおきた時の為にメモ。

set_error_handler と restore_error_handler

シングルトン君を書いてる時にふと
try-catchのとこをきれいにかけないかなと思って
(今までいちいちtry文の中で throw new Exception() してたので)
set_error_handlerを使って書き直してみました。

//今までこんなかんじでめんどくさい
public function hogehoge() {
    try {
        if (TRUE === $error) {
            throw new Exception($e);
        }
        if (~~~) {
            throw new Exception($e);
        }
    } catch(Exception $e) {

    }
}

//set_error_handlerを使うとこうなる
public function hogehoge() {
    set_error_handler("Class名::dbErrorHandler");
    try {

    } catch(Exception $e) {

    }
    restore_error_handler();
}

public static function dbErrorHandler($enNo,$eStr,$eFile,$eLine) {
    throw new Exception($eStr,$enNo);
}

おーやっとそれっぽくなった。

ちなみに set_error_handler() は staticで書いておけば

set_error_handler("クラス名::dbErrorHandler");
set_error_handler("self::dbErrorHandler");
set_error_handler(array($this,'dbErrorHandler');

のどれでもいけます。

Continue Previous page Next page

Twitter