PHP の APC の apc_fcntl_unlock エラー
エラー
Fatal error: Unknown: apc_fcntl_unlock failed: in Unknown on line 0
発生環境
上記エラーが発生した私の環境は以下のとおりです。
- PHP 5.3.35
- APC 3.1.9
原因
APC 3.1.9 の既知のバグのようです。次のページで議論され解決されています。
対処方法
最もかんたんなのは APC 3.1.9 ではなくバグの含まれていない APC 3.1.6 を使うという方法です。
どうしてもバージョン 3.1.9 を使いたい場合は上記のページで紹介されているパッチをあてた上で APC をコンパイルし直す形でも大丈夫です。 1 行だけなので直接 apc_lock.h
を編集してもよいでしょう。パッチはこちら。
--- pecl/apc/trunk/apc_lock.h 2011-05-22 17:13:10 UTC (rev 311338)
+++ pecl/apc/trunk/apc_lock.h 2011-05-22 17:18:49 UTC (rev 311339)
@@ -154,7 +154,7 @@
# define apc_lck_nb_lock(a) apc_fcntl_nonblocking_lock(a TSRMLS_CC)
# define apc_lck_rdlock(a) apc_fcntl_rdlock(a TSRMLS_CC)
# define apc_lck_unlock(a) apc_fcntl_unlock(a TSRMLS_CC)
-# define apc_lck_rdunlock(a) apc_fcntl_unlock(&a TSRMLS_CC)
+# define apc_lck_rdunlock(a) apc_fcntl_unlock(a TSRMLS_CC)
#endif
#endif