Windows + IIS

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)
Important: under IIS, PHP must be the Non-Thread-Safe build (the Thread Safe build is reserved for mod_php / Apache).

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

  1. Download PHP 8.2.x Non-Thread-Safe x64 from windows.php.net.
  2. Extract into C:\php-8.2\.
  3. Copy php.ini-production to php.ini and 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

  1. Download Instant Client Basic 19c, 64-bit, from oracle.com.
  2. Extract into C:\oracle\instantclient_19_25\.
  3. Add that folder to the system PATH, and install the required Visual C++ Redistributable.
  4. 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

  1. Download the package from the Download page:
    • CDN: libraries loaded from the Internet (small archive);
    • Portable: bundled libraries (no Internet access required at runtime).
  2. Extract the archive, for example into C:\inetpub\my-app\.
  3. Create an IIS site whose physical path points to the C:\inetpub\my-app\mon-appli subfolder (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>
The 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.

You are ready. Then configure your Oracle databases, your users and authentication from the administration area.