Archive for category PHP

FreeBSDなphpのdate設定

なんか、cactiと言うログツールの設定中、バッチにてdate関連のエラーが。
どうやら設定していなかったと言う。。。

/usr/local/etc/php.ini
を編集。

date.timezone = Asia/Tokyo

以上。

プログラミングPHP 第2版

著者/訳者:Rasmus Lerdorf Kevin Tatroe Peter MacIntyre

出版社:オライリー・ジャパン( 2007-10-23 )

定価:

Amazon価格:¥ 4,000

大型本 ( 448 ページ )

ISBN-10 : 4873113423

ISBN-13 : 9784873113425


Post to Twitter

,

No Comments

Zend Frameworkと戯れる -じゃんけんゲームを作ってみる-

とりあえず、タイトル通りのことをやってみた。
Hello, World!じゃつまらないので、名前入れてもらってじゃんけんの手を選んでもらってCPUと対決しましょう、という感じ。
まず、ディレクトリ構成を考えることに。
サブドメイン(xxx.yuxx.netのxxxの部分)を切ってやっても良いんだけど、便利な設定してないから、UserDir(xxx.yuxx.net/~hogeの~hogeの部分)でやることに。
しかもドキュメントルート(このアプリの頭はやっぱつかいたくなかったからディレクトリを一段したにした。
URL的にはhttp://test.yuxx.net/~yuxx。

以下、treeコマンドより。(超便利w)

zend_test_prj
|-- public_html
|   `-- zend_test
|       |-- .htaccess
|       `-- index.php
`-- web_app
`-- zend_test
|-- controllers
|   `-- IndexController.php
|-- models
`-- views
`-- scripts
`-- index
|-- index.phtml
`-- pon.phtml

public_html以下が公開ディレクトリで、web_appがプログラムの場所。
まぁ、web_appはプログラムは権限さえあればどこ置いたって良いんだけどね。
名前も本来はapplicationsが推奨だし。。

で、まず公開領域にある.htaccessを置きましょう、と。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

一行目でURLを変換出来るようにmod_rewriteをOnに。
4行目で「js、ico、gif、jpg、png、css以外はindex.phpへ送る」と言う設定。
Flashとかをこのディレクトリ内に置いて使うんだったら適宜設定を。
2行目と3行目は別に必要ないんだけど、そのディレクトリ内にURLで叩かれたディレクトリ、あるいはファイルがあった場合はそっち優先で見に行くよ~と言うおまじない。

お次は同じ場所に設置するindex.php。

<?php
ini_set('display_errors', 'On');
require_once 'Zend/Controller/Front.php';
Zend_Controller_Front::run('../../web_app/zend_test/controllers');

2行目は一応エラー表示させたいので置いといた。
この程度のプロジェクトだからそうそうエラーは出ないだろうけど、それでも俺みたいな脳たりんには重要だったりする。
もちろん、リリース時には外すけど:-)
で、重要なのは3行目と4行目。
3行目は基本的にこういうもの、と言うことで。
4行目はこのファイル「index.php」の場所から見ての相対パスで、IndexController.phpがどこにあるか、と言うこと。
今回の場合、ドキュメントルートがそもそも1階層深かったり、アプリケーションルートもそれに合わせて深くしたりしているから、チト長い書き方になってしまったかね。。。

で、用意したテンプレはこんな感じ。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html, charset=UTF-8">
<title>じゃんけん</title>
</head>
<body>
<center>
<h1>じゃんけんゲーム</h1>
<?php if (!empty($this->errMsgs)) { ?>
<?php   foreach ($this->errMsgs as $currMsg) { ?>
<span style="color:#ff0000"><?php echo $currMsg ?></span><br />
<?php   } ?>
<?php } ?>
<form action="<?php echo $this->baseUrl(); ?>/index/pon" method="post">
お名前<?php echo $this->formText('pName', $this->escape($this->pName)) ?><br />
<?php echo $this->formRadio('pMethodKey', $this->pMethodKey, null, $this->methodNames) ?>
<br /><?php echo $this->formSubmit('', 'ポン!') ?>
</center>
</body>
</html>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html, charset=UTF-8">
<title>ポン!</title>
</head>
<body>
<center>
<h1>CPU &gt; <?php echo $this->cpuMethod ?></h1>
<?php echo $this->escape($this->pName)?>さんは<?php echo $this->pMethodName?>を出したのでの<?php echo $this->result?>です。<br />
<a href="<?php echo $this->baseUrl(); ?>">戻る</a>
</center>
</body>
</html>

では、web_app/zend_test以下のcontrollers/IndexController.phpを見ていこうか。
ちなみに、このコントローラーはデフォルトだと一番最初にアクセスされるコントローラクラスと言うことになる。

<?php
// load base components.
require_once 'Zend/Controller/Action.php';
class IndexController extends Zend_Controller_Action
{
private $_methodNames = array(
0 => 'グー',
1 => 'パー',
2 => 'チョキ'
);
private $_resultNames = array(
0 => 'あいこ',
1 => '負け',
2 => '勝ち'
);
// Index action
public function indexAction()
{
$this->view->assign('methodNames', $this->_methodNames);
}
public function ponAction()
{
$req = $this->getRequest();
$errMsgs = array();
$pName = $req->getPost('pName');
if ($pName == null || $pName == '') {
$errMsgs[] = '名前を入力して下さい。';
}
$pMethodKey = $req->getPost('pMethodKey');
if ($pMethodKey == null || $pMethodKey == '') {
$errMsgs[] = 'あなたの手を選択して下さい。';
$pMethodKey = null;
} else {
$errFlg = true;
foreach ($this->_methodNames as  $key => $methodName) {
if ($pMethodKey == $key) {
$errFlg = false;
break;
}
}
if ($errFlg == true) {
$errMsgs[] = 'もう一度選択して下さい。';
}
}
// index、ponの両方で必要なデータのアサイン
$this->view->assign('pName', $pName);
if (!empty($errMsgs)) {
// indexで必要なデータのアサイン
$this->view->assign('errMsgs', $errMsgs);
$this->view->assign('pMethodKey', $pMethodKey);
$this->view->assign('methodNames', $this->_methodNames);
// indexをレンダー
//            $this->render('index/index'); // なぜかこれだと動作しない。
$this->getHelper('viewRenderer')->setNoController()->setScriptAction('index/index');
// 処理修了
return;
}
// CPUのじゃんけんの手をランダムで出す
srand(time());
$cpuMethodKey = rand() % 3;
// じゃんけんの結果を計算
$result = ($cpuMethodKey - $pMethodKey + 3) % 3;
// ponで必要なデータのアサイン
$this->view->assign('pMethodName', $methodName);
$this->view->assign('cpuMethod', $this->_methodNames[$cpuMethodKey]);
$this->view->assign('result', $this->_resultNames[$result]);
}
}

今回はMVC(モデル・ビュー・コントローラー)デザインの内、DBを使ってないからModelは用意せず、コントローラー内でバリデート(エラーチェック)を行った。
Postされた値は$this->getRequest()で取ってくることが出来る。
また、ビューでデータを使うためには他のフレームワーク同様アサイン(追加)しないといけない。
アサイン方法は$this->view->assign(‘ビューで使うための変数名’, データ)という感じ。
ビューファイルで使うときは先ほどのビューに書いてあるとおり、$this->ビューで使うための変数名 と言う風に取ってこれる。
とまぁ、こんな感じ。
じゃんけんのルーチンは自分で検証してみてくだされ。

出来上がったクソアプリは下記の通り。
http://test.yuxx.net/~yuxx/zend_test

一応まとまったソースは下記。
zend_test_prj.tar.bz2
zend_test_prj.zip
お好きな方をどうぞ。

お粗末。

アマゾンのサーバでエラーが起こっているかもしれません。
一度ページを再読み込みしてみてください。

Post to Twitter

, ,

No Comments

Zend Frameworkのインストール

ちと所用でZend Frameworkを使わなくてはいけないっぽいので当サーバへインスコすることに。
FreeBSDなのでportsからサクッと入れてしまいまひょ。

% portinstall www/zend-framework

or

% cd /usr/ports/www/zend-framework
% make install clean

とか。
コンパイル中に2回ほどオプション選択させられるけど、自分の使っているDBとかと相談して決めてみてはいかがだろうか。

で、最終的に

Now you need to adjust PHP's include_path to contain
`/usr/local/share/ZendFramework/library'
For example, insert:
include_path = ".:/usr/local/share/ZendFramework/library"
into `/usr/local/etc/php.ini'.
Zend Framework includes the Zend_Tool class and wrapper script
for automating many common framework-related tasks. To use the
zf wrapper script, set the following environment variable:
Bourne shell:
export ZEND_TOOL_INCLUDE_PATH_PREPEND=\
/usr/local/share/ZendFramework/library
C-shell:
setenv ZEND_TOOL_INCLUDE_PATH_PREPEND \
/usr/local/share/ZendFramework/library
Documentation for the Zend_Tool class is found at:
http://framework.zend.com/manual/en/zend.tool.framework.html
For more general information about the Zend Framework, please
visit: http://framework.zend.com/

こんなメッセージが出る。
Zend_Tool classの事はよ~知らんから放置。
php.iniにあるinclude_pathを指示通り書き直す。

% vim /usr/local/etc/php.ini
(略)
include_path = ".:/usr/local/share/ZendFramework/library"

そんでもって、apache再起動。

% apachectl restart

せっかく140MB強までダイエットに成功したhttpdが一気に190MB手前にまでふくれあがってしまった。。。
サーバ管理技術を身につけたい。。
サーバを強化および低消費電力化したい。。。

で、お決まりのテストコード。

<?php
require 'Zend/Version.php';
echo Zend_Version::VERSION;

Zend Frameworkコード規約によりPHPのみのファイルでは終了タグ?>は書かない。
結果は下記ページの通り。
http://yuxx.net/~yuxx/zend_ver.php

とりあえずインストール完了なり:-)

アマゾンのサーバでエラーが起こっているかもしれません。
一度ページを再読み込みしてみてください。

Post to Twitter

, , , ,

No Comments

PHPってなんでしょ?

職業柄、PHPを使っているスクリプターなんですよ、自分は。俗に言うところの、PHPerってやつです(ところで、ペッパーって読むの?)。で、PerlとかRubyは触ったことがないので何とも言えないのですが、こういったWeb系の言語は、当然Webを扱うにはとても楽なわけです。
と言うわけで、今回はへたれPHPerながら、PHPってどんなモンか、と言うことを書いてみたいと思います。
Read the rest of this entry »

Post to Twitter

,

6 Comments