首页 > 解决方案 > PECL PCSC 安装在 PHP 7.4 上

问题描述

我正在使用依赖于包的 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_rsrc_list_entry”静态无效php_pcsc_ctx_res_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC){

/var/tmp/pcsc/pcsc.c:113:36:错误:未知类型名称“zend_rsrc_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:272:53:错误:未声明“php_pcsc_ctx_res_dtor”(在此函数中首次使用)
le_pcsc_ctx_res=zend_register_list_destructors_ex(php_pcsc_ctx_res_dtor , NULL, PHP_PCSC_CTX_RES_NAME,module_number);

/var/tmp/pcsc/pcsc.c:272: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, PHP_PCSC_CONN_RES_NAME,module_number);

/var/tmp/pcsc/pcsc.c:在函数“zif_scard_is_valid_context”中:/var/tmp/pcsc/pcsc.c:521:31:错误:“SCARDCONTEXT”之前的预期表达式
ZEND_FETCH_RESOURCE(context,SCARDCONTEXT,&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(context,SCARDCONTEXT,&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(context,SCARDCONTEXT,&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_API int 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(context,SCARDCONTEXT,&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,SCARDHANDLE,&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,SCARDHANDLE,&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,SCARDHANDLE,&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, "PROTOCOL", "T=0", TRUE);

/var/tmp/pcsc/pcsc.c:769:85:错误:宏“add_assoc_string”传递了 4 个参数,但只需要 3 个 add_assoc_string(return_value, "PROTOCOL", "T=1", TRUE);

/var/tmp/pcsc/pcsc.c:777:58:错误:宏“add_assoc_string”传递了 4 个参数,但只需要 3 个 add_assoc_string(return_value,“ATR”,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);

制作:*** [pcsc.lo] Fehler 1 错误:“制作”失败

标签: phpcpeclpcsc

解决方案


我是这个扩展的开发者,几周以来它一直是最新的。

只需使用以下命令安装它:

pecl 安装 pcsc-beta

您也可以从https://github.com/pcsc-for-php/pcsc获取代码并自行编译。您将在 GitHub 页面上找到说明。


推荐阅读