在 PHP 5.4.6 環境下編譯 php-screw 1.5 版本時,make 報錯:
/root/php_screw-1.5/php_screw.c: In function ‘zm_startup_php_screw’:
/root/php_screw-1.5/php_screw.c:124: error: ‘struct _zend_compiler_globals’ has no member named ‘extended_info’
/root/php_screw-1.5/php_screw.c: In function ‘zm_shutdown_php_screw’:
/root/php_screw-1.5/php_screw.c:133: error: ‘struct _zend_compiler_globals’ has no member named ‘extended_info’
make: *** [php_screw.lo] Error 1
PHP 5.4 版本中,Zend 引擎內部結構體 _zend_compiler_globals 移除了 extended_info 成員,改用 compiler_options 位掩碼配合 ZEND_COMPILE_EXTENDED_INFO 常量控制擴展信息生成。舊代碼直接訪問已不存在的成員導致編譯失敗。
編輯 php_screw.c,找到報錯的兩行(約第 124、133 行),將:
CG(extended_info) = 1;
修改為:
CG(compiler_options) |= ZEND_COMPILE_EXTENDED_INFO;
// 原代碼
CG(extended_info) = 1;
// 修改後
CG(compiler_options) |= ZEND_COMPILE_EXTENDED_INFO;
修改保存後重新執行 make,編譯應能通過。生成的 php_screw.so 正常載入 PHP 即可使用。