PC/SC for PHP - An extension for PHP using the winscard PC/SC API.

Table of contents


This is the only extension for using PC/SC based smart cards with PHP. It is a wrapper to the wonderful and free project PCSC-Lite which is the middleware to access a smart card using SCard API (PC/SC). Since PCSC-Lite is compatible to the winscard API it should be possible to compile this extension using a Windows(R) operating system. Currently I only take focus on Linux environments.

Thanks are going to Johann Dantant! He provides a PC/SC extension for PHP since 2005 and I reused some of his code. He allowed me to relicense these parts under the terms of the PHP license so I could integrate PCSC-Lite natively into PHP. You find his work here.


I recommend to install the PECL extension the "PHP" way:

pecl install pcsc-alpha

You can install the latest version by downloading the sources and compile yourself too... :)

wget http://pecl.php.net/get/pcsc-0.2.tgz
tar -xvf pcsc-0.2.tgz
cd pcsc-0.2
make install

After that you have all needed files in ./modules/


The code has successful been released to the official code repository pecl.php.net... ;)

You could get the code using the following command:

svn checkout http://svn.php.net/repository/pecl/pcsc/trunk pcsc


The extension currently provides the following API:


Returns the application $context to the PC/SC resource manager.


Returns TRUE if $context is valid or FALSE if $context is not valid.


Releases the application $context.


Returns an array of available readers or FALSE.

array(3) {
  string(26) "OMNIKEY CardMan 5x21 00 00"
  string(26) "OMNIKEY CardMan 5x21 00 01"
  string(76) "SCL01x Contactless Reader [SCL01x Contactless Reader] (21161009200722) 00 00"

scard_connect($context, "OMNIKEY CardMan 5x21 00 00");

Connects to a card. Returns the $connection to a reader or FALSE.


Returns the $connection to a reader or FALSE.


Disconnects the $connection to a card. Returns the TRUE if disconnecting was succesful or FALSE.

scard_transmit($connection, $apdu);

Returns the response $apdu as string or FALSE.


Returns the status or FALSE.



This code is licensed under the terms of the PHP License version 3.01. PCSC-Lite is licensed in a way where it is possible to integrate it native in the PHP environment.