вторник, 16 августа 2016 г.

Проблемы с eaccelerator (Invalid opcode, Unable to change cache directory)

Кривой eaccelerator, который нужно патчить при каждом чихе.
Например могут встретиться такие ошибки:
[error] [client 1.1.1.1] eAccelerator: Unable to change cache directory /var/cache/php-eaccelerator permissions
или
Fatal error: Invalid opcode 153/1/8. in /var/www/.../pdofetch.class.php on line 494

Для устранения первой ошибки мне помог этот патч:
# diff -U 0 eaccelerator.c_old eaccelerator.c
--- eaccelerator.c_old 2016-08-16 14:17:15.331786184 +0300
+++ eaccelerator.c 2016-08-16 13:34:36.592906639 +0300
@@ -1770 +1770 @@
-        if (buffer.st_mode != 777) {
+        if (buffer.st_mode != 040777) {

Для второй:
# diff -U 0 optimize.c_old optimize.c
--- optimize.c_old 2016-08-08 12:00:02.000000000 +0300
+++ optimize.c 2016-08-08 12:00:43.000000000 +0300
@@ -3503,0 +3504,11 @@
+    /* do not optimize if opcodes have "closures" */
+    zend_op* op = op_array->opcodes;
+    int len = op_array->last;
+    int line_num;
+
+    for (line_num = 0; line_num < len; op++,line_num++) {
+        if (op->opcode == ZEND_DECLARE_LAMBDA_FUNCTION) {
+            return;
+        }
+    }
+

Также можно еще в /etc/php.d/eaccelerator.ini попробовать сменить значение переменной eaccelerator.cache_dir:
eaccelerator.cache_dir = "/tmp"
;eaccelerator.cache_dir = "/var/cache/php-eaccelerator"

Комментариев нет: