あけましておめでとうございます。
今年もよろしくお願いいたします。
ということでグリーティングページを作ってみました。
http://www.minfish.jp/happynewyear/2006/
(音が出るので注意)
« 2005年12月 | メイン | 2006年02月 »
今年もよろしくお願いいたします。
ということでグリーティングページを作ってみました。
http://www.minfish.jp/happynewyear/2006/
(音が出るので注意)
自分用メモ。
環境はOSX10.4+php5+PEARです。
■Excelファイルを出力する場合
Spreadsheet_Excel_Writer(PEAR版)を使用。PEAR版はOLEというパッケージ依存。PHP_Class版もあるらしいけど、ファイルの容量に7MBの制限あるらしい。
・インストール
php5をインストールしていると、新しく別のPEARが勝手にインストールされてしまう。なのでphp.ini内のinclude_pathを変えるか、新しい方のPEARを使用する。(ここではまりました。)
※デフォルトのPEARのパス /usr/bin/pear ※php5のPEARのパス /usr/local/php5/bin/pear
先にOLEをインストール。
# sudo pear install OLE
次に、Spreadsheet_Excel_Writerをインストール。
# sudo pear install Spreadsheet_Excel_Writer
# pear list
としてインストールされているのを確認。
Archive_Tar 1.1 stable Console_Getopt 1.2 stable DB 1.6.2 stable〜 中略 〜
OLE 0.5 beta
Spreadsheet_Excel_Writer 0.9.0 beta
どちらもBeta版なので注意。
・サンプル
ここに載っていたのを参考に。
『ふたつのしっぽ』
ただし、文字コードを変換する際にmb_convert_encodingを使用するとき3つ目の引数に"auto"を指定する必要があった。
<?php //PEARクラスのインクルード include_once 'Spreadsheet/Excel/Writer.php'; //ワークブックの生成 $workbook = new Spreadsheet_Excel_Writer(); //ワークシートの生成 $worksheet =& $workbook->addWorksheet(mb_convert_encoding("シート01","SJIS","auto")); //列幅の設定 $worksheet->setColumn(0,0,5); //1列目幅5 $worksheet->setColumn(1,1,10); //2列目幅10 $worksheet->setColumn(2,5,2); //3-6列目幅2 //書式の設定 $format1 =& $workbook->addFormat(); $format1->setColor("red"); $format1->setBold(1); $format1->setItalic(1); $format1->setBorder(1); $format1->setBorderColor("blue"); //値を定義 $worksheet->write(0,0,"001"); $worksheet->writeString(0,1,mb_convert_encoding("ほげほげ","SJIS","auto"),$format1); $worksheet->writeNumber(1,0,"001",$format1); //式を定義 $worksheet->writeFormula(2,0,"=SUM(A1:A2)"); //HTTPヘッダー出力 $workbook->send("sample.xls"); //excel出力 $workbook->close(); exit; ?>
ファイルを出力する際はSpreadsheet_Excel_Writerをnewするときに引数にファイル名を渡すとExcelファイルが生成される。
$workbook = new Spreadsheet_Excel_Writer("sample2.xls");
その場合、sendメソッドは不要。echo文を含めるとファイルが壊れるので注意。print文はokだった。
■Excelファイルから入力する場合
Spreadsheet_Excel_Reader(SourceForge)を使用。ファイルをダウンロードしてきてphp.iniに記載されているinclude_path内にコピー。
が、Mac版のExcelファイルだとブラウザがハングアップしてしまった。
headerのフォーマットがwindows版と違うためで、"Root Entry"となっている所がMac版だと"R"になってためらしい。
Spreadsheet_Excel_Readerを解凍して/Excel/oleread.incの、204行目付近の
if ($name == "Root Entry") {
を
if ($name == "Root Entry" || $name == "R"){
とする。(参考)
サンプルソースはこんな感じ。
<?php require_once 'Excel/reader.php'; $data = new Spreadsheet_Excel_Reader(); // エンコーディングの設定(shift-jis) // mb_convert_encodingを使用iconvも使用可 $data->setUTFEncoder('mb'); $data->setOutputEncoding('sjis'); $data->read('sample.xls'); error_reporting(E_ALL ^ E_NOTICE); for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) { for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) { echo "¥"".$data->sheets[0]['cells'][$i][$j]."¥"¥t"; } echo "<br />¥n"; } ?>
これでも、大量の日本語テキストがあると、あんまし上手くいかなくて、excelのシートの右下のセルにダミーで数字を入れたらなぜか動いた。
セルのフォーマット指定の読み込みとかも挙動がおかしい。
やはり、素直にCSVに変換してテキストファイルとして読み込むのが吉みたい。
なるほど。最近とてもリアルに感じてます。
前回、Ruby on Railsで敗退&放棄してたのですが、今度はsymfonyにチャレンジしてみました。
関連エントリー:Ruby on Rails を試してみた。
環境は自宅のG5です。
symfonyはPHP5で言う所のRailsみたいなwebアプリケーション・フレームワークです。プロジェクトサイトには以下のような特徴が列挙されていました。
* シンプルテンプレートとヘルパー
* キャッシュ管理
* スマートURL
* スカッフォルディング
* 他言語対応とI18Nサポート
* オブジェクトモデルとMVC
* Ajaxサポート
* 企業向けも大丈夫
ほほう。
PHPのフレームワークは他にも
* Mojavi
* Agavi
* Cake
* Symfony
* maple
* Seagull
などがあって、実はそのうち上の4つをすでに試してます。以下雑感。
Mojaviはとりあえずインストール、チュートリアルアプリ制作までは上手く言って、Pearライブラリとかsmartyとかを組み込めたのですが、手作業が多くてなんか嫌で×。(すみません、あくまで好みです。)
Mojaviの派生であるAgaviはMojaviにヘルパーがくっついたみたいので、Smartyもサポートしてると書いてあり、かなり良さげ。と思ったのですが、インストール、チュートリアルアプリ制作とすすめて、smartyの組み込みでつまずいてダメ。もうちょっとねばれば動いたかもしれないのですが、とりあえず保留。
Cakeはチュートリアルの途中で面倒になって放棄。へたれです。というか、このてのフレームワークはやっぱり独特のドライブ感というか、ヘルパーとかの魔法っぽさ(あれ?もうできちゃったの?みたいなの)が肝なのではないでしょうか。チュートリアルのみたく空のクラスをいっぱい書いてというのは、どうかなあと。
で、最後のSymfonyです。
結論から言うと、僕にもフレームワークでアプリ作れたよ。10分どころかその30倍くらいかかったけど。(号泣
OSX独特と思われるトラップもいくつかあったのでそれもあわせて、次のエントリーでレポートしたいとおもいます。
間があいてしまいましたが、インストール編です。
以下の環境でインストールをしてみました。
OSX10.4.4
PHP 5.0.4(アップデートせなば。)
PEAR
SymfonyはPEARライブラリとして提供されているPHPのフレームワークです。インストールするには、PEAR 1.4.6が必要なので、既にインストールしている場合は
# pear list
でバージョンを確認し必要であれはアップグレードします。
# sudo pear upgrade --alldeps PEAR
次に、symfonyはphingというライブラリに依存関係にあるためインストールします。
# pear install http://phing.info/pear/phing-current.tgz
いよいよsymfonyインストールのインストールです。
まず、ライブラリが置いてあるサイトをpearに登録します。
# pear channel-discover pear.symfony-project.com
で、インストール。
# sudo pear install symfony/symfony
これで完了といきたい所なのですが、OSXでPHP5をインストーラーからインストールした場合にはトラップがあります。
ためしにコマンドラインからsymfonyでプロジェクトをイニシャライズしてみます。
# mkdir testProject # cd testProject/ # symfony symfony init-project testProject
で、以下のようなエラーが出ます。
Parse error: parse error, expecting `'('' in /usr/local/php5/lib/php/symfony.php on line 19
これは、コマンドラインのphpのバージョンが5で動いてないからだそうです。php5をOSXにインストーラーからインストールすると旧バージョンと平行してインストールされるためのようです。
# php -v PHP 4.3.11 (cli) (built: May 31 2005 23:41:02) Copyright (c) 1997-2004 The PHP Group Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
こんな感じ。
参考:リンク
なので、/usr/bin/以下にphp5をコピーするか、ハードリンクを張る必要があります。
# sudo mv /usr/bin/php /usr/bin/php4bkup # sudo cp /usr/local/php5/bin/php /usr/bin/php
と、とりあえず。
# php -v PHP 5.0.4 (cli) (built: Apr 4 2005 17:32:28) Copyright (c) 1997-2004 The PHP Group Zend Engine v2.0.4-dev, Copyright (c) 1998-2004 Zend Technologies Oppenheim:~/Sites/phptest/sfbookmark tSato$
も一度。
# symfony init-project testProject
で、ドドドドッとファイルとフォルダが生成されます。
インストールはこんな感じです。
つづきます。(たぶん。。。)
ずいぶん間があいてしまいました。
そのあいだ、世の中いろいろと騒々しい感じだったですが、ひとりこもってSymfonyであれこれ作ってました。
ここで書いておこうと思ったTipsとかもいろいろあるにはあったのですけど。
調べているうちに、基本的な使い方等は他にもblogで書かれている方が結構いる事が分かったのですが、書く事で自分が覚えるという事と、自分用メモのため続けます。
手始めに、ブックマークアプリの作り方から。
まず、ウェブ共有のrootディレクトリにフォルダ作成。
# mkdir bookmark # cd bookmark
で、プロジェクトのイニシャライズ
# symfony init-project bookmark
で、ドドドドッとファイルとフォルダが生成されます。
# symfony init-app myapp
という感じにアプリケーション部分のファイルとフォルダを用意。
ブラウザで以下のURLにアクセスすると「Congratulations!」の文字が!
http://localhost/~myuser/bookmark/web/
apachのmod_rewriteモジュールを使用するので該当のコメントを外します。
OSX10.4だと、httpd.confはここにあります。
# vi /private/etc/httpd/httpd.confAddModule mod_rewrite.c
LoadModule rewrite_module modules/mod_rewrite.so
↑コメントを外す。
で、各ユーザー向けの.confを修正
# sudo vi /private/etc/httpd/users/myuser.conf
でファイルを開いて以下の設定を追加。
<VirtualHost *:80> DocumentRoot "/Users/myuser/Sites/bookmark/web" DirectoryIndex index.phpAlias /sfbookmark /Users/myuser/Sites/bookmark/web/app
<Directory "/Users/myuser/Sites/bookmark/web">
AllowOverride All
</Directory>
</VirtualHost>
apachを再起動すると以下のURLでデフォルト画面にアクセスできるようになります。
http://localhost/
参考:サブディレクトリにインストールするやり方(英語)
次に、使用するデータベースのスキーマを作ります。MySQLを使用。
テンプレートをコピーし、
# cp config/schema.xml.sample config/schema.xml
以下のXMLを張り付け。
<?xml version="1.0" encoding="UTF-8"?> <database name="symfony" defaultIdMethod="native"> <table name="bookmark_items" phpName="Items"> <column name="id" type="integer" required="true" primaryKey="true" autoincrement="true" /> <column name="title" type="varchar" size="255" /> <column name="url" type="varchar" size="255" /> </table> </database>
で、モデルの作成。
# symfony build-model
sqlファイルを作成。
# symfony build-sql
ディレクトリを移動すると
# cd data/sql # lsschema.sql sqldb.map
といった感じでsqlファイルが作成されている。
DBを用意し、
# mysql admin -u youruser -p create bookmark # mysql -u youruser -p bookmark < data/sql/schema.sql
と言った感じにテーブルを作成。
次にorm.ymlファイルを修正
# vi app/config/orm.yml
all: adapter: mysql host: localhost database: bookmark username: youruser password: yourpass
次にアプリケーションのscaffoldingを作ります。
これは、データベースのやり取り・CRUD(Create Read Update Delete)のテンプレートを自動的に作成してくれる機能です。この機能のおかげでSQL文をやこまかい処理を意識する事無くデータベースとやり取りするページのベースを作成してくれます。
まずはこんな感じに。
# symfony generate-propelcrud app items items
http://localhost/items
にアクセスすると、一覧が取得でき、編集できるページができています!
全体の見栄えをいじるのは
app/templates/layout.php
今作ったアクションの見栄えをいじるのは
app/modules/items/templates/以下
またアクションをいじってモジュールの動作を変える事もできます。
app/modules/items/actions/actions.class.php
注意するべきはそれぞれのファイルに命名規約があり
モジュールのクラス名は
モジュール名Actions
となり、アクションは
actions/actions.class.php
内のメソッド名に
executeアクション名(最初の文字は大文字)
と言った具合に書いていきます。なので、たとえば、itemsというモジュールにlistというアクションを追加するなら
class itemsActions extends sfActions { public function executeList() { // ここにコードを書いていく } }
の用な形式になります。
また、テンプレートはtemplatesフォルダ以下に
アクション名Success.php
のかたちでファイルを作成していきます。
空のメソッドとHTMLだけのテンプレートを用意すると、何の処理も加えずテンプレートに記述したまま表示します。
と言った具合で、単純ではありますが、初めてのウェブアプリができました!
簡単に試したい人はsandboxも最近公開されてるみたいです。
(いろいろバグがあるみたいですけど。。。)
symfonyは個人的にかなり面白いと思ったので、なにか技を発見したら随時公開していこうかと思います。
いままではmiをメインに使ってたのですけど、まどろっこしくなってきて、最近viを使う事が多くなってきました。Emacsも挑戦したのだけど、OSXのデフォルトで入っているのは動きがちょっともっさりしてて、操作も難しすぎるので即諦め。
というわけで、viをちょっとカスタマイズしてみたくなりました。
OSXのviは正確にはvimのことらしく、viの高機能版という位置づけらしいです。viのカスタマイズはユーザディレクトリの.vimrcというテキストファイルを編集して行います。
ぼくが設定した.vimrcはこんな感じ。
:set enc=utf-8 :set fenc=utf-8 :set fencs=sjis,iso-2002,euc-jp :map z $ set autoindent set showcmd set ruler set incsearch set number syntax enable autocmd FileType php :set dictionary=/Users/myUser/.vim/dict/php.dict :colorscheme desert :set softtabstop=4 :set showmatch :set matchtime=15
.vimrcから読み込むファイルはユーザーディレクトリの下に.vimというディレクトリを切ってそこに入れるそうです。
syntax enableにして色付けを行い、入力補完で、phpの辞書を入れておきました。
参考:Vim で PHP 関数の辞書を作成する方法についてのメモ
インサートモードで入力したいphpのスクリプトを数文字入れて「Ctrl-x, Ctrl-k」を押すと候補が出てきます。
カラースキームも変更できるみたいで、その場合は.vim/colors以下にファイルを保存して、
:colorscheme スキーム名
で有効になるらしい。とりあえず、desertというカラースキームが見やすそうなので採用。
参考:カラースキーム
という事で、viの画面はこんな感じになりました。
脳内補完がすすめばコードがはやく打てそうな感じ。
その他参考:
・Vim日本語ドキュメント
・viのコマンドモード早見表