fc2ブログ

PHPの言語リファレンスを読んでいる

CakePHPマニュアルを一通り読み終わった。
マニュアルの後半は、「こんな機能があるんだー。必要になったときにちゃんと読もう」と流し読みしただけだが。

CakePHPで何か作り始めても良かったのだが、PHPの言語リファレンスを読むことにした。
PHP入門サイトを読んだ程度だったので、しっかり理解しようかなと。

今日は言語リファレンスの「演算子」の章まで読んだ。
便利そうな機能だけど、イマイチ使い道が想定できないのがたくさんある。可変変数とか。
それなりにプログラミング経験を積んだあとに見返せば、得るものがあるのだろう。
使えそうな機能は個人用チートシートに書き留めるようにしている。

今のところ言語リファレンスをスムーズに読めるので、このまま続けてみよう。
スポンサーサイト



nginx for Windows で CakePHP + SQLite を動かす

軽量WEBサーバーの nginx(Windows版)で PHPフレームワーク CakePHP を動かして SQLite のデータベースにアクセスできたので、環境設定手順をブログにまとめる。

それぞれのバージョンは以下のとおり。
OS: WindowsXP SP3
nginx: nginx/Windows-0.7.67
PHP: PHP 5.2.14 zip package
CakePHP: CakePHP 1.3.3
SQLite: PHP に標準バンドルされていた SQLite 2.8.17

<注意>
nginx を起動したり、nginx -s reload を実行して定義ファイルを再読込した際に、ブラウザに何も表示されなくなる場合がある。
(Google Chrome では「エラー: このリンクは無効です。」、IEでは「Web ページがみつかりません」と表示される。)
nginx -t で設定ファイルのチェックをしても問題無く、C:\nginx\logs\error.log にエラーメッセージが出力されていない場合、
対策方法は nginx for Windows で nginx.conf の変更内容をちゃんと反映させる方法 を参照。

1. nginxとPHPのインストール、起動/終了ファイル作成
nginx for Windows でPHPを動かす を参照。
ただし、nginx.conf はまだ修正しないので参照先ページの記述は無視する。
参照先ページには「phpファイルは C:\nginx\html 以下に置く」とあるが、nginx.conf の設定内容が違うのでそれも無視する。

2. SQLite にアクセスできるように PHP を設定する
PHPを C:\nginx\php にインストールしたとする。
C:\nginx\php\php.ini-recommended を同フォルダ内にコピーし、ファイル名を php.ini にする。
php.ini の内容を以下のように修正する。
・540行目あたりの extension_dir = "./" を、 extension_dir = "C:\nginx\php\ext" に修正
・700行目あたりの
  extension=php_pdo.dll
  extension=php_pdo_sqlite.dll
  extension=php_sqlite.dll
それぞれの行の先頭セミコロン ; をはずす

3. CakePHP の設定
cakephp/downloadsから CakePHP 1.3.3 をダウンロード。
zipを解凍し、必要であればフォルダ名を変更し、適当な場所にフォルダを移動。
ここでは、フォルダを cakephp に変更して C:\ 直下に移動したとする。

C:\cakephp\app\config\database.php.default を同フォルダ内にコピーし、ファイル名を database.php にする。
database.php の class DATABASE_CONFIG を以下のように修正する。
class DATABASE_CONFIG {
  var $default = array(
    'driver' => 'sqlite',
    'persistent' => false,
    'host' => 'localhost',
    'login' => '',
    'password' => '',
    'database' => 'C:\nginx\php\db\cakedb.sqlite',
    'prefix' => '',
    'encoding' => 'UTF-8'
  );
}
今回は C:\nginx\php\ に db フォルダを作成し、データベース名を cakedb としたが、
データベース格納フォルダおよびデータベース名に特に意味は無いので、別のフォルダに別のファイル名でもよい。
なお、'database' => 'cakedb.sqlite', とすると、C:\cakephp\app\webroot に cakedb.sqlite が作成される。

encoding は CakePHP に合わせる。CakePHP の Html->charset() はデフォルトでUTF-8。
SQLite のデータベースファイルは CakePHP が作成するので、あらかじめ作成する必要は無い。

4. nginx の定義ファイル修正
C:\nginx\conf\nginx.conf の server ブロックを以下のように修正。
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   C:/cakephp/app/webroot;
            index  index.php index.html index.htm;
            if (-f $request_filename) {
                break;
            }
            if (-d $request_filename) {
                break;
            }
            rewrite ^(.+)$ /index.php?q=$1 last;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  C:/cakephp/app/webroot$fastcgi_script_name;
            include        fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
            deny  all;
        }
    }
location ブロック 以外はデフォルトのままなので、server_name , error_page など必要であれば修正すること。
nginx.conf の構文などは NginxHttpCoreModule(英文) を参照。
locationの説明を読めば、上記はだいたい理解できると思う。
fastcgi関連の設定は、NginxHttpFcgiModule(英文) を読めば理解できると思う。

5. 動作確認
・nginx の設定確認
C:\cakephp\app\webroot 直下に適当なhtmlファイルを置いて、ブラウザで表示できるか確認。
ファイル名を test.html とすると、URLは http://localhost/test.html となる。

・PHP の確認
C:\cakephp\app\webroot 直下に <?php phpinfo();?> とだけ記述したファイルを 置いて、ブラウザで表示する。
ファイル名を phpinfo.php とすると、URLは http://localhost/phpinfo.php となる。
PDO、pdo_sqlite、SQLite が表示されているか確認する。(SQLiteはちょっと離れている)
phpinfo01

・CakePHP の確認
ブラウザから http://localhost/ にアクセスし、背景が赤のエラーメッセージが出ていないことを確認。
Cake is able to connect to the database. と表示されることを確認。
CakePHP画面の一部

以上。これで問題なくCakePHPが動作すると思う。
なお、PHPに標準バンドルされているSQLiteにはコマンドラインプログラムが無いので、CREATE TABLE などはSQLを実行するPHPプログラムを作成して行う必要がある。

PHPフレームワークをちょっと調べた

一週間近くプログラミングしていないので、久しぶりにPHPで何か作ろうと思った。
だけど作るネタが思い浮かばない。
せっかくだからPHP用のフレームワークでも触ってみるかとちょっと調べた。

「PHP フレームワーク」で検索して一番上に出てきたページ、 PHPフレームワーク特集 を読んで、
「CakePHPは小規模サイト向け」というだけの理由でCakePHPを調べてみることにした。

CakePHPのマニュアルを 3.4 環境設定 まで読んだ感想 → URLが長くなりそう
@PAGESだとmod_rewriteを使えないから、更に長くなるな。

自分が作るPHPプログラムなんてせいぜい数百行なんだから、今のところフレームワーク使わなくてもいいよなぁ。と、かなり逃げ腰になってる。
マニュアルをざっと見て、提供する機能だけでも把握しておいた方がいいかな。

PHPでとりあえず動くものを作ってみた

今日やったことを簡単にまとめる
・テキストエリアに入力した内容をPOSTするFORMを表示
・$_POSTされたデータをファイルに追記
・ファイルを読み込んで表示
これだけなのだが、いろいろ調べながらやったら3時間近くかかった。
調べたことは、
・HTMLタグなどをエスケープするにはどうするか?
→htmlspecialchars() を使う。
・htmlspecialchars() を使わなくても、シングルクォートやダブルクォートがエスケープされてる。何で?
→GETやPOSTで送信された値は、php.iniの設定で自動でエスケープされる。
  戻すにはstripslashes()を使う。
・ファイルのパスがわからない
→getcwd() で調べる。
などなど
でもこうして見返してみると、何でそんなに時間がかかったのかわからない。
書いたソースコードを見返してもわからない。

PHPで何か作ろうと思ったが

簡単なPHPプログラムを作って動かしてみようと思ったが、ローカル環境ではなく公開されたWebページなのでちょっと気を使う。
.htaccessは一部しかサポートされていないみたいだ。ベーシック認証とかはよくわからない。
とりあえず、getenv("REMOTE_ADDR") で送信元IPアドレスをチェックして、自分のIPアドレスにだけ表示するようにした。

WebプログラムはASPをちょっとやったぐらいだから、わからないことだらけだ。CGIもやったことが無い。
テキストエリアで入力した内容をサーバ側のファイルに書き込む処理を作ろうかと思ったが、
画面遷移がよくわからない。
<form>のactionに指定したページに遷移するみたいだが、
入力内容不正の場合は遷移せずに元ページでメッセージを表示する場合、どう実装すればいいかわからない。

ちょっと調べたところ、
・header("Location: http://xxx.jp/"); でリダイレクト
・同一PHPファイル内で表示内容を制御
ぐらいしか見つからなかった。リダイレクトはサーバに少々負荷がかかるみたいだ。

今日は調べ物ばかりでほとんどコーディングしなかった。明日は動くものを作りたい。

PHPの勉強開始

このブログを始めてちょうど一ヶ月。
やっとPHPの勉強に手を付けることができた。
今日は入門サイトを見て、構文などを自分用チートシートにまとめただけ。

自分が使ってるヘボノートPCにWebサーバを立てる気にならないので、
PHPの実行環境は@PAGESにしようと思う。
Mysqlも使えるみたいだし。
とりあえず@PAGESにアカウントを作成して、FTPで接続できることを確認した。
FFFTP使うの久しぶりだ。

早速明日PHPで何か作ってみようと思うが、何も思い浮かばない。
無難に簡易掲示板かなぁ。
プロフィール

himax64

Author: 南西
30代後半の無職です。
就活もせずダラダラ生きてます。
作ったもの

最新記事
人気記事
検索フォーム
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
RSSリンクの表示
QRコード
QRコード
カウンター