WEBの勉強ノート
Loading

CentOS5.4 に MySQL5.1,PHP5.3とphpMyAdmin

2010 年 2 月 28 日 日曜日

MySQL、PHP、phpMyAdminのインストールから、Wordpress用のデータベース作成まで。

最新版を入れるため、yumのリポジトリをインストールして変更する。依存関係を解消しながらインストールするより、yum を使った方がずっと楽。

インストール

[root@localhost ~]# wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
[root@localhost ~]# wget http://rpms.famillecollet.com/el5.i386/remi-release-5-6.el5.remi.noarch.rpm
[root@localhost ~]# rpm -Uvh epel-release-5* remi-release-5*

[root@localhost ~]# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
[root@localhost ~]# rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm

インストールする。

[root@localhost ~]# yum --enablerepo=remi,epel,rpmforge update php* mysql*
[root@localhost ~]# yum --enablerepo=remi,epel,rpmforge install php php-gd php-mbstring php-mysql php-odbc php-pdo php-pear mysql-server mysql-bench

phpMyadmin のインストール。

# yum --enablerepo=remi,epel,rpmforge install phpMyAdmin

PHPの動作確認

apacheの再起動

[root@localhost ~]# service httpd restart

phpinfo を表示してみる。一緒にインストールしたモジュールの項目が表示されていることを確認。

[root@centos ~]# vi /var/www/html/test.php

MySQL 設定

設定は文字コードのみ。

[root@centos ~]# vi /etc/my.cnf
[mysqld]
default-character-set = utf8
[mysql]
default-character-set = utf8

起動、自動起動設定

[root@centos ~]# service mysqld start
[root@centos ~]# chkconfig mysqld on
[root@localhost ~]# chkconfig --list mysqld
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off

mysql の root にパスワードを設定する。OS自体のユーザーとは別もの。まずは、パスワードを設定するユーザーを確認。

[root@centos ~]# mysql -u root
mysql> select user,host,password from mysql.user;
+-------------+-----------------------+-------------------------------------------+
| user        | host                  | password                                  |
+-------------+-----------------------+-------------------------------------------+
| root        | localhost             |                                           |
| root        | localhost.localdomain |                                           |
| root        | 127.0.0.1             |                                           |
|             | localhost             |                                           |
|             | localhost.localdomain |                                           |
+-------------+-----------------------+-------------------------------------------+

root にパスワードを設定。

mysql> set password for root@localhost=password('パスワード');
mysql> set password for root@localhost.localdomain=password('パスワード');
mysql> set password for root@127.0.0.1=password('パスワード');

mysql のrootにパスワードが設定されたことを確認。

mysql> select user,host,password from mysql.user;
+-------------+-----------------------+-------------------------------------------+
| user        | host                  | password                                  |
+-------------+-----------------------+-------------------------------------------+
| root        | localhost             | *0B6A2F2B175B57F40643A0377BE9274ACB964C44 |
| root        | localhost.localdomain | *0B6A2F2B175B57F40643A0377BE9274ACB964C44 |
| root        | 127.0.0.1             | *0B6A2F2B175B57F40643A0377BE9274ACB964C44 |
+-------------+-----------------------+-------------------------------------------+

サンプルデータベース削除。

[root@centos ~]# mysql -u root -p
mysql> show databases;
mysql> drop database test;
mysql> show databases;

wordpress 用のデータベース作成

[root@centos ~]# mysql -u root -p
mysql> create database wordpress;
mysql> grant all privileges on wordpress.* to wordpress@localhost identified by 'パスワード';

phpMyAdmin を使う

yum でインストールした phpMyadmin は以下にインストールされる。

/usr/share/phpMyAdmin

設定はデフォルトのままで使用可能。ただし、ドキュメントルート外にインストールされるので、そのままではアクセスできない。http://phpmyadmin.localhost.com/ でアクセスするため、bind のレコード追加と、Virtual hostの設定をしてみた。

Bind 設定

[root@localhost ~]# cat /var/named/chroot/var/named/localhost.com.db
$TTL    86400
@       IN      SOA     localhost.com.  root.localhost.com.(
                                      2004031901 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
        IN NS    localhost.com.
        IN MX 10 localhost.com.
@       IN A     192.168.0.250
phpmyadmin      IN A    192.168.0.250
*       IN A     192.168.0.250

Virtual host の設定

NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin root@localhost.com
    DocumentRoot /usr/share/phpMyAdmin/
    ServerName phpmyadmin.localhost.com
  <Directory "/usr/share/phpMyAdmin">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>
参考記事
CentOS 5.3 に php-5.2.9, mysql-5.1.35 をインストール
データベースサーバー構築(MySQL)

php.ini を書き変えずにエラーを表示させる

2009 年 8 月 28 日 金曜日

ini_set(); 関数を使うことで、一時的に php.ini の設定値を変更することができます。一時的にエラーを出力させたい時などに役立ちそう。

<?php
ini_set("display_errors", 1);
?>

php で JSON を使う php-json

2009 年 8 月 7 日 金曜日

CentOS5.3、apache2.2.3、php5.1.6 の環境。php5.2.0 からは標準で組み込まれているため必要ない。今回は、php 5.2 未満の環境で、JSON を使えるようにするための php-json モジュールのインストール方法。

まず、モジュールのインストール

[root@centos ~]# yum install php-devel
[root@centos ~]# pecl install json

設定ファイルの設置・編集

[root@centos ~]# vi /etc/php.d/json.ini
extension=json.so

apache を再起動

[root@centos ~]# service httpd restart

phpinfo();で json の項目があることを確認

image

phpでjsonを扱う 「php-jsonのインストール」

JSON on RHEL & PHP 5.1.6

PHPでJSONしたい

if の処理指定部分の { } を省略して : (コロン) を使う

2009 年 6 月 28 日 日曜日

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>

WordPress の default テーマの index.php を読んでいて、気になったので調べてみました。以下によると、if 文の処理を記述する部分の { } の代わりに : (コロン) を使用できるようです。

if (条件式)の後にコロン(:)を付けてその後に処理を記述します。

elseif や elseの後にもコロンです。

離れPHP島 : No12.もしも・・・だったら  —- if条件式

{ } を使う場合と : を使う場合、以下の:ような動作の違いがあるようです。

注意: 上の例のように波括弧を使用する限り、 elseif と else if はまったく同じだと考えてよいことに注意しましょう。コロンを使って if/elseif 条件を指定する場合は、 else if のように分割してはいけません。 分割すると、パースエラーとなってしまいます。

PHP 日本語ドキュメント : elseif/else if

Smarty の仕組み

2009 年 6 月 3 日 水曜日

非常に単純な Hello World の仕組みをまとめてみました。ブラウザからアクセスされる .php ファイルに Smarty が include(require) され、指定したテンプレートに変数の値が埋め込まれて表示される、一連の流れです。まとめずらく、若干見づらいですね。

image

Smarty のインストール

2009 年 5 月 31 日 日曜日

PHP の勉強を始めると、ひとつのファイルの中に html と php の記述がごっちゃり入って、わけがわからなくなってきます。もっとスマートにスマートにファイルを分けられないものかと思っていたら、あるんですね、テンプレートエンジンというものが。

調べると、楽天やサイボウズでも使われているようでおどろきです。

公式サイト・ドキュメントなど

ダウンロードは Smarty : Download から、日本語のドキュメントは Smarty – コンパイリング PHP テンプレートエンジン で確認することができるようです。

検証環境

環境はいつものとおり。ほんとにやってみて、動いたというレベルなので参考にはしないでください。

  • CentOS 5.3
  • Apache2.2
  • php5.1.6

Smarty のインストール

まずは、wget でダウンロードして解凍します。

[root@centos ~]# wget http://www.smarty.net/do_download.php?download_file=Smarty-2.6.25.tar.gz
[root@centos ~]# tar xvzf Smarty-2.6.25.tar.gz

解凍してできたフォルダをリネームします。

[root@centos ~]# mv Smarty-2.6.25 Smarty

Smarty 本体を格納するディレクトリを作成し、Smarty を移動します。

[root@centos ~]# mkdir /usr/local/lib/php
[root@centos ~]# mv Smarty /usr/local/lib/php/

Smarty 用のディレクトリの準備

Smarty で使用するテンプレートや、コンパイルされた PHP ファイルが格納されるディレクトリを作成します。これらのディレクトリはサーバ単位ではなく、コンテンツ単位で必要になるようです。*1

[root@centos ~]# mkdir -p /var/www/html/smarty
[root@centos ~]# cd /var/www/html/smarty
[root@centos ~]# mkdir templates templates_c configs cache

各フォルダやディレクトリに apache が書き込みや変更ができるようにパーミッションの変更を行います。

[root@centos ~]# chown -R apache:apache /var/www/html/smarty
[root@centos ~]# chmod 777 /var/www/html/smarty/templates_c
[root@centos ~]# chmod 777 /var/www/html/smarty/cache

php.ini を編集します。以下の編集を行うと、Smarty のライブラリファイルを呼び出す際に、フルパスではなく「require_once ‘Smarty.class.php’;」だけ書けばよいので簡潔になります。フルパスで指定してもいいけどね。php.ini を編集したら、httpd の再起動をしておきます。

[root@centos ~]# vi /etc/php.ini
(色々省略)
;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;

; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
include_path = ".:/usr/share/pear:/usr/local/lib/php/Smarty/libs"
[root@centos ~]# service httpd restart

動作確認

サンプルの php ファイルを用意します。

[root@centos ~]# vi /var/www/html/index.php
<?php
require ('Smarty.class.php');

$smarty = new smarty();
$smarty->template_dir = '/var/www/html/smarty/templates';
$smarty->compile_dir = '/var/www/html/smarty/templates_c';
$smarty->cache_dir = '/var/www/html/smarty/cache';
$smarty->config_dir = '/var/www/html/smarty/configs';

$smarty->assign('name', '太郎');
$smarty->display('index.tpl');
?>

サンプルのテンプレートを用意します。

[root@centos ~]# vi /var/www/html/smarty/templates/index.tpl
<html>
<head>
<title>Smarty</title>
</head>
<body>
Hello, {$name}!
</body>
</html>

ブラウザから、index.php にアクセスすると

ss000000

とりあえず動いた。けど、まだよくわからないな?


*1 @IT : Smartyでテンプレートエンジンの威力を知る 「Smartyを動作させるには、PHPスクリプトとテンプレート以外に、4つのディレクトリ(tempalates/templates_c/configs/cache)を必要とします。これらのディレクトリはサーバ単位ではなく、コンテンツ単位で用意することが推奨されています。」


参考にしたサイト

@IT : Smartyでテンプレートエンジンの威力を知る

PHP とセッションのまとめ

2009 年 5 月 27 日 水曜日

PHP を勉強中です。さっそくセッションでつまっています。最終的に、ログイン認証を行って、ユーザー固有のページを表示することです。今回は、セッション動作に関してまとめてみました。

セッションとは

以下の説明が一番直観的でわかりやすかったです。

セッションとは、ページ間で変数の内容を維持するための仕組み。
http://www.phppro.jp/school/phpschool/vol8/1

セッションの仕組み

ページ間で変数の内容を維持するためには、クライアントからのアクセスをサーバーが識別する必要があります。

PHP でのセッションの管理では、セッション ID をクッキーとしてクライアントに持たせ、2回目以降のアクセスの際、http ヘッダーに含まれるセッション ID で、サーバーに保存されたセッションと、そこに保存されたセッション変数を使える状態に復帰します。

サーバー側のセッションの保存場所

セッションの保存場所は、php.ini ファイルでの設定によって変わります。今回の環境(CenOS5.3, Apache2.2, PHP5.1.6)では以下の場所になっていました。

[root@localhost /]# cat /etc/php.ini
(すごく省略)
session.save_path = "/var/lib/php/session" 

セッションは、こんな感じで保存されます。

[root@localhost session]# ls -a
. .. sess_h30n26sijgt513rlagqvuvh065 

クライアント側のセッションの保存場所

クライアント側では、セッションはクッキーとして保存されます。また、クッキーの一般的な話として、有効期限をつけないと、クッキーはメモリ上に保存され、ブラウザの終了時に一緒に消去されるようです。有効期限を設定すると、ユーザープロファイル内の Cookie フォルダに保存されます。

やってみたこと

とにかくセッションの仕組みと実際の動作を知りたかったので、実際にやってみました。やってみたのは、PHP BOOK : セッション変数の書き込みと読み込み に書かれている、アクセス回数をカウントするスクリプトです。

IE にインストールした ieHTTPHeaders で HTTP ヘッダーを監視しつつ、サーバー側のセッションファイルの状態と中身を確認してみました。 その結果がしたの絵。

image

image 

やってみて、セッションID、セッション変数、クッキーの繋がりがわかってきました。次はこの仕組みを、どうやってログイン認証に利用していくかというところです。 


参考にしたサイト

バシャログ : 10日で覚えるPHPのキソ 第 10 回 セッション(SESSION)

→すごくわかりやすかったです。

PHP BOOK : セッション管理

マニュアル

PHPプロ!Saity先生のPHP基礎講座 : 第8回 セッションの仕組みを知ろう (その1)