カテゴリー: PHP

  • CRONをXREA/CORESERVERで利用する方法

    XREA/CORESERVERにはCRONという機能が備わっています。

    CRONとは、定期的にプログラムを自動実行してくれる機能です。

    早速、試しに、このCRONをCORESERVERに設置してみましょう。

    【ここでのCRONの目的】

    サーバーのCRONを設定して、実際にどのように動くのか簡単なサンプルを使って実験してみます。

    サンプルの内容は、cron起動ファイル cron.sh を起動して、実行ファイル cron1.php で毎時、時刻を取得し、その結果をcron2.php に書き出すという単純なものです。

    【ファイル構成例】

    • cron.sh (705) ルートディレクトリに設置(一番上の階層)
    • cron1.php  (705) public_htmlディレクトリ内に設置
    • cron2.php  (606) public_htmlディレクトリ内に設置

    カッコ内の数字はファイルのパーミッションです。cron2.php に結果を書き出すので、このファイルは606としておきます。

    cron.shの拡張子 .sh は見慣れないかもしれませんが、シェルスクリプトの先頭shをさしていると思われます。cronの起動にはこの.shファイルが必要です。ここでは、phpファイルで実行するのですが、phpでなくてもよく、Perl,Rubyなどのスクリプトでも可能です。

    それでは、各スクリプトの中身を記述します。

    【スクリプトの中身】

    cron.sh

    #!/bin/sh
    #PHP
    /usr/local/bin/php /virtual/account/public_html/cron1.php
    exit

    accountには、XREA/CORESERVERの自分のアカウントを入れます。そして、実行するファイルが、public_html/cron1.phpなので、そこまでのパスを記述します。たったの4行だけです。
    ※ 改行コードは必ず「LF」で指定。

    cron1.php

    <?php
    # 出力先ファイル名を設定します。
    $fileName = 'cron2.php';
    // 書き込む文字列
    $string = date('Y年m月d日 H時i分s秒');
    $string .= '<br>';
    # データを書き込みます。
    file_put_contents($fileName, $string, FILE_APPEND );
    ?>

    まず、出力先であるcron2.phpを、$fileNameに代入しています。続けて、date関数で年月日と時刻を取得して$stringに代入。その後改行のための<br>も追加で代入しています。そして、file_put_contents 関数でcron2.php に追加書き加えしていきます。

    cron2.php

    //このファイルに時刻を自動的に書き込みます。
    //文字列testとでも書いておいてください。空でもOK。
    test

    cron2.phpはcron1.phpの結果を受けるものなので、空でもかまいません。

    おさらいすると、cron.sh で、CRONを起動して、cron1.php でプログラムを自動実行。そして、その結果を cron2.php に書き込むいうものです。

    【CRONジョブの設定】

    ファイルを設置したら、XREA/CORESERVERの管理画面からCRONジョブを選びCRONの設定をしてみましょう。

    XREA/CORESERVERでcronの設定

    CRON設定画面の一番上の設定0の枠に設定していきます。

    毎時、実行する場合には、分を0 にします。その他はワイルドカードの*を記入します。

    そして、ファイルのパスは、起動のための cron.sh を記入します。

    記入が終わったら「保存」をクリックして保存します。

    これで、毎時、00分にCRONが実行されます。
    果たしてどうなるでしょうか?

    【実行結果】

    XREA/CORESERVERでのCRONの結果

    ブラウザで、cron2.phpを開くとこのように毎時、日時を取得して書き加えられていることがわかります。ここでのCRONの設置は上手くいきました。
    (01秒となっているのは、cron.shファイルが00秒に実行され、cron1.phpがその一秒遅れになっているからと思われます。)

  • PHPスクリプトで誕生日や記念日までの残日数をカウントする

    誕生日や記念日などの毎年訪れる定期日までの残日数をカウントするためのPHPスクリプトを作ってみました。

    下記のスクリプトは、例として、年度末(3月31日)までの日数を計算するように設定しています。必要に応じて、最初の、3、31の部分を変更してください。

    <?php
    
    $tuki = 3 ;
    $niti = 31;
    
    $one_day = 60 * 60 * 24;
    $this_y = date(Y);
    
    $t1 = time();
    $t2 = mktime(0, 0, 0, $tuki, $niti, $this_y);
    
    if ($t1 < $t2) {
    
    $remain_day = ceil (($t2 - $t1) / $one_day);
    echo ($remain_day);
    
    } else {
    
    $next_y = ++$this_y ;
    $t3 = mktime(0, 0, 0, $tuki, $niti, $next_y);
    $remain_day = ceil (($t3 - $t1) / $one_day);
    
    $tukihi1 = date ('Ymd', $t1) ;
    $tukihi2 = date ('Ymd', $t2) ;
    $remain_day = ($tukihi1 != $tukihi2) ? $remain_day : 0;
    
    echo ($remain_day);
    }
    
    ?>

    PHPを知らない人のためにコメントを付けておきます。

    <?php
    
    $tuki = 3 ; //設定したい月
    $niti = 31; //設定したい日
    
    $one_day = 60 * 60 * 24; //1日の秒数
    $this_y = date(Y); //現在の年
    
    $t1 = time(); //現在のタイムスタンプ
    $t2 = mktime(0, 0, 0, $tuki, $niti, $this_y); //目標日のタイムスタンプ
    
    if ($t1 < $t2) { //目標日の月日が今日より後の場合
    
    //タイムスタンプの差を日付に直し、切り上げて残日数を計算
    $remain_day = ceil (($t2 - $t1) / $one_day);
    echo ($remain_day); //出力
    
    } else { //目標日の月日が今日より前の場合(当日含む)
    
    $next_y = ++$this_y ; //来年の年
    $t3 = mktime(0, 0, 0, $tuki, $niti, $next_y); //来年の目標日のタイムスタンプ
    
    //タイムスタンプの差を日付に直し、切り上げて残日数を計算
    $remain_day = ceil (($t3 - $t1) / $one_day);
    
    //当日に365と表示されるのを0にする処理
    //当日に365と表示されてもよいなら下3行は不要
    $tukihi1 = date ('Ymd', $t1) ; //現在の月日
    $tukihi2 = date ('Ymd', $t2) ; //目標日の月日
    //カウントダウン当日:現在の月日と目標日の月日が同じなら0を代入
    $remain_day = ($tukihi1 != $tukihi2) ? $remain_day : 0;
     
    
    
    
    echo ($remain_day); //出力
    }
    
    ?>

    一応こんな感じです。間違いや不具合があるかもしれないので、ご利用は自己責任でお願いします。当ブログでは一切責任を負いません。間違いを見つけられた場合、コメントでご指摘くださるとありがたいです。

    <参考にしたブログ>
    フロッグさんの日記
    http://d.hatena.ne.jp/frogfrogfrog/20091111
    わかりやすくてとても助かりました。

  • ホームページビルダーを軽くする方法(PHPによる共通外部ファイルの読み込み)

    ホームページビルダーには、サイトのページ数が多くなるにつれ、次第に動作が重くなるという欠点があります。

    サイトのページ数が、200から300ページを超えるあたりから、『サイトを開く』、『ページを保存する』などの動作が重くて遅くなってきます。

    この重くなる原因として考えられるのが、それぞれのページが相互に持つ内部リンクです。つまり、特定の操作をすると、ホームページビルダーが、その内部リンクの構造を把握するように働き、ページ数が多くなるにつれ、その処理に時間がかかってしまうのです。

    この問題を解消するために、PHPを使います。
    (PHPなどのスクリプトを利用できるサーバーに限ります)

    どのようにするか順に説明します。

    1.まず、ページに記述している内部リンクの部分を外部ファイルとして共通化します。

    2.次に、PHPのファイル読み込み関数「require_once」を使い、元のリンクのあった部分に、1で作った外部ファイルを読み込むようにします。

    これだけです。
    気づいた人もいると思いますが、これは、昔、SSI(サーバー・サイド・インクルード)として広まった手法を、PHPで実現したものです。

    以下、ソースを挙げて具体的に解説します。

    まず、各ページに共通化できそうな部分としてサイドバーのリンクやフッター部のリンクを切り取り、別ファイルとしてサーバー上に保存します。

    common_part.php

    <ul>
    <li><a href="link1">リンク1</a></li>
    <li><a href="link2">リンク2</a></li>
    <li><a href="link3">リンク3</a></li>
    </ul>

    一つのPHPファイルにこのような記述をするだけです。meta情報などは不要です。

    そうしたら、今度は、元のページのリンクのあった部分に次の一文を書き加えます。

    元のページのhtmlファイル

    <?php
     require_once 'common_part.php';
    ?>

    元のページから、common_part.php を呼び出すためこのように記述します。

    たったこれだけです。SSIとして処理していた昔は色々と面倒でしたが、PHPを利用するとこの一文だけで共通部分を読み込み、ページに組み込むことができます。

    この方法は、サイドバーだけでなく、ページのヘッダーやフッターなどの共通部分化にも役立ちます。

    このように、共通化できるリンク部分を外部ファイル化することで、ホームページビルダー自体が、リンク構造を把握する必要がなくなるので、ビルダーの処理の軽さにつながるわけです。

    この処理ができると、共通部分の保守管理も楽になるので是非、利用してみることをお勧めします。

    <追加情報>

    htmlファイルは、通常では、PHPとして動作させることはできません。
    htmlファイルをPHPとして動かすには、下のような一行を書き加えた .htaccess ファイルを当該ディレクトリにアップする必要があります。

    .htaccess

    AddType application/x-httpd-php .html

    .htaccess の最初に付くドットを忘れないように。

  • PHP初学者のためのお勧めの本

    関連記事:PHPのお勧め本の紹介(最新版)

    HTMLとCSSを使用して、WEB制作をしている人の中には、次のステップとして、「プログラミング」を考える人も多いと思います。

    しかし、文系出身だったりすると、「プログラミング」に興味があっても、そこはかとない苦手意識がつきまとうのも事実でしょう。

    そこで、ここでは苦手意識なく、簡単にプログラムを学ぶことができる「PHP」の本を3冊取り上げます。

    なぜ、PHPかというと、現在、WEB制作で最も役に立つのがPHPと思われるからです。

    対象者は、HTMLとCSSについてそこそこ理解している脱PC初心者です。

    1.PHPを学ぶための最初の1冊

    PHPの絵本 アンク著

    この本は、プログラミングの絵本シリーズとして有名な本の一冊です。

    全くのプログラミング初心者なら、ぜひ、読んでおきたい入門のための入門書と言えます。

    比較的、薄く、かつ、内容もわかりやすいように、絵をつけ、かみ砕き、丁寧に教えてくれます。

    この本を読めば、変数・配列・条件分岐・繰り返し・ファイル操作などプログラミングの基礎の全体像をつかむことができます。

    2.PHPを学ぶための2冊目

    PHPテクニックブック ミューテック著

    PHPの絵本の後に、ぜひ、読みたいのが、PHPテクニックブックです。

    この本の特徴としては、PHPの重要部分を網羅しており、テキストとして、また、逆引き本として使える点にあります。

    基本的に1ページ1スクリプト完結となっており、上部にPHPコード、下部に解説となっています。

    コードと解説を照らし合わせながら学習できるので、効率よく読み進めることができます。

    また、この本では、PHPだけでなく「データベース」についても詳解されています。

    「MySQL」と「PostgreSQL」の2つが解説されていますが、「MySQL」のところだけでも読むと、PHPでのデータベースの扱いがよくわかります。

    また、「PHPの絵本」では、あまり取り上げられなかったセッションやクッキーについてもわかりやすく解説されています。

    3.PHPを学ぶための3冊目

    基礎からのMySQL 西沢夢路 著

    3冊目に読みたいのは、「基礎からのMySQL」です。

    MySQL?と思われる方も多いと思います。

    なぜMySQLなのかというと、この本では、MySQLを学習するためのアプリケーションにPHPを採用しているからです。

    大きく言えば、PHPとMySQLがセットになっていることを、よく認識させてくれる本です。

    前半では、MySQLの解説に重点が置かれ、中盤で、PHPの解説、後半で、PHP+MySQLの掲示板アプリの作成となっています。

    この本は、比較的、ページ数が多いですが、解説を丁寧にしたからであって読みやすさは一押しです。

    この本を通して、掲示板の作成をすると、PHPとMySQLについての基礎を一通り学習したことになります。

    (もし、SQLに不安があるなら、この本を読む前にアンク絵本シリーズの「SQLの絵本」を読むことをお勧めします。)
    上記3冊は、ひと月かからず読むことができるので、実質、2ヶ月目からは、WEBプログラミングを実際のホームページ作りに役立てることができます。