プログラム

PEAR::HTTP_Request

このパッケージを用いると以下の処理がPHPスクリプトから行える。

このパッケージは、HTTP リクエストを実行するための簡単な方法を提供します。 GET/POST/HEAD/TRACE/PUT/DELETE、Basic認証、プロキシ、プロキシ認証、SSL、 ファイルアップロードなどをサポートします。

PEARのHTTP_Requestを利用してWeb上のアップロードスクリプトに対してファイルのアップロードをする処理は以下の様にかける。

  • 下のプログラムでは/Users/sample/foo.doc というファイルを foo_upload.doc という名前で送信


<?php
require_once "HTTP/Request.php";

$http_req =& new HTTP_Request("http://(アップロードする先のURL)");
$result = $http_req->addFile("foo_upload.doc", "/Users/sample/foo.doc");

if (PEAR::isError($result)) {
print $result->getMessage();
}
else{
$response = $http_req->sendRequest();
if (!PEAR::isError($response)) {
print $http_req->getResponseBody();
}
}
?>


なるほど、これを使えばかなりごにょごにょできそうな気がしてきた。

PHPとMySQLの接続エラー@MacOS

ちゃんとAppleのサイトに書いてあった。最初に見つけなきゃいけません。

MySQLPHP を同じ Mac OS X Server 10.4 で実行しているときに、PHPMySQL に接続できなくなることがあります。PHP は、同じホスト上の MySQL サーバと通信する場合に通信用のソケットファイルを使用し、これを「/tmp/mysql.sock」で探します。Mac OS X Server 10.4 では、MySQL はこのソケットファイルを「/var/mysql/mysql.sock」に作成します。

ということで、修正後、無事解決。
PHP.iniでMySQL接続時に使うソケットファイルの位置を教えてあげればよい。

ちょっとしたこと

PHPでコードを組んでいて、

foo.php

<ファイルここまで>

app/action/ の中のとあるファイル

<ファイルここまで>

そうすると以下の様なwarningが表示される。

##########[1640](WARNING): global.session_start(\class\Ethna_Session.php:86): [PHP] E_WARNING: session_start(): Cannot send session cache limiter - headers already sent (output started at ###..php:275) in C:\php-Win32\PEAR\pear\Ethna\class\Ethna_Session.php on line 86

ヘッダを既に送っただの。とある。
なぜ出力の文を書いていないのに、出力したのか悩むこと数十分。
requireしている対象のプログラムの末端の行に空白の改行が入っていることに気づく。

消してみた。

問題なく通る様になった...。なるほど、改行コードが出力されたことになってしまう?のかな。ということで解決。

MacOS上のApache等のメモ。
Vineなどの様にすぐ位置が頭に浮かばないので。。。
てか、記憶力が悪くなっただけ、っていう気もしなくはないけど。

  • /Library/WebServer/Documents
    • wwwサーバのDocumentRoot
  • /private/etc/httpd/httpd.conf

そして、14時現在。
MacOS上で動かしているMySQLPEAR::DBで接続できずエラーになる。

project[628](WARNING): global.mysql_connect(:): [PHP] E_WARNING: mysql_connect(): Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (2) in /usr/lib/php/DB/mysql.php on line 237

ふと気づけば、ご飯を食べていないのでここで一旦終了。
何故、ここで引っかかってしまうかなぁ。非常に悔しい。

MySQLのVARCHAR型とCHAR型

ここより。
基礎が抜けているのでこの違いが明確に理解していなかった。
こういうところが周りに人がいない故の弊害。
簡単に解釈すると、

  • CHAR型で宣言すると、とにかくテーブルの作成の際に行った宣言の通りの長さが取られる。
  • VARCHAR型だと、任意長になるので、レコードに登録している文字列長に左右される。

MacOSX10.4.6 でのphp.iniの位置

全くの初期状態では、

/private/etc/php.ini.default

があるので、これをコピーして編集すればいいんですかね。

PHPフレームワーク Ethna

http://ethna.jp/ を参考にしながらEthnaを入れてみる。
何故突如Ethnaか?以下理由。

  1. 名前がかっこいい
  2. PHPフレームワーク=似たようなことを繰り返し書きたくない

前者の理由はともかく*1、後者の理由は以前、突如仕事として行わなければならなくなった際の苦労もあるので使いたかった。

ということで…。

      • -

公式サイトが充実しているのでメモを残す価値も無い気もするが、一応記録として残しておく。

Windowsマシンの方で使っているのがPHP4なので、以下のPEARコマンドで

$ ./pear.bat install http://ethna.jp/pear/Ethna-2.1.2.tgz*2
downloading Ethna-2.1.2.tgz ...
Starting to download Ethna-2.1.2.tgz (104,805 bytes)
........................done: 104,805 bytes
install ok: Ethna 2.1.2

あっさり入る。

  • 依存ライブラリの確認

Ethnaでは下記ライブラリが必要。

私のPCには上記ライブラリは格納済みなので割愛。

  • Ethnaコマンドの設定

上記の入れ方でインストールを行うとPEARフォルダの中にEthnaのバッチファイルが展開される。

  • rwx------+ 1 ******* なし 435 Jun 17 10:39 ethna
  • rwx------+ 1 ******* なし 978 Jun 17 10:39 ethna.bat

アーカイブから入れたときは、展開したアーカイブ内のbinディレクトリの中のファイルを抽出するとのこと。
PEARから入れた場合はいらないのかな。多分。

  • Ethnaコマンドを実行してみる

とりあえず実行。
PEARコマンドがあるディレクトリにはパスが通してあるので、Ethnaコマンドにもパスが入ることになる。

$ ethna

Warning: main(Smarty/Smarty.class.php): failed to open stream: No such file or d
irectory in c:\php\PEAR\pear\Ethna\Ethna.php on line 16
(以下略)

Smartyが見つからないようなので、php.iniを編集。include_pathを書き直す。
そういえば、別のプロジェクトの際の妙な設定が残っていた。Smartyは私の場合、C:\php\lib\smarty に置いているので*3

"PHP.ini"ファイル内
include_path = ".;c:\php\PEAR\pear;C:\php\lib;

これでもう一度実行

$ ./ethna
usage: ethna [option] [command] [args...]

available options are as follows:

-v, --version show version and exit

available commands are as follows:

add-action -> add new action to project:
add-action [action] ([project-base-dir])
(以下省略)

  • 実際に作ってみる

Ethnaのチュートリアルにならってサンプル作成。
自身のホームにtmpディレクトリを作成する。

$ mkdir tmp
$ ls -l
total 0
drwxr-xr-x+ 3 ****** なし 0 Jun 17 11:09 tmp

そのままの階層でプロジェクト作成を行う。
コマンドのusageに従えば、

add-project -> add new project:
add-project [project-id] ([project-base-dir])

ということなので、プロジェクトのIDをethna_sample、ベースディレクトリを先ほど作ったtmpディレクトリに設定。

$ ethna add-project ethna_sample tmp
error occured w/ command [add-project]
-> Only Numeric(0-9) and Alphabetical(A-Z) is allowed for Application Id

うむ、プロジェクト名は英数字のみですか。では、素直にやはり公式サイトのチュートリアルに従って名前をsampleで作成。

$ ethna add-project sample tmp
creating directory (tmp/sample) [y/n]: y
proejct sub directory created [tmp/sample/app]
proejct sub directory created [tmp/sample/app/action]
(途中省略)
file generated [skel.view_test.php -> tmp/sample/skel/skel.view_test.php]
file generated [template.index.tpl -> tmp/sample/template/ja/index.tpl]

project skelton for [sample] is successfully generated at [tmp]

これで一通りのスケルトンは作成されたことになる。
上で作成されたプロジェクトのWebサーバでの公開領域は~/tmp/sample/wwwなので、これを参照できる様にする。
Windowsの場合は、ローカルのWebサーバとしてAnHttpdを使わせていただいているので、この設定を変更する。
(変更は、オプション(0) -> 一般(G) -> ダイアログ内のドキュメントルートを修正)
上記の設定で、見える様になるはず。Webブラウザで閲覧してみると・・・。
f:id:hideack:20060617113659j:image
おぉ、ばっちりだ。

  • アクションを追加する

ここでアクションとはナニですか?となるわけですが、公式サイトを見ると

「アクション」とは何ですか?というのを正確に定義するのはちょっと難しいですが、要するに
1. ユーザから何らかのリクエストを受け取って(例えばURLへのアクセスや、submitボタンのクリック)
2. サーバ側で何らかの処理をして
3. 結果をブラウザに出力する
という一連の処理単位だとお考え下さい。

とのことなので、そういうことにする。*4
アクションを追加するときにはコマンドで "add-action" を指定する。

$ ethna add-action hello
file generated [skel.action.php -> /home/*****/tmp/sample/app/a
ction/Hello.php]
action script(s) successfully created [/home/*****/tmp/sample/app/action/Hello.php]

ふむ。追加された。
と、ここでタイムアップ。続きは後で。

*1:これはこれで非常に重要である。

*2:PHP5の場合はPEARチャンネルを使って入れるらしい。

*3:未だに適切な置き場なのか不明...。

*4:割切重要

MacOSXへMySQL導入。

家に戻っても、仕事と同じようなことをしているのは如何なものかという気もするが…。
Macだと飽きない。

ひとまずはダウンロード。このあたりから取得可能。
ダウンロードしたファイルをダブルクリック、中にある "mysql-standard-4.1.20-apple-darwin8.5.1-i686.pkg"(バージョンによって名前違う)をダブルクリック。展開後、インストールされる。*1
バイナリ類は /usr/local/mysql に預けられる。
またサーバのコントロールを「システム環境設定」から行える様にするには、同梱されている "MySQL.prefPane" をダブルクリックすればOK。これまた楽であっさり。
この環境設定パネルでサーバーを稼働させて、コンソールから試してみる。

$ cd /usr/local/mysql/bin
$ ./mysql

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6 to server version: 4.1.20-standard

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

ありゃ、一応もう動いたぞ。

*1:激しく楽でびっくり...。

RailsをMacにインストール

意外とあっさり。
http://rubyforge.org/projects/rubygems/ から、アーカイブ取得。私がつかったのはrubygem-0.8.11というやつ。ページの上部にある最新ファイルリリースからすぐ取得ができる。
これを適当なフォルダで展開。

$ tar xvzf rubygems-0.8.11.tgz

これで展開されたディレクトリ内に入ってセットアップスクリプト実行。
suでrootになっておく。

$ cd rubygems-0.8.11
$ ruby setup.rb

あとは、Rails本体をgem経由で取得する

$ gem install rails --include-dependencies

以上で完了。本当に入っているか見てみる。*1

$ which rails
/usr/bin/rails

なるほど。入った。

*1:念のため・・・