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