我使用的PHP代码依赖于包:https://pecl.php.net/package/pcsc
最后,我需要从PHP 5更新到PHP 7(足够晚了)。不幸的是,用于CentOS的REMI repo不再支持用于PHP7的PCSC,所以我尝试使用以下命令手动安装它:
pecl install channel://pecl.php.net/pcsc-0.3.1
但是我得到了一堆错误(见下文)。有办法解决这个问题吗?有没有用PHP访问智能卡的替代方案(没有找到)?
错误:
/var/tmp/pcsc/pcsc.c:92:35:错误:未知类型名称'zend_rssrc_list_entry'静态无效php_pcsc_ctx_res_dtor(zend_rsrc_list_entry*rsrc TSRMLS_DC){
/var/tmp/pcsc/pcsc.c:113:36:错误:未知类型名称'zend_rssrc_list_entry'静态无效php_pcsc_conn_res_dtor(zend_rsrc_list_entry*rsrc TSRMLS_DC){
/var/tmp/pcsc/pcsc.c:在函数"zm_startup_pcsc"中:/var/tmp/pcsc/pcsc.c:27:53:错误:"php_pcsc_ctx_res_dtor"未声明(此函数中首次使用)
le_pcsc_ctx_res=zend_register_list_destructors_ex(php_pcsc_ctx_res_dtor,NULL,PHPPCSC_ctx_res_NAME,module_number);/var/tmp/pcsc/pcsc.c:27:53:注意:每个未声明的标识符都是每个函数只报告一次/var/tmp/pcsc/pcsc.c:273:54:错误:"php_pcsc_conn_res_dtor"未声明(此函数中首次使用)
le_pcsc_conn_res=zend_register_list_destructors_ex(php_pcsc_conn_res_dtor,NULL,PHPPCSC_CONN_RES_NAME,模块号);/var/tmp/pcsc/pcsc.c:在函数"zif_scard_is_valid_context"中:/var/tmp/pcsc/pcsc.c:521:31:错误:之前需要表达式'SCARDCONTEXT'
ZEND_FETCH_RESOURCE(上下文,SCARDCONTTEXT,&ctx_res,-1,PHP_PCSC_ctx_res_NAME,le_PCSC_ctx_res);/var/tmp/pcsc/pcsc.c:在函数"zif_scard_release_context"中:/var/tmp/pcsc/pcsc.c:543:31:错误:之前需要表达式'SCARDCONTEXT'
ZEND_FETCH_RESOURCE(上下文,SCARDCONTTEXT,&ctx_res,-1,PHP_PCSC_ctx_res_NAME,le_PCSC_ctx_res);/var/tmp/pcsc/pcsc.c:在函数"zif_scard_list_readers"中:/var/tmp/pcsc/pcsc.c:564:31:错误:之前需要表达式'SCARDCONTEXT'
ZEND_FETCH_RESOURCE(上下文,SCARDCONTTEXT,&ctx_res,-1,PHP_PCSC_ctx_res_NAME,le_PCSC_ctx_res);/var/tmp/pcsc/pcsc.c:580:5:错误:参数太多,无法运行'add_next_index_string'add_next_index_string(return_value,ptrReader,TRUE);
在/usr/include/php/main/php.h:37:0中包含的文件中,来自/var/tmp/pcsc/pcsc.c:23:/usr/include/php/Zend/Zend_API.h:432:14:注意:此处声明Zend_APIint add_next_index_string(zval*arg,const char*str);
/var/tmp/pcsc/pcsc.c:在函数"zif_scard_connect"中:/var/tmp/pcsc/pcsc.c:609:31:错误:之前需要表达式'SCARDCONTEXT'
ZEND_FETCH_RESOURCE(上下文,SCARDCONTTEXT,&ctx_res,-1,PHP_PCSC_ctx_res_NAME,le_PCSC_ctx_res);/var/tmp/pcsc/pcsc.c:在函数"zif_scard_disconnect"中:/var/tmp/pcsc/pcsc.c:634:29:错误:之前需要表达式'SCARDHANDLE'
ZEND_FETCH_RESOURCE(hCard,SCARDHANDELE,&conn_res,-1,PHP_PCSC_conn_res_NAME,le_PCSC_conn_res);/var/tmp/pcsc/pcsc.c:在函数"zif_scard_transmit"中:/var/tmp/pcsc/pcsc.c:665:29:错误:之前需要表达式'SCARDHANDLE'
ZEND_FETCH_RESOURCE(hCard,SCARDHANDELE,&conn_res,-1,PHP_PCSC_conn_res_NAME,le_PCSC_conn_res);/var/tmp/pcsc/pcsc.c:708:58:错误:宏";RETVAL_STRING";通过2参数,但只需要1
RETVAL_STRING(e_bytes_to_hex(recvBuffer,recvLen),TRUE);/var/tmp/pcsc/pcsc.c:708:3:错误:未声明"RETVAL_STRING"(第一个在该函数中使用)RETVAL_STRING(e_bytes_to_hex(recvBuffer,recvLen)、TRUE);
/var/tmp/pcsc/pcsc.c:在函数"zif_scard_status"中:/var/tmp/pcsc/pcsc.c:731:29:错误:之前需要表达式'SCARDHANDLE'
ZEND_FETCH_RESOURCE(hCard,SCARDHANDELE,&conn_res,-1,PHP_PCSC_conn_res_NAME,le_PCSC_conn_res);/var/tmp/pcsc/pcsc.c:763:85:错误:宏;add_assoc_string"通过4论点,但只需要3个add_assoc_string(return_value,"PROTOCOL","RAW",TRUE);
/var/tmp/pcsc/pcsc.c:763:31:错误:"add_assoc_string"未声明(此功能中首次使用)add_assoc_string(return_value,"PROTOCOL","RAW",TRUE);
/var/tmp/pcsc/pcsc.c:766:85:错误:宏";add_assoc_string"通过4论点,但只需要3个add_assoc_string(return_value,"协议","T=0",TRUE);
/var/tmp/pcsc/pcsc.c:769:85:错误:宏";add_assoc_string"通过4论点,但只需要3个add_assoc_string(return_value,"协议","T=1",TRUE);
/var/tmp/pcsc/pcsc.c:77:58:错误:宏";add_assoc_string"通过4论点,但只需要3个add_assoc_string(return_value,"",atrString,TRUE);
/var/tmp/pcsc/pcsc.c:在函数"zif_scard_errstr"中:/var/tmp/pcsc/pcsc.c:799:53:错误:宏";RETURN_STRING";通过2参数,但只需要1
RETURN_STRING(php_pcsc_error_to_STRING(in_errno),1);/var/tmp/pcsc/pcsc.c:799:3:错误:未声明"RETURN_STRING"(第一个在该函数中使用)
RETURN_STRING(php_pcsc_error_to_STRING(in_errno),1);make:***[pcsc.lo]Fehler 1错误:"make"失败
我是这个扩展的开发人员,几个星期以来它一直是最新的。
只需使用以下命令安装即可:
pecl安装pcsc测试版
您也可以从https://github.com/pcsc-for-php/pcsc并自行编译。你可以在GitHub页面上找到说明。
最后我需要从PHP 5更新到PHP 7(足够晚了)。不幸的是,用于CentOS的REMI repo不再支持用于PHP7的PCSC,所以我尝试使用以下命令手动安装它:
如果扩展兼容,它将与所有其他扩展一样在存储库中
所以这看起来是一个死项目。