Windows + IIS

Guide d’installation

Windows + IIS

Déploiement pas à pas sur Windows / Windows Server avec IIS, PHP 8.2 en
FastCGI et le routeur via URL Rewrite, à partir du paquet de l’application.

Prérequis

Windows 10 / 11 ou Windows Server 2019/2022
IIS avec le rôle CGI (FastCGI) et le module URL Rewrite
PHP 8.2.x Non-Thread-Safe (NTS) x64
Oracle Instant Client 19c — paquet léger “Basic” (ou “Basic Light”), 64-bit
Le paquet de l’application archive sw_pkg_*.zip (voir étape 5)
Important : sous IIS, PHP doit être en version Non-Thread-Safe (la version Thread Safe est réservée à mod_php / Apache).

1. Activer IIS et le rôle CGI

Via Fonctionnalites Windows (ou Gestionnaire de serveur) : activer Internet Information Services, et sous Fonctionnalites de développement d’applications, cocher CGI (active FastCGI). Installer ensuite le module URL Rewrite (téléchargeable depuis iis.net / Web Platform Installer).

:: En PowerShell (admin) — exemple Windows client
Enable-WindowsOptionalFeature -Online -FeatureName IIS-CGI -All

2. Installer PHP 8.2 (NTS) et activer les extensions

  1. Télécharger PHP 8.2.x Non-Thread-Safe x64 depuis windows.php.net.
  2. Extraire dans C:\php-8.2\.
  3. Copier php.ini-production vers php.ini et ajuster (mêmes extensions que ci-dessous) :
extension_dir = "C:/php-8.2/ext"

extension=sqlite3        ; base interne (SQLite natif, PAS 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 : recycler le process regulierement
fastcgi.impersonate = 1
cgi.fix_pathinfo = 1

3. Installer le client léger Oracle (Instant Client)

  1. Télécharger Instant Client Basic 19c, 64-bit, depuis oracle.com.
  2. Extraire dans C:\oracle\instantclient_19_25\.
  3. Ajouter ce répertoire au PATH système, et installer le Visual C++ Redistributable requis.
  4. Redémarrer IIS pour que le PATH soit pris en compte : iisreset.

4. Déclarer PHP dans IIS (FastCGI)

Dans le Gestionnaire IIS, au niveau du serveur, ouvrir Mappages de gestionnaires » Ajouter un mappage de module :

  • Chemin de la demande : *.php
  • Module : FastCgiModule
  • Executable : C:\php-8.2\php-cgi.exe
  • Nom : PHP_via_FastCGI

Définir index.php comme Document par défaut du site.

5. Récupérer et déployer le paquet

  1. Télécharger le paquet depuis la page Téléchargement :
    • CDN : librairies chargées depuis Internet (archive légère) ;
    • Portable : librairies embarquées (aucun accès Internet requis à l’exécution).
  2. Extraire l’archive, par exemple dans C:\inetpub\my-app\.
  3. Créer un site IIS dont le chemin physique pointe sur le sous-dossier C:\inetpub\my-app\mon-appli (la racine web).

Le paquet contient une base securite\database.sqlite minimale (sans secret). La clé securite\master.key et le schéma complet sont créés au premier accès. Compte par défaut : admin / admin123 (à changer immédiatement).

6. Routeur : web.config (URL Rewrite)

L’application utilise un routeur en frontal (l’équivalent du .htaccess Apache). Placer ce web.config dans 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>
        <!-- Front-controller Oracle : /oracle/* vers 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>
        <!-- Routeur principal : tout ce qui n'est pas un fichier/dossier reel -->
        <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>
Les dossiers lib\, securite\ et log\ sont en dehors de la racine web (mon-appli\) : ils ne sont donc pas accessibles via HTTP.

7. Droits d’accès

Donner à l’identité du pool d’applications (par défaut IIS APPPOOL\<NomDuPool>, ou IIS_IUSRS) le droit de modification sur les deux dossiers inscriptibles, situés hors de la racine web :

C:\inetpub\my-app\securite\   ← base SQLite, master.key, wallets, sauvegardes
C:\inetpub\my-app\log\        ← journaux applicatifs

8. Démarrer et vérifier

:: Verifier les extensions PHP
C:\php-8.2\php.exe -m | findstr /i "oci8 sqlite3"

:: Redemarrer IIS apres les changements
iisreset

Ouvrir l’URL du site IIS dans un navigateur : l’application redirige vers la page de connexion. Se connecter avec le compte par défaut puis le modifier.

C’est prêt. Configurez ensuite vos bases Oracle, vos utilisateurs et l’authentification depuis l’administration.