PHP, WordPress & applications
Tauri runs PHP with Zend PHP 8.3 — the reference PHP engine — with its OPcache, adapted to Tauri's system layer. Data lives in Tauri's built-in SQL database: there is no MySQL server. Applications reach it through PDO / SQLite3 (SQLite dialect), and WordPress through a database adapter shipped with the system. On that basis, real, unmodified applications run: WordPress, Drupal, Symfony, Laravel, MediaWiki, Nextcloud, phpBB, Kanboard and others. Tauri exécute le PHP avec Zend PHP 8.3 — le moteur PHP de référence — et son OPcache, adaptés à la couche système de Tauri. Les données vivent dans la base SQL intégrée de Tauri : il n'y a pas de serveur MySQL. Les applications y accèdent par PDO / SQLite3 (dialecte SQLite), et WordPress par un adaptateur de base livré avec le système. Sur ce socle tournent de vraies applications, non modifiées : WordPress, Drupal, Symfony, Laravel, MediaWiki, Nextcloud, phpBB, Kanboard et d'autres.
The language is exactly that of PHP 8.3. What differs is around it: the set of extensions (section 2), the database (section 4) and Tauri's paths (c:/…, @nc:/…). Test a site on Tauri before opening it to the public, and report what fails.
Le langage est exactement celui de PHP 8.3. Ce qui diffère est autour : le jeu d'extensions (section 2), la base de données (section 4) et les chemins de Tauri (c:/…, @nc:/…). Testez un site sur Tauri avant de l'ouvrir au public, et signalez ce qui échoue.
1. Applications that runApplications qui tournent
| Application | NotesRemarques |
|---|---|
| WordPress 7.0 | Authentic core, shared read-only on @wp:: each site keeps only its wp-config.php, wp-content/ (themes, plugins, media) and its tables. Created per hosting account with compteadm wordpress, or automatically when a domain is attached from the self-service pages. Plugins that go through $wpdb work; a plugin that opens its own MySQL connection does not.Cœur authentique, partagé en lecture seule sur @wp: : chaque site ne garde que son wp-config.php, son wp-content/ (thèmes, extensions, médias) et ses tables. Créé par compte d'hébergement avec compteadm wordpress, ou automatiquement au rattachement d'un domaine depuis les pages de libre-service. Les extensions qui passent par $wpdb fonctionnent ; une extension qui ouvre sa propre connexion MySQL, non. |
| Drupal 11 | Core shared read-only on @dp: (compteadm drupal); --copie gives the site a private copy.Cœur partagé en lecture seule sur @dp: (compteadm drupal) ; --copie donne au site une copie privée. |
| Symfony 7, Laravel 12 | Framework packages shared read-only on @fw:: an application keeps its own code and whatever is not shared. To put your own project online: Laravel & Symfony tutorial.Paquets des frameworks partagés en lecture seule sur @fw: : une application ne garde que son code et ce qui n'est pas partagé. Pour mettre en ligne votre propre projet : tutoriel Laravel & Symfony. |
| MediaWiki, Nextcloud, phpBB, Kanboard, Grav, FreshRSS, DokuWiki, PluXml, Bludit, WonderCMS | Installed and used through their own installers and pages.Installées et utilisées par leurs propres installeurs et pages. |
| Adminer | Browsing, queries and inserts work; editing an existing row does not (it relies on SQLite's rowid).Consultation, requêtes et insertions fonctionnent ; la modification d'une ligne existante non (elle repose sur le rowid de SQLite). |
2. The PHP engineLe moteur PHP
php -v shows PHP 8.3.26 with Zend OPcache (PHP_VERSION_ID 80326). Websites are served by a resident PHP daemon that keeps the shared application cores (WordPress, Drupal, frameworks) precompiled in OPcache; each request runs in a fresh process forked from it, under the identity of the site's account.
php -v affiche PHP 8.3.26 avec Zend OPcache (PHP_VERSION_ID 80326). Les sites sont servis par un démon PHP résident qui garde les cœurs d'applications partagés (WordPress, Drupal, frameworks) précompilés dans OPcache ; chaque requête s'exécute dans un processus neuf, issu de lui, sous l'identité du compte du site.
| Extensions providedExtensions fournies | ScopePortée |
|---|---|
| Core, date, json, pcre, SPL, hash, random, Reflection, session, ctype, filter, mbstring, tokenizer, iconv, bcmath, exif, posix | Standard behaviour.Comportement standard. |
| PDO, pdo_sqlite, sqlite3 | SQLite dialect over Tauri's database (section 4). No other PDO driver.Dialecte SQLite sur la base de Tauri (section 4). Aucun autre pilote PDO. |
| dom, SimpleXML, xml, xmlreader, xmlwriter, libxml | XML documents and parsing (libxml2).Documents et analyse XML (libxml2). |
| curl | Real HTTP/HTTPS transfers; the server certificate is validated. curl_multi_* runs its transfers one after another.Vrais transferts HTTP/HTTPS ; le certificat du serveur est validé. curl_multi_* exécute ses transferts l'un après l'autre. |
| openssl | Symmetric encryption (AES), digests, PBKDF2, random bytes, RSA and EC key pairs (create, export, sign, verify, encrypt). No X.509 certificates, CSR or PKCS#7.Chiffrement symétrique (AES), empreintes, PBKDF2, aléa, paires de clés RSA et EC (création, export, signature, vérification, chiffrement). Ni certificats X.509, ni CSR, ni PKCS#7. |
| zlib, zip | gz* functions and ZipArchive.Fonctions gz* et ZipArchive. |
| gd | PHP's own GD: PNG, JPEG, GIF, BMP, WBMP, XBM, TGA, TrueType text — enough for WordPress thumbnails. No WebP or AVIF.Le GD de PHP : PNG, JPEG, GIF, BMP, WBMP, XBM, TGA, texte TrueType — de quoi produire les vignettes WordPress. Ni WebP ni AVIF. |
| fileinfo | MIME type detection of files and strings.Détection du type MIME des fichiers et des chaînes. |
Not available: mysqli, pdo_mysql, pdo_pgsql (there is no external database server), sodium, gmp, imagick, and intl (only its Normalizer and grapheme_* functions exist). extension_loaded() reports exactly what is present, so applications take their own fallback (WordPress, for instance, ships its own sodium replacement).
Non disponibles : mysqli, pdo_mysql, pdo_pgsql (il n'y a pas de serveur de base externe), sodium, gmp, imagick, et intl (seules ses fonctions Normalizer et grapheme_* existent). extension_loaded() dit exactement ce qui est présent : les applications prennent alors leur propre solution de repli (WordPress, par exemple, embarque son remplaçant de sodium).
3. Running PHPExécuter du PHP
A request for a .php file is executed by the web server with nothing to enable (see Websites). On a hosting account, PHP runs under the account's own identity, confined to its home. From the shell:
Une requête vers un fichier .php est exécutée par le serveur web sans rien à activer (voir Sites web). Sur un compte d'hébergement, le PHP tourne sous l'identité du compte, confiné à son répertoire. Depuis le shell :
php script.php [args...] # run a script (output on the console)# exécuter un script (sortie sur la console)
php -l page.php # syntax check only# vérifier la syntaxe seulement
| LimitLimite | ValueValeur |
|---|---|
| Request body / uploadCorps de requête / téléversement | 2 MB2 Mo |
memory_limit | 128 MB by default; ini_set() may change it. A process never gets more than 256 MB, and the system always keeps a memory reserve for itself128 Mo par défaut ; ini_set() peut le changer. Un processus n'obtient jamais plus de 256 Mo, et le système garde toujours une réserve de mémoire pour lui-même |
max_execution_time | Unlimited by default; set_time_limit() arms it. The web server ends a page after 60 s.Illimité par défaut ; set_time_limit() l'arme. Le serveur web coupe une page au bout de 60 s. |
127.0.0.1, localhost and the server's own address reach its own web servers: the WordPress wp-cron loopback and the Site Health loopback test work. In such a local call, the visitor address (REMOTE_ADDR) is the server's own address, not 127.0.0.1.
127.0.0.1, localhost et l'adresse propre du serveur joignent ses propres serveurs web : la boucle de wp-cron de WordPress et le test de boucle de Santé du site fonctionnent. Dans un tel appel local, l'adresse du visiteur (REMOTE_ADDR) est l'adresse propre du serveur, pas 127.0.0.1.
disk_free_space() and disk_total_space() answer at once with the real figures: the free and total space of the volume, or — for a hosting account, on its own disk — its quota and what remains of it. File and folder names have no length limit; a full path may reach 4,096 characters.
disk_free_space() et disk_total_space() répondent aussitôt avec les vrais chiffres : l'espace libre et total du volume, ou — pour un compte d'hébergement, sur son propre disque — son quota et ce qu'il en reste. Les noms de fichiers et de dossiers n'ont pas de limite de longueur ; un chemin complet peut atteindre 4 096 caractères.
4. The databaseLa base de données
There is no MySQL. Tables live in Tauri's integrated SQL engine, where each table is a path of the file system (for example c:/user/alice/data/app.db/users/). With PDO or SQLite3, give the usual SQLite DSN: the path you name becomes the folder that holds the application's tables.
Il n'y a pas de MySQL. Les tables vivent dans le moteur SQL intégré de Tauri, où chaque table est un chemin du système de fichiers (par exemple c:/user/alice/data/app.db/users/). Avec PDO ou SQLite3, donnez le DSN SQLite habituel : le chemin indiqué devient le dossier qui contient les tables de l'application.
$db = new PDO('sqlite:c:/user/alice/data/app.db');
$db->exec('CREATE TABLE IF NOT EXISTS notes (id INTEGER PRIMARY KEY, texte TEXT)');
- SQL:
SELECT/INSERT/UPDATE/DELETE,REPLACE, upserts, joins, subqueries (correlated included),GROUP BY/HAVING, aggregates includingGROUP_CONCAT,UNION, indexes, constraints (UNIQUE,PRIMARY KEY,NOT NULL,CHECK,FOREIGN KEYwith cascades), triggers.SQL :SELECT/INSERT/UPDATE/DELETE,REPLACE, upserts, jointures, sous-requêtes (corrélées comprises),GROUP BY/HAVING, agrégats dontGROUP_CONCAT,UNION, index, contraintes (UNIQUE,PRIMARY KEY,NOT NULL,CHECK,FOREIGN KEYavec cascades), déclencheurs. - Transactions:
BEGIN,COMMIT,ROLLBACKandSAVEPOINT.Transactions :BEGIN,COMMIT,ROLLBACKetSAVEPOINT. - Introspection as in SQLite:
sqlite_master,PRAGMA table_info,pragma_table_info()and their relatives — used by installers, Doctrine, Laravel and Adminer.Introspection comme sous SQLite :sqlite_master,PRAGMA table_info,pragma_table_info()et leurs voisines — employées par les installeurs, Doctrine, Laravel et Adminer. - Up to 80 columns per table. Full-text
MATCHis accepted on ordinary tables (linear scan, no FTS index).Jusqu'à 80 colonnes par table. LeMATCHplein texte est accepté sur des tables ordinaires (balayage linéaire, sans index FTS). - Checked against the complete sqllogictest suite of SQLite: 7.4 million queries, compared with SQLite and MySQL.Vérifié avec la suite sqllogictest complète de SQLite : 7,4 millions de requêtes, comparées à SQLite et MySQL.
From the shell, query and administer the same tables with sql and bddadm:
Depuis le shell, interrogez et administrez ces mêmes tables avec sql et bddadm :
sql "SELECT id, texte FROM c:/user/alice/data/app.db/notes/"
bddadm column list c:/user/alice/data/app.db/notes/
NextSuite
Host sites for other people: Hosting. Protect them: Security. Héberger des sites pour d'autres : Hébergement. Les protéger : Sécurité.