カテゴリー: WEB

  • 【http】404ページへアクセスがある原因【error】

    WEBサイトにおいて、存在しないページにアクセスがあると、404ステータスコードを返すのが一般的な仕様となっています。

    そして、404ステータスの場合に、WEBサイト側で用意した、404ページへリダイレクトさせることもできます。

     ErrorDocument 404 http://example.com/error/404.html

    このような設定を、.htaccess に記述すると、リンク切れなどでページが存在しない場合、404.html に遷移します。

    つまり、通常、リンク切れなどがなければ、404.htmlへのアクセスは無いはずなのですが、頻繁にアクセスが有るケースがあります。

    それは、検索エンジンのロボット(クローラー)が、robots.txt にアクセスする場合です。

    robots.txt とは、検索エンジンのロボットに対して、クロールの可否を知らせるものです。

    ロボットがrobots.txtにアクセスしてきた時、このrobots.txt  を設置していないと、サーバーは、存在しないページにアクセスしてきたものとして、ロボットに対し404ページへ移動するよう処理します。

    つまり、リンク切れがない場合でも、robots.txt  を設置しておらず、かつ、404ページへの遷移の設定をしていると、robots.txt のため、404ページへのアクセスがログに記録されてしまうわけです。

    この対策としては、robots.txt を設置すればよいのですが、サイトへのアクセスを左右するものだけに、慎重に行うべきだと考えます。

    なお、robots.txt は、サイトに必須のものではないので、「設置しない」というのも一つの選択肢です。

  • 漢数字→アラビア数字変換ツール

    必要にせまられて、PHPで漢数字→アラビア数字変換ミニアプリを作成したので、紹介しておきます。

    漢数字→アラビア数字変換ツール

    数字単体だけでなく、文章中に出てくる漢数字を半角アラビア数字に変換します。

    なお、全角・半角の変換をしたい人には、

    全角半角変換ツール

    を紹介しておきます。

    お約束ですが、ご利用は自己責任でお願いします。

  • 【XAMPP】VirtualHostの設定【PHP】

    XAMPPでのVirtualHostの設定の覚書です。

    なお、ここで使用するXAMPPのバージョンは、1.7.4です。利用するPCはvistaです。

    VirtualHostの設定をすると、ローカル環境で通常のドメインのようにWEB開発をすることができます。

    設定無し:http://localhost/example.com/

    設定有り:http://example.com

    設定有りにしてやると、localhostのパスが不要になり、より本番環境に近い開発ができます。一番の利点には、絶対パスと相対パスが本番環境と同じになることが挙げられます。

    VirtualHostの設定手順は、大きく二つに分かれます。

    1.XAMPPの処理・・・httpd-vhosts.confの設定

    2.利用するパソコンの処理・・・hostファイルの設定

    それぞれ、10分前後で終わるので、初心者の人も試してみる価値があると思います。

    それでは、実際に、設定してみましょう。

    1.XAMPPの処理・・・httpd-vhosts.confの設定

    XAMPP1.7.4では、httpd-vhosts.confに設定を書き加えます。

    ファイルのある場所は、

    C:\xampp\apache\conf\extra\httpd-vhosts.conf

    になります。利用するテキストエディタでファイルを開きます。

    そうしたら、

    NameVirtualHost *:80

    の行を見つけます。1.7.4では、20行目あたりになります。

    この文の先頭に#があるなら、外します。#はコメントであり、外すことで設定が有効になります。

    次に、先ほどの行の下に、ヴァーチャルホストの設定を書き加えます。

    <VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs"
    ServerName localhost
    </VirtualHost>
    
    <VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs/example.com"
    ServerName example.com 
    </VirtualHost>

    一つ目は、localhostをhtdocsのルートにする設定です。

    二つ目が、自分が利用したいドメイン名を設定する処理です。example.comを自分のドメインに書き換えてください。DocumentRoot と ServerName の2行を書き換える必要があります。

    ここまで書き換えたら保存します。ここで、1段階目の処理が終了です。次に2段階目の処理に移ります。

    2.利用するパソコンの処理・・・hostファイルの設定

    今度は、自分のパソコン(windows)の設定をします。

    ここでは、windows付属のメモ帳を使います。

    スタートメニュー → すべてのプログラム → アクセサリ → メモ帳 と選択して、メモ帳の上で右クリック。管理者として実行を選択します。

    空のメモ帳が開いたら、「ファイル」を選択し「開く」を選択します。

    hostファイルのある場所は、

    C:\WINDOWS\system32\drivers\etc\host

    になります。ただし、etcまで行っても何もファイルが表示されないと思います。

    ここで、ウインドウ右下の「テキスト文書(※.txt)」を「すべてのファイル」に変更してやります。すると、hostファイルが表示されるようになります。

    表示されたら開いて編集します。

    書き加えるのは以下の2行です。

    127.0.0.1       localhost
    127.0.0.1       example.com

    もし、上のlocalhostの行があれば、下の一行を書き加えるだけでOKです。

    ちなみに、ここでも、#は外しておきます。有効にするには、#を外すのです。

    これで、2段階目も終了です。

    さて、最後に、XAMPPを一度、終了して、再度、起動してみましょう。立ち上げたら、自分の利用するドメイン(ここでは、exmaple.com)

    http://example.com

    にアクセスしてみましょう。

    http://localhost/example.com

    にしなくても、表示されていると思います。

    以上です。

  • 【google maps api】infowindowの中で改行させる処理【PHP】

    google maps api を利用していて、吹き出しであるinfowindowの中で改行させる方法です。

    通常の場合、<br>または</br>タグを記述すれば、改行されます。

    しかし、PHP+DBで連携させていて、データをDBから取得して処理する場合、改行処理の関数であるnl2br関数を当てて処理しても、上手く改行表示されません。

    そこで、改行文字をスクリプトを使って<br>に変更します。

    参考までに、スクリプトは以下の通りです。

    $needles = array("\r\n", "\r", "\n",);
    $string = str_replace($needles, '<br>', $string);

    文字列$stringに入っている改行文字をstr_replace関数で<br>に戻してやります。

    ちなみに、CORESERVERでは、\r\nを変換するだけで上手くいきましたが、念のため、\rおよび\nも変換対象にしています。

    以上です。

  • PHPで作るアクセスカウンター【昨日・今日・合計】

    PHPでアクセスカウンターを作ってみました。

    いわゆる昨日・今日・合計形式のテキストカウンターです。

    【追記】このスクリプトの改訂版を掲載しました。(2014/01/29)
    http://webmaster.chielog.com/php/182.html

    作ったといっても一から作るのではなく、レッツPHP!さんの昨日・今日カウンターをカスタマイズしてみました。

    カスタマイズといっても大分変更してシンプルにしてあります。

    <?php
    //ログファイルcount.logの形式は1行のみで以下の通り。
    //今日の日付け|昨日のカウント|今日のカウント|合計カウント
    //例:20120101|07777|05555|09999999
    $now_date = date('Ymd') ; // 今日の日付
    $yes_date = date('Ymd', strtotime('-1 day')) ; // 昨日の日付
    // カウンタ記録ファイル
    $count_log = 'count.log' ;
    $dat = file($count_log) ; //ログを配列に読み込む
    if (!empty($dat)) {
        //変数を展開(比較用日付、昨日、今日、総合)
        list($key, $yes, $tod, $all) = explode("|", $dat[0]) ;
        if ($key === $now_date) { //ログの日付が今日ならカウントアップ
            $tod++ ;
        } elseif ($key === $yes_date) { //日付がかわったら昨日に今日を、今日に1を入れる。
            $yes = $tod ;
            $tod = 1 ;
        }
        $all++ ; //合計カウントアップ
    
        //桁数整形
        $yes = sprintf("%05d", $yes) ;
        $tod = sprintf("%05d", $tod) ;
        $all = sprintf("%08d", $all) ;
        //ファイル更新
        $new = implode("|", array($now_date,$yes,$tod,$all)) ;
        $fp = fopen($count_log, "r+") ;
        flock($fp, LOCK_EX) ;
        fputs($fp, $new) ;
        fclose($fp) ;
    }
    echo $all.'|' ;
    echo $tod.'|' ;
    echo $yes     ;
    //end

    こんな感じです。

    レッツPHPさんとの違いは、

    1. 画像を無くし、テキストオンリーにしたこと
    2. fopen関数をwモードではなくr+モードにしたこと
    3. 桁数を整形してからファイルに書き出ししていること
    4. 日付変更時のロジックを簡略化

    などなどです。

    カスタマイズの理由は、

    1. テキストのみの方が軽い
    2. fopenをwモードで処理するとファイルが壊れる(ファイルが空になる瞬間あるため)
    3. 先に桁数を整形した方が、日付変更時に桁数違いのバグが出ない
    4. 三項演算子の処理が不要だったので簡略化

    というわけです。

    アクセスカウンターを作成している人の参考までに。

    なお、スクリプトのご利用は自己責任でお願いします。

    fopen関数とfputs関数の仕様についての関連記事
    http://webmaster.chielog.com/php/125.html