Installation guide
Windows + IIS
Step-by-step deployment on Windows / Windows Server with IIS, PHP 8.2 over
FastCGI and the router via URL Rewrite, from the application package.
Requirements
| Windows | 10 / 11 or Windows Server 2019/2022 |
| IIS | with the CGI role (FastCGI) and the URL Rewrite module |
| PHP | 8.2.x Non-Thread-Safe (NTS) x64 |
| Oracle Instant Client | 19c — lightweight “Basic” (or “Basic Light”) package, 64-bit |
| The application package | sw_pkg_*.zip archive (see step 5) |
1. Enable IIS and the CGI role
Via Windows Features (or Server Manager): enable Internet Information Services, and under Application Development Features, tick CGI (enables FastCGI). Then install the URL Rewrite module (downloadable from iis.net / Web Platform Installer).
:: In PowerShell (admin) — Windows client example
Enable-WindowsOptionalFeature -Online -FeatureName IIS-CGI -All
2. Install PHP 8.2 (NTS) and enable the extensions
- Download PHP 8.2.x Non-Thread-Safe x64 from windows.php.net.
- Extract into
C:\php-8.2\. - Copy
php.ini-productiontophp.iniand adjust (same extensions as below):
extension_dir = "C:/php-8.2/ext"
extension=sqlite3 ; internal database (native SQLite, NOT pdo_sqlite)
extension=oci8_19 ; Oracle Instant Client 19c
extension=ldap
extension=openssl
extension=mbstring
extension=curl
extension=fileinfo
extension=gd
extension=intl
extension=zip
extension=sockets
extension=exif
default_charset = "UTF-8"
date.timezone = "Europe/Paris"
upload_max_filesize = 64M
post_max_size = 72M
memory_limit = 256M
; FastCGI: recycle the process regularly
fastcgi.impersonate = 1
cgi.fix_pathinfo = 1
3. Install the Oracle Instant Client
- Download Instant Client Basic 19c, 64-bit, from oracle.com.
- Extract into
C:\oracle\instantclient_19_25\. - Add that folder to the system PATH, and install the required Visual C++ Redistributable.
- Restart IIS so that the PATH is taken into account:
iisreset.
4. Declare PHP in IIS (FastCGI)
In IIS Manager, at the server level, open Handler Mappings » Add Module Mapping:
- Request path:
*.php - Module:
FastCgiModule - Executable:
C:\php-8.2\php-cgi.exe - Name:
PHP_via_FastCGI
Set index.php as the site’s Default Document.
5. Get and deploy the package
- Download the package from the Download page:
- CDN: libraries loaded from the Internet (small archive);
- Portable: bundled libraries (no Internet access required at runtime).
- Extract the archive, for example into
C:\inetpub\my-app\. - Create an IIS site whose physical path points to the
C:\inetpub\my-app\mon-applisubfolder (the web root).
The package holds a minimal securite\database.sqlite (no secret). The securite\master.key key and the full schema are created on first access. Default account: admin / admin123 (change it immediately).
6. Router: web.config (URL Rewrite)
The application uses a front-end router (the equivalent of the Apache .htaccess). Place this web.config in C:\inetpub\my-app\mon-appli\:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<defaultDocument>
<files><add value="index.php" /></files>
</defaultDocument>
<rewrite>
<rules>
<!-- Oracle front-controller: /oracle/* to oracle/index.php -->
<rule name="Oracle" stopProcessing="true">
<match url="^oracle/(.+)$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="oracle/index.php" appendQueryString="true" />
</rule>
<!-- Main router: anything that is not a real file/folder -->
<rule name="FrontController" stopProcessing="true">
<match url="^(.*)$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
lib\, securite\ and log\ folders are outside the web root (mon-appli\): they are therefore not reachable over HTTP.
7. Access rights
Grant the application pool identity (by default IIS APPPOOL\<PoolName>, or IIS_IUSRS) Modify rights on the two writable folders, located outside the web root:
C:\inetpub\my-app\securite\ ← SQLite database, master.key, wallets, backups
C:\inetpub\my-app\log\ ← application logs
8. Start and check
:: Check the PHP extensions
C:\php-8.2\php.exe -m | findstr /i "oci8 sqlite3"
:: Restart IIS after the changes
iisreset
Open the IIS site’s URL in a browser: the application redirects to the login page. Log in with the default account, then change it.
