2008年4月30日水曜日

CakePHP で文字化け

第5回 CakePHPで作るToDoアプリ(1) を試していたら、出力の部分で文字化けしてしまった。

続・CakePHPと文字化け (PHP学習日記) によると、

CakePHPではdatabase.phpに,encodingオプションを追加することでエンコードをセットすることができます。

ということなので、 app/config/database.php の設定に、

'encoding' => 'utf8',

を加えたら、文字化けが解消された。

 

(via. "文字化けが起こらない設定は??" フォーラム - CakePHP Users in Japan)

2008年4月29日火曜日

WordPress のソースコードを読む準備 - PDT を使って

前提

  • PDT が使えること。
  • XAMPP がインストールされていること。

(cf. PHP の開発環境を整える)

 

手順

WordPress | 日本語http://ja.wordpress.org/wordpress-2.5.1-ja.zip をダウンロードして、解凍する。後は、Drupal のソースコードを読む準備 と同じ手順を踏む。

 

データベースの設定

WordPress 用に新しくユーザ (wordpress) を作成した。

Image1

 

PDT

新しく PHPProject を作成し、先ほど解凍したフォルダをインポートする。

 

WordPress の設定

WordPress | 日本語 » インストール の手順に従った。

wp-config.php を開く。

Image3

 

先ほどデータベースで作成した設定を書き込む。

Image2

 

PDT で実行

Run As > Open Run Dialog... の設定を以下のようにする。

Image4

QQQ 上記のように設定した場合、どこかのファイルを更新したとして、上記を実行したら、どこまで反映されるのだろう?特定のファイルを更新したら、それようの実行設定を作らなくてはいけないのだろうか?

 

WordPress のインストール

Image5

 

指示通りにして、完了。

Image6

ついつい眺めてしまう Tumblr ^^;

有名な観光スポットであればみんな写真を撮る。自分も行けば同じように写真を撮る。他人が自分と同じ場所の写真を所有していても何も珍しいことはない。当り前のこと。ネットで検索すれば同じような写真はゴロゴロとしている。それなのに、今回はなぜか他人が撮った写真を見て「おもしろい」と感じた。なぜだろう?

 

京都にて

2、3 ヶ月ほど前に京都で何枚かの写真を撮った。これもその一つ。通称「八坂の塔」。外はまだ肌寒い季節で、朝食前に散歩にでかけ撮影したものだ。石畳の道を歩いていると、突然一角に塔がそびえ立つ。さすが京都。こんな風景他の場所では見たことがない。

DSC00742-2

 

場所はこちら。


大きな地図で見る

 

法観寺 - Wikipedia によると、

伝承によれば、当寺の五重塔は592年聖徳太子如意輪観音の夢告により建てたとされ、その際、仏舎利を三粒を収めて法観寺と号したという。聖徳太子創建との伝承は文字通りに受け取ることはできないが、平安京遷都以前から存在した古い寺院であることは確かなようであり、朝鮮半島系の渡来氏族・八坂氏の氏寺として創建されたという見方が有力である。

 

Tumblr で見かけた八坂の塔

たんぶら部 - Tumblove - 経由で、ある Tumblr を眺めていたら上記と同じ「八坂の塔」を見つけた。 → http://hatayasan.tumblr.com/post/31823675

こちらは闇にたたずむ八坂の塔。石畳の道の脇で提灯がやわらかな光を等間隔に放っている。ライトアップされた塔の表情は朝早くに写したぼくの写真とは対照的だった。

 

reblog

最近よく目にする機会がある tumblr 。そのシステムの中心となる概念 reblog 。

tumblr摩訶不思議システム。

ほかの人の書いた記事・引用・画像をそのまま自分の記事にしてしまうことができる。

つなげる力。つなげる意図がないこと。別の視点。別の角度。日常。コンテクスト。時の流れ。時間。

(reblog - たんぶら部 - Tumblove - より)

 

4U と tumblr

世界中の美女画像をみんなで共有するネットサービス」 で紹介されているのを見て 4U を知った。そして再び tumblr に注目した。 4U で投稿されている画像のリンクを辿ると tumblr に行きつくことが多い。

tumblr を知ったのは twitter を仲間内ではじめた頃。今では twitter に飽きてしまい全く twit ってない。当初はもの珍しさも手伝ってみんな twit ってた。短いフレーズで 同報通信。チャットで話すほどではない内容を書き、何となくみんなと繋がっている感覚が心地良かった。独り言をつぶやくには、これほど最適なメディアはないと、当時感じた。

独り言をつぶやくシステムとは了承していたものの、誰かに聞いてもらいたいと感じていたものをつぶやく。そもそも「つぶやく」とは、自分自身の行動をモニタリングするメタ意識が言語化され、それを積極的に活用しようという意図がない限り、誰かに聞かれることを望んでいるものかもしれない。つぶやきといえどスルーされると何となくさみしい。期せずして反応をもらうと何となくうれしい。 ^^;

 

twitter 離れ

mixi中毒という言葉を思い出す。

「コメント欲しさに日記を書く」→「コメントが付いて嬉しくなる」→「コメントをくれた人の日記にもコメントを返す」→「自分の日記へのコメントが途絶えると、コメント欲しさに新たに日記を書く」──というサイクルが際限なく続くのが“mixi日記中毒”の正体と言える。

(http://www.itmedia.co.jp/news/articles/0607/21/news061.html より)

仲間内で twitter をやっていると、チャットとの境界が曖昧になってくる。違うのはリアルタイム性だけ。

仲間内での twitter = チャット - 返信をせかされる感

と言ったところか。されどそこは仲間内。「返信が楽しい」から「せかされる」に変ったとき、本質的に面倒なチャットと変わらなくなる。都合のよいときだけつながっていたいという欲求は脆くも崩れ去った。

当時、同様のサービスが乱立した。日本語でサービスをはじめるところもあった。本家 twitter は日本語に対応したようだが、今更という感は否めない。ぼくの中では 2007 年に終ったサービスだ。使い続けている人は、自分とは違う使い方を見つけた人なのだろう。せっかくなので何か新しい使い方を見つけることができたらと思う。今のところ twitter で培われた技術が Web アプリ, サービスにおいて今後どのように利用されていくのかに関心があるくらいになってしまった。(cf. twitterブームの陰で注目を集める“Erlang” - @IT)

追記 (2010.2.5) : retweet の機能はTumblr 的なものと感じる。特に最近本家が実装したことにより、RT で転載せずボタン一つで retweet できるので気兼ねしなくていい ^^

 

二年坂

hatayasan@tumblr を眺めていたら、先ほどの写真の近くを撮影したものが reblog されていた。 → http://hatayasan.tumblr.com/post/31823664

電柱を見るとちょっと違う場所なのかな?(?_?)

DSC00745-2

 

場所はこちら。

京都パノラマ観光 を見ると、「二年坂」という名称のようだ。写真は南から北方向へ向いて撮ったもの。地図を見ても階段があるのがわかる。昼間は観光客でごったがえしになるようだけれど、朝早かったので人がほとんどいない。


大きな地図で見る

 

祇園枝垂桜

引き続き同じ tumblr 、hatayasan@tumblr を眺めていたら、先ほどの写真のすぐ下を見て、「あっ!」 (@_@)  と驚いた。 → http://hatayasan.tumblr.com/post/31823657

桜が咲いている!「祇園枝垂桜

ぼくが見たときは夕暮れ時で、枝が不気味に垂れ下っていた。しかも、カラスみたいなのがいてとても寂しげ。 ^^; 思わぬところでこの桜が咲いているのに出会えた。アングルも似ている。 ^^

DSC00705-2-2

 

場所はこちら。八坂の塔を見た前日の夕方にこの辺りを散策。


大きな地図で見る

ついでに、こちら (大雲院) も同じ場所を撮影したもののようだ。

DSC00692-2

建物の右側に桜があったとは。このとき全く気がつかず。 hatayasan@tumblr で reblog されていたリンク先を眺めていたら写真を見つけた。

 

 

tumble の意味

タンブラーと言えば、思い出すはスタバのタンブラー。そもそもどういった意味なのか?

タンブラーグラス - Wikipedia によると、

タンブラーグラス (英語:tumbler) は寸胴型のグラスである。語源は『倒れるもの、転ぶもの』。その理由は、もともとはこの言葉が獣ので作られた器などを指していたからである。ハイボールグラスとも呼ばれる。ソフトドリンクロングカクテルを飲むのに用いられる。

なるほど、カクテルを飲むときのコップがタンブラーか。

動詞形で調べると、Yahoo!辞書 - tumble には、

1I([副])] 倒れる;(…につまずいて)転ぶ((over ...));(…から)転がり落ちる((off, out of, from ...));(…を)転がり落ちる((down ...))

とあるが、tumblr の意味はこれかな?それとも、こちらの意味かな?

2 …を投げ散らす, ひっかき回す;…をくしゃくしゃ[めちゃめちゃ]にする


She tumbled the contents of her purse out onto the table.
テーブルの上にハンドバッグの中身をぶちまけた.

なんとなくカクテルを作るときのイメージをすればいいのか... ^^;

興味深いことに tumble には次のような意味もある。

6 (…に)偶然出くわす((in, into, upon, on ...)).

8 ((略式))(事実・事情に)はっと気づく, 合点する, 察知する, (人の)本当の性格がわかる((to ...))

tumble: Definition, Synonyms and Much More from Answers.com には、

To come upon accidentally; happen on: We tumbled on a fine restaurant.

自分の場合で言うと、tumble されたものを見ていたら、tumble しちゃったということだろうか。 ^^; tumblr というネーミングは言い得て妙なのかもしれない。

 

拡散の tumblr

以前に、思考を拡散させるためのツールとしての画像検索 について考えた。 tumblr を眺めるという行為に、そういった側面も含まれている。それは reblog されるものとして画像がとても多いため。

ある人がなんらかの意図で画像・文字列のコレクションを作成する。それをぼくは眺める。陳列されたものをさっと見渡す。この短い時間の行為に、人為的に織込まれた見知らぬ人の意図ならぬ糸をたぐり Web を browse する。

この偶然の流れの中でふと見つけた自分との接点。それを自分が積極的に探したというよりは「提示」されたという感覚。 Web の本質はリンクにある。 Mixi などの SNS は、リンクを知合いの連鎖に置き換えてリンクを再提示した。 tumblr は Web を remix したものを簡単に提示できる。また、他人の remix を眺めることができる。 remix した人の視点によって別の世界へ飛ばされる。それが心地良い。

そんな流れの中で出会った写真だからこそ「おもしろい」と感じることができたのかもしれない。他人の視線と自分の視線が交差する瞬間を演出する道具としての tumblr 。読ませるブログではなく、提示されたもののなかから選びとり考える入口を与えられる tumblr 。この舞台装置を通したからこそ新鮮な驚きがあったのだろう。

WinMySQLadmin を起動すると、エラー表示が繰り返される

1. MySQL をサービスとして起動すると、エラーダイアログが表示される

xampp-win32-1.6.6a インストールし、 MySQL をサービスとして起動したら、以下のようなエラーが繰り返しダイアログで表示された。

Access violation at address XXXXXXXX in module 'LIBMYSQL.dll'. Read of adress XXXXXXXX.

Image1

 

2. my.ini の user, password を削除してから、起動する

access violation at address 10002593 « Php bugs (via. Nix::WebLab: access violation at address 10002593 in module ‘LIBMYSQL.dll’ read at address 00000000.) によると、

Start > All Programs > Startup > WinMySQLadmin > Click on the my.ini Setup tab

Change the below default line at the bottom :
user=root
password=password

to

user=root
password=

WinMySQLadmin 1.4 を起動し、my.ini タブを選択。

`user= , password= ' に文字が記入されていたので、これを削除し、Save Modification ボタンを押した。

Image2

2008年4月28日月曜日

エクスプローラを再起動

エクスプローラの動作がおかしくなったときの対処。

  1. タスク マネージャ を起動する。 (Alt + Ctrl + del)
  2. 「プロセス」タブにおいて、 explorer.exe を右クリック > プロセスの終了 を選択する。
  3. 同、「アプリケーション」タブにおいて、「新しいタスク」ボタンを押す。
  4. ダイアログが表示されるので、explorer と入力し、OK ボタンを押す。

Image7

CakePHP の環境を整える

前提となるツール

  • PDT が使えること。
  • XAMPP がインストールされていること。

(cf. PHP の開発環境を整える)

 

CakePHP を利用するための手順

CakePHPで高速Webアプリ開発:第4回 CakePHPでの開発環境を構築する の説明に従った。

(この連載の第12回 を読むと、CakePHP の概略をざっと把握できる。)

CakeForge: CakePHP: Project Filelist より Stable の cake_1.1.19.6305.zip をダウンロードして、解凍した。

 

PDT の設定

PDT で PHPProject を作成する。(testcake とした。)

File > import で、先ほど解凍した cake_1.1.19.6305 フォルダ をインポート。

インポートしたらエラーが表示されたので、プロジェクトのプロパティで、文字コードを UTF-8 に変更した。

testcake プロジェクト直下の index.php で右クリック > Run As > Open Run Dialog... を選択。 以下のように設定して実行する。

Image1

Eclipse に内蔵されたブラウザに、以下のように表示された。この表示は、Apache の mod_rewrite が設定されてないときの表示。

Image2

 

Apache の設定 - mod_rewrite

Cookbook :: 1.2 Collection :: The Manual :: Developing with CakePHP :: Installation :: Apache and mod_rewrite を参考にし、D:\xampp\apache\conf\httpd.conf の以下の行をコメントアウトした。

LoadModule rewrite_module modules/mod_rewrite.so

再度、上記と同じように index.php を実行したら、以下のように表示された。

Image4

 

データベースの設定

app/config/database.php.defaultをコピーまたはリネームして,app/config/database.php を作成します。

(http://gihyo.jp/dev/serial/01/cakephp/0004?page=2 より)

http://localhost/phpmyadmin/ にアクセスして、 ユーザ cake を作成した。

Image5

再度、上記と同じように index.php を実行したら、以下のように表示されるようになった。

Image6

2008年4月27日日曜日

Drupal のソースコードを読む準備 - PDT (Eclipse) を使って

1. 前提

  • PDT が使えること。
  • XAMPP がインストールされていること。

(cf. PHP の開発環境を整える)

 

2. Drupal のダウンロード

drupal.org | Community plumbing から

をダウンロードし、解凍した。

 

3. データベースの設定

XAMPP コントロールパネルを起動し、Apache と MySQL を開始する。

phpMyAdmin で drupal6 というユーザを作成した。 phpMyAdmin のメインページ > 特権 で「新しいユーザを追加する。

Image1

「ユーザ専用データベース」で、「同名のデータベースを作成してすべての特権を与える」を選択しておいた。

Image4

 

4. PDT (Eclipse) にソースを取り込む

PDT (Eclipse) で新しく PHP Project を作成し、 drupal6 と名付けた。

解凍した drupal のソースのあるフォルダの内容を、 drupal6 プロジェクトにインポートする。

  • File > Import...

を選択。ダイアログが表示されるので、

  • General > File System

を選択し、先ほど解凍した drupal フォルダを指定する。

Image2

  • install.php を右クリック > Run As > Open Run Dialog...

Publish files to Server をチェックし、 Publish To: のフィールドに drupal6 と入力した。

Image3

 

5. Drupal のインストール

インストール画面が表示されるので、指示に従ってインストールを進める。

なせか、データベースの設定画面で設定をした後、 Apache が落ちた。 (+_+) Apache と MySQL を起動しなおし、再度 install.php を実行したら、続きからはじめることができた。

インストールが終了したとき、メールサーバを起動していなかったので、警告が表示がされたけれど、特に問題なし。

インストールが終わると、トップ画面を表示することができた。

Image6

 

6. Drupal の実行 とデバッグ

Drupal の画面を表示するには、

  • index.php を右クリック > Run As > Open Run Dialog...

で以下のように設定して、実行する。

Image8

デバッグするには、ソースコードにブレイクポイントを付け、

  • Debug As > Open Debug Dialog...

で上記の設定を利用する。

2008年4月25日金曜日

Firefox の Stylish のデータを手動で移行

 追記 (2009.12.21) : 現在は、Stylish の設定ファイルが変っている。以下を参照に。


1. Stylish のデータを FEBE で移行できなかった

Firefox のデータを新しい PC に移行するとき、アドオン FEBE を使った。しかし、途中で失敗して、移行できなかった。 (+_+)

仕方がないので、 Stylish のデータは手動で移行することにした。

 

2. 手動で移行する方法

Stylish quick guide | userstyles.org によると、

Where are styles stored?

By default, styles are stored in a file called stylish.rdf in the profile folder.

以下の手順で行った。

  1. 古い PC の方の C:\Documents and Settings\ユーザ名\Application Data\Mozilla\Firefox\Profiles\ランダムな文字列.プロファイル名\stylish.rdf をコピーする。
  2. 新しい環境の Firefox のプロファイルフォルダの中に配置する。
  3. Firefox を再起動。

 

3. データの保存場所を変更

次回、環境を移行するときに、移行しやすいように stylish.rdf を、デフォルトとは別の場所に置くことにした。

You can change this setting with the about:config preference "extensions.stylish.fileURL".

(同上 より)

以下の手順で行った。

  1. stylish.rdf を保存したい場所に置く。(今回は、 C:\Documents and Settings\ユーザ名\My Documents\project\Firefox\stylish とした。)
  2. fileURL を得るために、Firefox で stylish.rdf を開く。 (ファイル > ファイルを開く。または、ファイルを D&D) アドレスに fileURL(?) が表示されるので、コピーしておく。
  3. Firefox のアドレスに about:config と入力。
  4. フィルタに extensions.stylish.fileURL と入力。
  5. extensions.stylish.fileURL の行をダブルクリックして、ダイアログを表示させ、先ほどコピーした fileURL をペーストする。
  6. Firefox を再起動。

2008年4月23日水曜日

Windows XP のスタートメニュー を Vista 風に - ViStart

1. Windows XP のスタートメニューは探しにくい

試したいアプリケーションがあると、すぐにインストールする。そのため、スタートメニューから、「すべてのプログラム」を見ると、あまりの量に辟易する。 (@_@;)

必要なアプリケーションは、デスクトップにショートカットを集め、管理している。よく使うソフトは CLaunch に登録。毎日使うソフトは、Google Desktop の機能を使い、目的のソフト名の一部を入力して起動する。

スタートメニューから辿り、アプリケーションを見つけられないときがある。Vista のスタートメニューはいいなと思う。検索がさっとでき、素早く目的のものに辿りつける。たくさん項目があっても、 XP のようにズラズラとプログラムが表示されることもない。

 

2. スタートメニューの代替

スタートメニューを Vista 風にする Vista Start Menu を使っていた。しかし、他のアプリケーションとの相性が悪い。スタートボタンを押しても、すぐに反応しない。目的のソフトの名称を入力しても、ヒットするまでに時間がかかる。エクスプローラを開き、HandySelector を使いフィルタした方が早い。もしくは、UltraExplorer のフィルタ機能 を利用する方がよい。

同じようなアプリケーションに、Vista Start menu Emulator がある。しかし、表示が崩れて使えなかった。

 

3. ViStart のインストールと実行

Vista のスタートメニューを XP で実現するためのアプリケーションとして、Vista Start Menu for XP with ViStartViStart が紹介されていた。

ダウンロード して解凍し、Readme に従った。

  1. installme.bat を実行する
  2. ViStart を実行する

Image1

 

4. vistart結果

スタートメニューをクリックしたときの表示の反応はよい。また、プログラムの検索も即座に行われる。 ^^

追記(2008/4/24): ViStart を入れたら、Google Desktop の Ctrl × 2 のショートカットが使えなくなってしまった。 (@_@;) ViStart を終了させる (Windows のタスクマネージャより。) と、ショートカットが再度使えるようになるので、これが原因かなぁ...

対策: 窓の手 の「自動実行」において、Google Desktop Search を自動的に起動しないようにしておく。

StartupEX を利用して、ViStart を Google Desktop Search よりも先に起動するように設定する。また、二つを起動する合間に「遅延挿入」を入れておく。

ちょっと面倒だし、何かの拍子にまた Goolge Desktop Search が利用できなくなることもある。うーん...

二台の PC で モニタ と キーボード・マウス を共有 - パソコン 切替器

1. モニタとキーボード・マウスを共有したい

新しく 自作 PC を組んだ。これまで使っていた PC と、新しい PC で、モニタとキーボード・マウスを共有したい。

モニタには DVIVGA 端子がある。これまで使っていた PC は VGA端子に接続し、新しい PC は DVI 端子に接続した。各々の PC にキーボード・マウスを接続している。そのため、机が狭くなっあてしまった。(+_+)

DVI と VGA に接続したモニタを切替えるには、モニタにあるボタンを何度もボタンを押さないといけない。

 

2. DVI と VGA 端子の違い

モニタの接続端子である DVI と VGA とは何だろう?

Digital Visual Interface によると、

デジタルディスプレイ装置の映像品質を最大限活かすよう設計された映像出力インタフェースの標準規格である。...

DVIインタフェースは望みのピクセル輝度バイナリデータとして送信するのにデジタルプロトコルを用いている。

アナログ信号ではそれぞれのピクセルは電気的ノイズやアナログ信号のひずみなどによるのと同じくらい隣接するピクセルによる影響があきらかである。

VGA に比べて、DVI の方が綺麗に表示される。確かに、VGA で接続した方が、少し画面がにじんいる。

 

3. CPU切替器

二台の PC で モニタ と キーボード・マウス を共有には、CPU切替器を使う。

を見ると、ピンキリ。高い製品は、次の点の機能がある。

  • 切替えことができる台数が多い。
  • DVI 端子に対応している。
  • スピーカーも共有できる。

 

要件

自分の場合、切替える台数は 2 台。DVI で綺麗な表示がされなくても良い。スピーカーの共有も必要ない。

ただし、モニタを切替えは、本体の物理的な切替えボタンで行いたい。Ctrl キーを二回押すことによって切替える製品もあった。

要件をまとめると、

  • 安い
  • 二台を共有
  • VGA 端子でよい
  • スピーカーの共有はいらない
  • 物理的な切替えボタンがほしい

  • キーボードによる切替えをカスタマイズできるか。

これを満す製品は、REX-210CUだった。

ラトックシステム パソコン自動切替器
USB接続ケーブル一体型2台用 120cm REX-210CU

B0006J02LC

この製品には、本体に物理的なボタンがある。また、Scroll Lock を二回押すことによって、切替えることができる。

これにより、素早く 2 台の PC を切替えることができるようになった。^^

追記 (2010.6.2) : 上記のパソコン切替器は、もう売ってない。今、同等のものを買うならこれかな。

ELECOM USB⇔USBパソコン切替器 KVM-KUSN
B001CPHPNW

DVI 接続で、文字ににじみがなく綺麗な表示をさせたい場合は、

SANWA SUPPLY SW-KVM2DU フルHD対応DVIパソコン自動切替器(2:1)
B002VM017C

 

関連記事

2008年4月21日月曜日

PHP の include によりファイルが検索される場所

include 関数を利用している PHP ファイルがある。このファイルを別の環境に移したら動かなくなってしまった。 (+_+) 原因は何だろう?

 

include はどこからファイルを探すのか?

言語リファレンス > 制御構造 > include によると、

ファイルのインクルードは、指定されたパスから行います。パスを指定しない場合は、 include_path の設定を利用します。…

パス (絶対パスあるいは相対パスのいずれでも) を指定した場合は include_path は無視されます。たとえば ../ ではじまるファイル名を指定した場合は、 親ディレクトリからそのファイルを探します。

上記 include_path とは、

PHP は、インクルードするファイルを探す際に インクルードパスの各エントリを個別に調べます。 まず最初のパスを調べ、見つからなければ次のパスを調べ、…… というように、ファイルが見つかるか warning あるいは error が発生するまで続けます。

(PHP: コア php.ini ディレクティブに関する説明 – Manual より)

include_path を調べるには、phpinfo 、または get_include_path を利用する。 XAMPP を使っているなら、以下の URL にアクセス。

http://localhost/xampp/phpinfo.php

 

include を試してみる

Image3右図のようにファイル構成で include の挙動を確認する。実行した環境は、XAMPP を利用しており、phpinfo() を見ると include_path

D:\xampp\php\pear\

と表示される。 右図のルートとなる www フォルダは、PDT で testphp プロジェクト内に作成した。

各ファイルの内容は以下の通り。

  • www/index.php
<?php
include ("include/a.php");
?>
  • www/include/a.php
<?php
print "include/a.php"."<br>";
include("b.php");
?>
  • www/include/b.php
<?php
print "include/b.php"."<br>";
?>

これで www/index.php を実行すると、

include/a.php
include/b.php

と表示された。

 

include でファイルを探しにいく場所を順に考える

上記の実行される流れを考える。最初に www/index.php にアクセスしたので current working directory

www

include する側のファイルとされる側を矢印で示すと、

  • www/index.php → include/a.php、
  • include/a.php → include/b.php

という関係。

ところで、マニュアルには次のように書かれていた。

ファイルのインクルードは、指定されたパスから行います。パスを指定しない場合は、 include_path の設定を利用します。…

つまり、include/a.php において

“b.php”

を include するとき、パスが指定されていないので最初に include_path である

D:\xampp\php\pear\

に b.php がないか検索される。その後 www/include/ 内を検索。

上記の場合は include_path に b.php がなく、www/include/ に b.php があるので www/include/b.php が実行される。

 

相対パスによって指定するとそのディレクトリから検索される

ところで、先ほどのドキュメントには、以下のように書かれていた。

パス (絶対パスあるいは相対パスのいずれでも) を指定した場合は include_path は無視されます。たとえば ../ ではじまるファイル名を指定した場合は、 親ディレクトリからそのファイルを探します。

上記における www/include/a.php で include している部分を include("./b.php"); に変更して実行したら、以下のエラーが表示された。

include/a.php
Warning: include(./b.php) [function.include]: failed to open stream: No such file or directory in D:\xampp\htdocs\testphp\www\include\a.php on line 3
Warning: include() [function.include]: Failed opening './b.php' for inclusion (include_path='.;D:\xampp\php\pear\') in D:\xampp\htdocs\testphp\www\include\a.php on line 3

これは、

./

を付けたことによって current working directory から検索されるため。

www/b.php

は存在しないので上記のようなエラーが表示された。b.php を www に置いたら、エラーは表示されない。

 

意図しないファイルを include してしまう

さて、ここで www/include/

config.php

を作成する。ファイルの内容は "config.php" と文字列を表示するのみ。

これを include/a.php から include して動作を確かめる。 include/a.php の include を include("config.php") と変更した。

実行するとなぜか "config.php" と表示されなかった。

include("config.php") をブレークポイントにしてデバッグしたところ、config.php の include で以下のような表示がされている。

Image5

www/include/config.php を include しているつもりが、include_path (D:\xampp\php\pear\) 内の Config.php を include してしまっている。これは先ほどの説明にあったように、

include_path が最初に検索される

のが理由。 include_path 内にあるファイルと同名のファイルを include をするときは注意が必要。

 

意図しない include をしないための対策

config.php の内容が実行されるには、3 つの方法がある。

  • config.php を myconfig.php のように名称を変え、pear\Config.php とバッティングしないようにする。
  • config.php を current working directory に置き、相対パスで呼出すようにする。www/config.php に置き、include/a.php では、include("./config.php") とする。
  • www/include/config.php の場所は変えず、include/a.php の include の呼出しを次にようにする。

include(dirname(__FILE__) . "/config.php");

include しているファイルから見て相対的な位置で include できるように記述すればよい。(参考: PHP の include, require で相対パスを指定して読み込む場合のメモ - hoge256ブログ)

 

環境を変えたら動作しなかった理由

最初の問題に戻る。環境を変えたら動かなくなった理由は、問題なく動いていた環境では PEAR がインストールされていなかったために、

include("config.php")

の記述により、自分が作成した config.php が include されたていた。

しかし、環境を XAMPP に変更したことにより include_path に PEAR が設定され、include("config.php") の記述により PEAR の Config.php が呼出されたために挙動がおかしくなった。

パタッ(o_ _)o~†

2008年4月20日日曜日

Windows の Subversion にネットワーク経由でアクセスする

同一ネットワーク上にある他の PC 上の Subversion にアクセスしたい。

Subversion の動作 によると、次のいくつかの方法がある。

file://
ローカルないしネットワークドライブのリポジトリに直接アクセスします。

http://
Subversion を組み込んだ Apache サーバに WebDAV プロトコルでアクセスします。

https://
http:// と同じですが、SSL 暗号化を用います。

svn://
svnserve サーバと独自プロトコルで行う、認証されていない TCP/IP アクセス。

svn+ssh://
svnserve サーバと独自プロトコルで行う、認証・暗号化された TCP/IP アクセス。

Apache との連携がお手軽そうだ。

 

方法

Apache2(Windows版)でSubversionをネットワークに対応 に従って設定を行った。

まずはじめに、Subversion のインストーラを使って、 Apache の設定をさせようとした。ネットワークに対応させたい PC (192.168.11.2) は、Apache2.0.55 。Subversion は 1.4.3 。(svn --version で確認。) インストーラは削除してしまっているので、再度、Win32 packages built against Apache 2.0 から svn-1.4.3-setup.exe を再度ダウンロードした。インストーラを使って、設定をさせようと思ったが、デフォルトで Apache との連携がされるように設定がされるようチェックがされていた。

080420-001

 

Apache の httpd.conf を確認したところ、

LoadModule dav_module modules/mod_dav.so

は、コメントアウトされており、

#LoadModule dav_fs_module modules/mod_dav_fs.so

は、コメントアウトされてなかったので、コメントアウトした。

以下は記述がされていた。

LoadModule dav_svn_module "C:/Program Files/Subversion/bin/mod_dav_svn.so"
LoadModule authz_svn_module "C:/Program Files/Subversion/bin/mod_authz_svn.so"

Subversion のある位置情報を追加し、Apache を再起動。 http://localhost/svn にアクセスして動作を確認した。今回は、認証をかけない設定で行った。

<Location /svn>
  DAV svn
  SVNPath "d:/develop/svn"
</Location>

当初、上記の SVNPath を SVNParentPath と記述していたら動作しなかった。また、svn を snv と書くとエラーで起動しない。 ^^; 書き間違えに注意。

他の PC 上から TortoiseSVN を利用して、URL を http://192.168.11.2/svn としてアクセスができた。

 

参考

同一ネットワーク内なら、Skype でのファイル転送が高速

1. 大きなサイズのファイルを転送したい

SnapCrab_No-0017友人に Skype で写真などの大きなファイルを転送すると、とても時間がかかる。

SnapCrab_No-0018そのため、代わりにファイルを分割圧縮してメールで送るか、MediaFire で転送するか、もしくは AllPeers を使っていた。しかし、いつの間にか AllPeers が利用できなくなっていた。 (+_+)

Firefox上のファイル共有サービス「AllPeers」がサービスを停止 によると、

Firefoxのアドオンソフトとして提供されていたP2Pファイル共有サービスのAllPeersが3日、サービスを停止したと発表した。

パタッ(o_ _)o~†

Skype で転送するのに比べると、早くてよかったのに...

 

2. 同じネットワークにいる相手なら、Skype がお手軽

Skype は同一ネットワークにいる相手にファイル転送をする場合、とても高速に送ることができる。

1Gバイトのファイルをオンラインですばやく転送する方法 によると、

Skypeが総じて毎秒3000Kバイト(bpsに変換すると24Mbps)以上で転送し、7~8分程度で1Gバイトの転送を終了したのに対して、Windows Live Messengerでは3~5Mbps程度。時間にして1時間ほどかかってしまった。

これだけのスピードが出る理由は、社内LAN を利用しているため。

試しに、家庭内にある別のパソコンから、 Skype でファイルを転送してみた。ネットワークは無線を利用している。 10M くらいのファイルを転送したら、数秒で送信できた。

これには驚いた。遠くの友人に同じファイルを転送する場合、15 ~ 20 分かかる。

同じネットワーク内でデータを転送する場合、Windows で FTP サーバを利用してファイルの共有 をしていた。ちょっとしたことなら、Skype の方がお手軽なことが分かった。

Eclipse から Subversion を利用する - Subclipse

PHP の開発環境を整える の続き。

1. Subversion へソースコードをインポート

ソースコードの管理に Subversion を利用する。

最初に、Subversion をインストールしてリポジトリを作成 した。

TortoiseSVN でプロジェクトを管理する を参考にして、作成した PHP のプロジェクト (testphp) をリポジトリにインポート。

エクスプローラにおいて、workspace 内の testphp フォルダで

  • 右クリック > TortoiseSVN > Import...

を選択。

Image5

インポート先のリポジトリの URL は file:///D:/develop/svn/testphp/trunk とした。

Image6

 

2. Subclipse のインストール

次に、Eclipse から Subversion を操作する Subclipse をインストールする。

PHP の開発環境を整えたときに、デバッガをインストールしたのと同じ方法で、Subclipse をインストール。

インストールするときに必要な入力項目は、

    1. Name: Subclipse 1.2.x
    2. URL: http://subclipse.tigris.org/update_1.2.x

Image3

今回は、 Subclipse Plugin のみインストールした。

Image4

 

Subclipse と Subversion のバージョンの対応に注意

追記 (2010.4.27) : 上記以外のバージョンをインストールしたい場合、

に書かれている

Eclipse update site URL :

を用いる。特に気をつけることは、

Subclipse versions are tied to specific versions of the Subversion client API.  So you must have a matching version of the Subversion client API (JavaHL) for your version of Subclipse.  Any 1.x version of a Subversion client can talk to any 1.x version of a Subversion server,

(subclipse: Download and Install より、太字ば引用者による)

Subclipse と Subversion との対応に注意が必要。

Subversion のバージョンを確認するには、コマンドラインで

svn –version

または、デスクトップなど、適当な場所で

  • 右クリック > TortoiseSVN > about

今回、久しぶりに Subversion, TortoiseSVN, PDT の環境を新しくした。

Subversion のバージョンは

1.6.6

を利用しているので、Subclipse のバージョンは、

http://subclipse.tigris.org/update_1.6.x

対応してないバージョンを使ったら、Eclipse から Subversion にアクセスしようとすると、

ロケーションの検証中にエラー: "org.tigris.subversion.javahl.ClientException: snv …

というエラーが表示された。

 

3. Eclipse で Subclipse を使う

Eclipse において、

  • Window > Open Perspective > Other...

を選択。ダイアログが表示されたら、

「 SVN リポジトリー・エクスプロラー」

を選択する。

Image7

SVNリポジトリにおいて、

  • 右クリック > 新規 > リポジトリー・ロケーション

を選択。

Image8
ダイアログが表示されたら、Url に先ほど作成した file:///D:/develop/svn/ を入力。

Image9

しかし、リポジトリを追加しようとしたら、いきなり落ちた。 パタッ(o_ _)o~†

てくめも@coop / 2007-10-17 によると、

以下のいずれかの方法で対策できます。
(A) Subversion をアンインストールするか、PATH から <Subversion ホームディレクトリ>/bin を外す
(B) Apache2.2 用でなく Apache 2.0 用 Subversion (1.4.x) をインストールする
(C) plugin/*javahl*_X.X.X にあるすべての DLL を、使いたい Subversion の DLL にまるごと置き換える
(D) JavaHL でなく SVNKit など PureJava 実装の SVN コネクタを使う。

上記の (D) の方法で対処した。

  • Window > Preferences... > Team > SVN

の SVNインターフェイスで、SVNKit(Pure Java) を選択した。

Image10

 

4. リポジトリからチェックアウト

上記でインポートしたプロジェクト (testphp) がある場合は、予め削除しておく。

SVNリポジトリ・エクスプローラで、testphp 直下の trunk で右クリック > チェックアウト する。

Image1

チェックアウトのオプションダイアログが表示されるので、プロジェクト名が testphp となっていることを確認する。

Image14

デフォルトのワークスペースを使用。

Image16

PHP エクスプローラを見ると、testphp がチェックアウトされたのがわかる。

Image17

 

関連記事