カテゴリ | |
サマリ | pkwk_chown(): flock() failedと表示されます。 |
バージョン | 1.4.6 |
投稿者 | 藤原章 |
状態 | 保留 |
投稿日 | |
インストール後の動作確認のため、SandBoxページの凍結解除を行ったところ、以下の表示が出ます。
pkwk_chown(): flock() failed
$adminpassの設定にでも問題あるのでしょうか?
設定ファイルには以下のようにし,暗号化させていません。
$adminpass = 'SAMPLEPASS';
- 普通にページの作成等はできているのでしょうか? -- teanan
- 新規にページを作成することは出来ました。 -- 藤原章
- 新規に作成したページの凍結・凍結解除はできますか?もしできればパーミッションの問題かも知れません。また、一度キャッシュ ディレクトリの“pkwk_chown.lock”を削除してみては? -- 0
- 新規に作成したページの凍結・凍結解除はできました。パーミッションの確認をしてみます。 -- 藤原章
- 私も同じような現象に悩まされております。パーミッションは設定通りなのですが… -- 大和魂
- pukiwiki.ini.phpの所有者、グループをApacheにしてみたら? -- 川
- というより、ディレクトリ以下全部の所有者、グループをApacheにしてみたらどうでしょ? -- 川
- 自分も同じメッセージが出るのですが、凍結と解除はできているように見えます。 -- Pigment
- file.php line 609 の flock($ffile, LOCK_EX) で起きるみたいですね。wiki ディレクトリ以下の file owner を apache の実行ユーザと同じにしなければならないようです・・・。 -- u-suke
- どうしてflock() が失敗するのかがわからず不思議でしたが、仮に所有者が問題なのであれば、それを直されると良いでしょう。このロック用のファイルは消しても再作成されるはずなので、一旦どけてみてもいいかもしれません。 -- henoheno
- exclusive lock (LOCK_EX) を得ようとしているのに、直前の fopen() で read permission ("r") しか獲得していないのが問題では? -- u-suke
- 私はインストール時に存在するページではpkwk_chown(): flock() failedになり、自分で作成したページではエラーになりませんでした。一度エラーになるとpkwk_chown.lockを削除すれば自分で作成したページを凍結/解除してもエラーになりませんでした。調べてみたらfile.phpの607行目あたりのflock($ffile, LOCK_EX) or die('pkwk_chown(): flock() failed');でエラーになっていました。Apacheが作成するファイルとシェルアカウントが異なるためだと思いますが、レンタルサーバのため、変更は難しそうです。なので、1.トップページのファイル 2.file.phpの598行目の$ffile = fopen($filename, 'r') orの'r'を'w+'に変更 3.トップページの凍結/凍結解除を行う 4.トップページの中身がなくなる 5.トップページを編集してバックアップの中身からコピペ(pukiwiki上の操作) でファイルの所有者がかわり、凍結/解除ができるようになりました。邪道かもしれませんが。。。 -- チャパ
- 同じメセージが出るのですが凍結と解除は出来ます -- 月
- 編集でのページの更新をする時にでるのですがどうしたら直りますか? -- 月
- 自作プラグイン/chown.inc.phpのようなものを使えば、手間は省けるんじゃないですか。 --
- chown.phpを使ったのですが解決できずチャパさんのやり方で解決しました。 -- 月
- 私も pkwk_chown(): flock() failed に悩まされましたが、このページのチャバさんのコメントどおりに対応することで解決しました。ありがとうございました。対応した箇所は、「/lib の file.php の $ffile = fopen($filename, 'r') or の'r' を 'w+'に変更」です。 -- takuyakun
- 質問箱/3283, 質問箱/4063 --
- dev:BugTrack2/55 --
- OSがSolarisの場合、flockシステムコールの仕様の違いによりpkwk_chown(): flock() failedがでることが分かりました。Solarisのflockでは、LOCK_EX(排他ロック)をするためには書き込み可能な状態でファイルをオープンする必要があります。これに対して、LinuxなどのOSでは読み出しオープンでもLOCK_EX可能です。fopen の 'r' を 'w+' に変更すると改善するのは、OSのflockがSolaris流の場合と考えられます。ただ、pkwk_chown は、書き込みできないファイルのオーナーを変更することにより、書き込み権限を得ることが本来の目的ですので、'w+' でオープンできない場合、目的を果たせなくなります。それから、PHPのposix拡張モジュールの有無も、挙動に影響します。posix拡張モジュールがあれば、ファイルのオーナーをapacheの実行ユーザに変更することで解決できますが、posix拡張モジュールが無い場合、apache実行ユーザIDの取得ができず、毎回chownしようとしますので、pkwk_chown(): flock() failedが出ます。どのように問題解決すべきか考えています(LOCK_EXできないので、ロックファイルを作って対応かな・・・)。目処が立ったら、dev:BugTrack2で改善案を提案します。 -- 三浦克介
- 質問箱/4442, 質問箱/4574 --
- dev:BugTrack2/98 --
- 「世間のPHPユーザーが二度と困らないような」flockのまとめのページ が、今すぐでなくとも結果的に成立したとしたら、それは素晴らしいアウトプットだろうと思います。既存のそういうのがあれば、その参照でも構いません。歯止めになるなら構いません。 -- henoheno