[PHP-users 19986]Re: Cygwin環境でのPHP4.3.5RC1とpearコマンド
komura
komura @ ma9.seikyou.ne.jp
2004年 1月 25日 (日) 01:52:50 JST
komura です。
参考にして頂いたメモを書いたのは私です。今、読み直してみると、いろいろと
誤字などが多いようですので、また修正しておきます。
他にも誤字や、間違いがあると思いますので、何か気になったことがありましたら、
指摘をお願いします。
On Sat, 24 Jan 2004 17:26:36 +0900
Toru Yamaguchi <tyamaguchi @ contents.ne.jp> wrote:
> (2) PHP4.3.5RC1のインストール
>
> $ export PATH=$PATH:/usr/local/apache/libexec
> $ cd /usr/local/src
> $ wget http://downloads.php.net/ilia/php-4.3.5RC1.tar.bz2
> $ tar xjf php-4.3.5RC1.tar.bz2
> $ cd php-4.3.5RC1
> $ ./configure --with-apxs=/usr/local/apache/bin/apxs --enable-mbstring
> --enable-mbregex
特に問題は出ないと思いますが、PHP 4.3.4 からは、--enable-mbstring を
指定した場合、--enable-mbregex は必要なくなっているはずです。
マルチバイト正規表現が不必要の場合には --disable-mbregex を指定するように
変更されています。
> このままではpearコマンドはflock()の実装がおかしいのか
> 使えないようなので、PEARのRegistry.phpの302行目のflock失敗時のエラーを
> 無理やり書き換えてtrueを返すようにしたら
それほど詳しく調べた訳ではありませんので、間違っているかもしれませんが、
Registry.php のこの部分の処理では、実際に行っている処理を単純化すると、
以下のような処理をしているように見えます。
<?php
$lockfile = './lockfile';
touch( $lockfile );
$fp = fopen( $lockfile, 'r' );
$ret = (int)flock( $fp, LOCK_SH );
echo '$ret : ' . $ret . "\n";
$fp = fopen( $lockfile, 'r' );
$ret = (int)flock( $fp, LOCK_UN );
echo '$ret : ' . $ret . "\n";
?>
このスクリプトを Gentoo Linux 1.4 と Cygwin の両方で実行してみたところ、
以下のような結果になりました。
Gentoo Linux 1.4
$ret : 1
$ret : 1
Cygwin DLL 1.5.6-1
$ret : 1
$ret : 0
共有ロックした状態のファイルを fopen() でさらに開いてアンロックする
という PHP スクリプトの書き方に問題があるように思います。
とりあえず、Registry.php の 290 行目の
$this->lock_fp = @fopen($this->lockfile, $open_mode);
となっている部分を
if (!is_resource($this->lock_fp)) {
$this->lock_fp = @fopen($this->lockfile, $open_mode);
}
に修正しても問題なく pear コマンドが使えるようになりました。
> ところでCygwin環境で開発されてる方ってどれほどいらっしゃるんですかね?
> Windowsで開発してる方は結構多いと思いますが、
> 皆さんどうされてるんでしょうか?
私の場合、Windows 環境では Cygwin をインストールして使っていますが、
ほとんどの場合、ターミナルで Linux などの別端末にログインして
しまいますので、Cygwin 上でスクリプトを書くことはほとんどありません。
Windows 環境しかない場合や、テスト環境としては Cygwin は非常に便利だ
と思います。
--
komura <komura @ ma9.seikyou.ne.jp>
PHP-users メーリングリストの案内