Author Archives: commerce

PHP Warning

PHP Warning:  date(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function.

読んで字の通り、php.ini に

date.timezone = 'Asia/Tokyo'

とするか、コード中に

date_default_timezone_set('Asia/Tokyo')

とすれば、このワーニングはなくなる。

MySQLをインストールし、.NET 接続する。

ずっと前、少しだけ MySQL を使ったことはあったのですが、もう殆ど忘れていました。Linux にインストールするところから Visual Studio 2008 のサーバーエクスプローラーを使ってリモートからデータ接続を行うまでの記録です。

環境は、サーバーが、

CentOS 6.2 x86_64

MySQL 5.1.61

クライアントが、

Windows 7 Ultimate SP1 32bit

Visual Studio 2008 Professional Edition SP1

.Net Framework 3.5 SP1

MySQL Connector/Net 6.5.4

サーバー側

MySQLのインストール

あまり時間もなかったので、最も簡単なGNOMEデスクトップからGUIによるインストールを行いました。一応手順を記述します。

  1. メニューから[システム]-[管理]-[ソフトウェアのの追加/削除]をクリックします。

  2. 左側ツリーから
    Database
    ┗MySQLデータベースサーバー
    を選択すると右側に現れる
    mysql-server-5.1.61-4.el6(x86_64)にチェックし[適用]ボタンをクリックします。
  3. 指示に従いインストールを続けます。
    以下が自動で追加インストールされます。
    ・perl-DBD-MySQL-4.013-3.el6(x86_64)
    ・perl-DBl-1.609-4.el6(x86_64)
    ・mysql-libs-5.1.61-4.el6(x86_64)
    ・mysql-5.1.61-4.el6(x86_64)
  4. インストールが終わったら、言語セットをUTF8に設定します。
    キャラクタセットをUTF8に設定するために “/etc/my.cnf” を編集します。

    [mysqld]
    default-character-set=utf8
    character-set-server=utf8
    [client]
    default-character-set=utf8
    
    • [mysqld]の中に “default-character-set=utf8″ と
      “character-set-server=utf8″ を追加します。
    • [client]を追加し、その中に “default-character-set=utf8″ を追加します。
  5. OSの起動時、サービスが自動起動するようにします。(userは、root)
    ※ここからは、ターミナルからキャラクタベースでコマンド入力します。

    $ chkconfig mysqld on
  6. 確認
    $ chkconfig --list mysqld
    mysqld  0:off 1:off 2:on  3:on  4:on  5:on  6:off
    

    → 2,3,4,5 が on になっていることを確認します。

  7. サービスの手動制御コマンド
    $ /etc/rc.d/init.d/mysqld start

    【引数説明】
    start       … 開始
    stop       … 停止
    status      … 実行状態を表示
    restart      … stop, start を順に実行
    condrestart   … 動作していれば停止し、再起動する

DBユーザの作成

  • rootユーザで実施しました。
    db_user というDBユーザーを作成します。

    $mysql
    mysql> grant select,insert,delete,update,create,drop,file,alter,index on *.* to db_user@'%' identified by 'password';
    mysql> grant select,insert,delete,update,create,drop,file,alter,index on *.* to db_user@'localhost' identified by 'password';
  • 最初、上の行(to db_user@’%')を実施したのですが、ssh接続したターミナルからdb_userで接続できなかったため下の行(db_user@’localhost’)を実施しました。これでよかったのかどうかはわかりませんが結果オーライでここに記述します。

データベースの作成

  1. データベースの確認
    db_user というDBユーザーで接続します。Linux User は、root 権限のない普通のユーザーで実施しています。

    $ mysql -u db_user -p
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | test               |
    +--------------------+
    
  2. データベースの作成
    user_db というデータベースを作成します。

    mysql> create database user_db;
  3. データベースの確認
    ちゃんとできているか確認します。最後に “user_db” の一行が追加されているのでOK.

    mysql> show databases
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | test               |
    | user_db            |
    +--------------------+
    mysql> exit
    
  4. 言語セットの確認
    作成したデータベースの言語セットがUTF8になっていることを確認します。
    作成したデータベースにログインするため、一旦 “\q” で mysql インタプリタを抜けてから以下を実行します。

    $ mysql -u db_user -D user_db -p
    mysql> show variables like "char%";
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | utf8                       |
    | character_set_connection | utf8                       |
    | character_set_database   | utf8                       |
    | character_set_filesystem | binary                     |
    | character_set_results    | utf8                       |
    | character_set_server     | utf8                       |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    8 rows in set (0.00 sec)
    

テスト用テーブルの作成

  • DBユーザ db_user で、データベース user_db に接続し、テスト用のダミーテーブル test_tbl を作成します。
    $ mysql -u db_user -D user_db -p
    mysql> create table test_tbl (
        -> id INT NOT NULL AUTO_INCREMENT,
        -> title VARCHAR(10) NOT NULL,
        -> update_date DATE,
        -> PRIMARY KEY (id)
        -> );
    

クライアント側

.NET で接続したいので、MySQL用データプロバイダーを入手し、Visual Studio から、作成したデータベースに接続し、テスト用のテーブルにデータを挿入してみる。

ダウンロード& データプロバイダのインストール

  1. http://dev.mysql.com/downloads/ の Connector/Net をクリックしジャンプしたページの Windows (x86, 32-bit), MSI Installer [Download] をダウンロードする。
  2. ダウンロードした msi ファイルを実行、ウィザードに従い、インストール
  3. Visual Studio 2008 – サーバーエクスプローラー を開き、データ接続の上で右クリック
  4. コンテキストメニューから [接続の追加] を選択
  5. 接続の追加ダイアログにて、サーバー名(またはIP)、ユーザー名/パスワード、データベース名を入力し、[テスト接続] をクリックし、接続を確認。
  6. 接続確認がOKなら、言語セットをUTF8に設定するため、[詳細設定(V)]のボタンをクリック

    詳細プロパティダイアログにて、Character Set の内容を “utf8″ に設定。後は[OK]クリックでVS2008 サーバーエクスプローラーに戻る。
    ※このとき、必ず “utf8″ は、小文字で入力してください。
  7. Server Name に指定したサーバー名(例ではcentos6)でツリーが構成される。テスト用テーブル “test_tbl” をダブルクリックすると、デザインモードで開かれ、また右クリックして「データの取得」を選択するとグリッドがオープンされ、データを挿入したり、修正したり加工ができる。

PHPフレームワークsymfonyをインストールする

PHP上で動作するアプリケーション開発フレームワーク symfony を導入します。プロジェクト,アプリケーション,モジュールを作成し、ブラウザで確認するところまでをまとめました。 http://www.symfony-project.org を参考にしていますので、詳細はそちらをご覧ください。

下記環境に PEAR を用いて symfony 1.4.19 をインストールしました。

CentOS 6.2 x86_64(サーバー名:centos6)

Apache 2.2.15

PHP 5.3.3 (Zend Engine v2.3.0)

 symfonyはMITライセンスに基づいています。 商用利用もOKで、GPLなどとは違い、コピーレフトではなく(二次著作物のライセンス変更可)ソースコードを公開する必要もないので、ライセンスについてあまり気にする必要はありません。(著作権表示の義務はありますが)

symfonyのインストール

root で実行しました。

  1. pearを アップグレード
    $ pear upgrade PEAR
    Nothing to upgrade
  2. symfonyのチャネルに接続
    $ pear channel-discover pear.symfony-project.com
    Adding Channel "pear.symfony-project.com" succeeded
    Discovery of channel "pear.symfony-project.com" succeeded
  3. インストールの実行
    $ pear install symfony/symfony-beta
    downloading symfony-1.4.19.tgz ...
    Starting to download symfony-1.4.19.tgz(3,188,169 bytes)
    ......................................................
    ......................................................
    ......................................................
    ......................................................
    ......................................................
    ......................................................
    ......................................................
    done: 3,188,169 bytes
    install ok:
    channel://pear.symfony-project.com/symfony-1.4.19
  4. 確認(バージョンを表示してみる)
    $ symfony -V
    symfony version 1.4.19 (/usr/share/pear/symfony)

 プロジェクトの作成

 Linux user smi でディレクトリ “/home/smi” 配下に作成しました。

  1.  プロジェクト “jobeet” を作成する。
    $ cd /home/smi
    $ mkdir jobeet
    $ cd jobeet
    $ symfony generate:project jobeet
  2. /home/smi/jobeet 配下に symfony プロジェクトに必要な以下ディレクトリが作成される。
    apps/ プロジェクトのすべてのアプリケーションを格納する
    cache/ フレームワークによってキャッシュされるファイル
    config/ プロジェクトの設定ファイル
    data/
    lib/ プロジェクトのライブラリとクラス
    log/ フレームワークのログファイル
    plugins/ インストールされたプラグイン
    test/ ユニットテストと機能テストのファイル
    web/ Web 公開ルートディレクトリ

アプリケーションの作成

  1. アプリケーション “frontend” を作成する
    $ symfony generate:app frontend
  2. /home/smi/jobeet/apps/frontend 配下にアプリケーションに必要な以下ディレクトリが作成される。
    config/ アプリケーションの設定ファイル
    i18n/
    lib/ アプリケーションのライブラリとクラス
    modules/ アプリケーションのコード (MVC)
    templates/ グローバルテンプレートファイル

WEBサーバーの設定

  • httpd.conf を編集します。(httpd.confのパスは環境により異なります)
    $ vi /etc/httpd/conf/httpd.conf
  1. User
    User smi
    Linuxユーザーsmiの$HOMEディレクトリをプロジェクトホームにしているので、便宜上ユーザーをsmiに変更します。プロジェクトホームをどこにするかなどPermissionをどう与えるかなど基本設計の部分で適宜決める必要があります。
  2. Listen
    Listen は、デフォルトでポート番号 80 が1つ記述されています。
    Listen 80
    デフォルトの80番ポートを使うならそのまま何もしません。
    80番ポートは、通常のhtmlを表示し、symfonyプロジェクトは 8080番ポートを使うといった場合は、もう一行
    Listen 8080
    を追加で記述します。
    →この場合、8080ポートに対して Firewall の設定が必要です。
  3. VirtualHost
    Apacheのバーチャルホスト機能を使用し、公開用ルートディレクトリ /home/smi/jobeet/web を直接アクセスできるように設定します。

    NameVirtualHost *:80
    <VirtualHost *:80>
      DocumentRoot "/home/smi/jobeet/web"
      DirectoryIndex index.php
      ServerName centos6:80
      ErrorLog logs/centos6-error_log
      CustomLog logs/centos6-access_log common
      <Directory "/home/smi/jobeet/web">
        AllowOverride All
        Allow from All
    
      Alias /sf "/usr/share/pear/data/symfony/web/sf"
      <Directory "/usr/share/pear/data/symfony/web/sf">
        AllowOverride All
        Allow from All
    </VirtualHost>
    

    別のポート番号を使用する場合、80 の部分に別のポート番号を指定します。

  • Apache を起動(再起動)します。
    $ apachectl start
    or
    $ apachectl restart
    

ブラウザでの確認(プロジェクト)

  1. これまでのタスクで、”/home/smi/jobeet/web” に “index.php” が作成されていますので、PCブラウザから確認します。
    http://centos6/
    →当該環境では、IP:192.168.1.100 のWEBサーバーへの名前解決についてhostsファイルを使用します。 PC hostsファイルに1行追加します。

    C:\> notepad %windir%\system32\drivers\etc\hosts
    # Copyright (c) 1993-2006 Microsoft Corp.
    #
    # This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
    #
    # This file contains the mappings of IP addresses to host names. Each
    # entry should be kept on an individual line. The IP address should
    # be placed in the first column followed by the corresponding host name.
    # The IP address and the host name should be separated by at least one
    # space.
    #
    # Additionally, comments (such as these) may be inserted on individual
    # lines or following the machine name denoted by a '#' symbol.
    #
    # For example:
    #
    #      102.54.94.97     rhino.acme.com          # source server
    #       38.25.63.10     x.acme.com              # x client host
    127.0.0.1       localhost
    192.168.1.100   centos6
  2. 「Congratulations! You have successfully created your symfony project.」のメッセージが表示されていればOKです。

 モジュールの作成

  1. モジュール “category” を作成する。
    $ cd jobeet
    $ symfony generate:module frontend category
    

    ※「PHP Warning

  2. /home/smi/jobeet/apps/frontend/modules/ の下に “jobeet” ディレクトリ、更にその下に “actions”, “templates” ディレクトリが作成されます。
    これらのディレクトリには、初期のアクションファイル、テンプレートファイルが作成されます。

    $ ls apps/frontend/modules/category/actions/
    actions.class.php
    $ ls apps/frontend/modules/category/templates/
    indexSuccess.php

ブラウザでの確認(モジュール)

  1. ここまでのタスクが完了した時点で、symfony デフォルトページが表示されるようになります。 PCブラウザから確認します。
    http://centos6/category/index
  2. 「Congratulations! You have successfully created a symfony module.」のメッセージが表示されていればOKです。