Установка PECL PCSC на PHP 7.4

Я использую код PHP, который зависит от пакета: https://pecl.php.net/package/pcsc

Наконец, мне нужно обновить PHP 5 до PHP 7 (достаточно поздно). Репозиторий REMI для CentOS, к сожалению, больше не поддерживает PCSC для PHP7, поэтому я попытался установить его вручную с помощью команды:

pecl install channel://pecl.php.net/pcsc-0.3.1

Но я получаю кучу ошибок (см. ниже). Есть ли способ решить эту проблему? Есть ли альтернатива доступу к смарт-картам в PHP (не нашел)?

Ошибки:

/var/tmp/pcsc/pcsc.c:92:35: ошибка: имя неизвестного типа 'zend_rsrc_list_entry' static void php_pcsc_ctx_res_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {

/var/tmp/pcsc/pcsc.c:113:36: ошибка: имя неизвестного типа 'zend_rsrc_list_entry' static void 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,номер_модуля);

/var/tmp/pcsc/pcsc.c:272:53: примечание: каждый необъявленный идентификатор сообщается только один раз для каждой функции, которая появляется в /var/tmp/pcsc/pcsc.c:273:54: error: '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);

make: *** [pcsc.lo] Fehler 1 ОШИБКА: `make' не удалось


person Benedikt    schedule 23.01.2021    source источник
comment
Просто попросите автора перенести код на более новую версию PHP (кстати, актуальна версия 8). Или, если вы возьметесь за эту задачу самостоятельно, извлеките минимально воспроизводимый пример. Что касается библиотек смарт-карт, то такой вопрос явно помечен как не относящийся к теме.   -  person Ulrich Eckhardt    schedule 23.01.2021


Ответы (2)


Я разработчик этого расширения, и оно обновляется уже несколько недель.

Просто установите его с помощью следующей команды:

pecl install pcsc-beta

Вы также можете получить код с https://github.com/pcsc-for-php/pcsc и скомпилируйте сами. Инструкции вы найдете на странице GitHub.

person hanez    schedule 25.02.2021
comment
Я знаю, на самом деле есть история вокруг этого. После ответа Реми Коллета я пошел в PECL и обнаружил, что расширение помечено как устаревшее/неактивное. Я попытался обновить его сам, но моих навыков не хватило, поэтому я обратился за помощью и вдохновил Кэлвина Бакли (финансово) помочь обновить расширение. :-) - person Benedikt; 20.03.2021

Наконец, мне нужно обновить PHP 5 до PHP 7 (достаточно поздно). Репозиторий REMI для CentOS, к сожалению, больше не поддерживает PCSC для PHP7, поэтому я попытался установить его вручную с помощью команды:

Если бы расширение было совместимым, оно было бы в репозитории, как и все другие расширения< /а>

Так что это выглядит как мертвый проект.

person Remi Collet    schedule 24.01.2021