Fonctions supportées
TrueAsync adapte plus de 70 fonctions PHP standard pour un fonctionnement non-bloquant au sein des coroutines.
Toutes les fonctions listées deviennent automatiquement asynchrones lorsqu’elles sont appelées dans une coroutine.
En dehors d’une coroutine, elles fonctionnent normalement.
DNS
| Fonction |
Description |
gethostbyname() |
Résoudre un nom d’hôte en adresse IP |
gethostbyaddr() |
Résolution inverse d’adresse IP en nom d’hôte |
gethostbynamel() |
Obtenir la liste des adresses IP pour un nom d’hôte |
Bases de données
PDO MySQL
| Fonction |
Description |
PDO::__construct() |
Connexion non-bloquante |
PDO::prepare() |
Préparer une requête |
PDO::exec() |
Exécuter une requête |
PDOStatement::execute() |
Exécuter une requête préparée |
PDOStatement::fetch() |
Récupérer les résultats |
PDO PgSQL
| Fonction |
Description |
PDO::__construct() |
Connexion non-bloquante |
PDO::prepare() |
Préparer une requête |
PDO::exec() |
Exécuter une requête |
PDOStatement::execute() |
Exécuter une requête préparée |
PDOStatement::fetch() |
Récupérer les résultats |
Pool de connexions PDO
Pool de connexions transparent pour PDO via l’intégration Async\Pool.
Chaque coroutine reçoit sa propre connexion du pool avec gestion automatique du cycle de vie.
MySQLi
| Fonction |
Description |
mysqli_connect() |
Connexion non-bloquante |
mysqli_query() |
Exécuter une requête |
mysqli_prepare() |
Préparer une requête |
mysqli_stmt_execute() |
Exécuter une requête préparée |
mysqli_fetch_*() |
Récupérer les résultats |
PostgreSQL (natif)
| Fonction |
Description |
pg_connect() |
Connexion non-bloquante |
pg_query() |
Exécuter une requête |
pg_prepare() |
Préparer une requête |
pg_execute() |
Exécuter une requête préparée |
pg_fetch_*() |
Récupérer les résultats |
Chaque contexte async utilise une connexion séparée pour une concurrence sûre.
CURL
| Fonction |
Description |
curl_exec() |
Exécuter une requête |
curl_multi_exec() |
Exécuter plusieurs requêtes |
curl_multi_select() |
Attendre l’activité |
curl_multi_getcontent() |
Obtenir le contenu |
curl_setopt() |
Définir les options |
curl_getinfo() |
Obtenir les informations de requête |
curl_error() |
Obtenir l’erreur |
curl_close() |
Fermer le handle |
Sockets
| Fonction |
Description |
socket_create() |
Créer un socket |
socket_create_pair() |
Créer une paire de sockets |
socket_connect() |
Connecter |
socket_accept() |
Accepter une connexion |
socket_read() |
Lire les données |
socket_write() |
Écrire les données |
socket_send() |
Envoyer les données |
socket_recv() |
Recevoir les données |
socket_sendto() |
Envoyer à une adresse |
socket_recvfrom() |
Recevoir d’une adresse |
socket_bind() |
Lier à une adresse |
socket_listen() |
Écouter |
socket_select() |
Surveiller l’activité des sockets |
E/S fichiers et flux
| Fonction |
Description |
fopen() |
Ouvrir un fichier |
fclose() |
Fermer un fichier |
fread() |
Lire depuis un fichier |
fwrite() |
Écrire dans un fichier |
fgets() |
Lire une ligne |
fgetc() |
Lire un caractère |
fgetcsv() |
Lire une ligne CSV |
fputcsv() |
Écrire une ligne CSV |
fseek() |
Définir la position |
ftell() |
Obtenir la position |
rewind() |
Réinitialiser la position |
ftruncate() |
Tronquer le fichier |
fflush() |
Vider les tampons |
fscanf() |
Lecture formatée |
file_get_contents() |
Lire le fichier entier |
file_put_contents() |
Écrire le fichier entier |
file() |
Lire le fichier dans un tableau |
copy() |
Copier un fichier |
tmpfile() |
Créer un fichier temporaire |
readfile() |
Afficher un fichier |
fpassthru() |
Afficher le reste du fichier |
stream_get_contents() |
Lire le reste du flux |
stream_copy_to_stream() |
Copier entre flux |
flock() |
Verrouillage de fichiers (via pool de threads) |
Important : flock() utilise le pool de threads.
La fonction flock() est un appel système bloquant qui ne peut pas être rendu non-bloquant via les événements I/O de libuv.
Dans une coroutine, les opérations de verrouillage bloquantes (LOCK_SH, LOCK_EX) sont déchargées vers le pool de threads libuv,
permettant aux autres coroutines de continuer à s’exécuter pendant l’attente du verrou.
Les verrouillages non-bloquants (LOCK_NB) et déverrouillages (LOCK_UN) s’exécutent directement sans le pool de threads.
Important : Timeouts pour les fichiers et les flux pipe.
PHP ne supporte pas nativement les timeouts pour les opérations de lecture/écriture sur les fichiers et les flux pipe — les fonctions standard fread(), fwrite() et autres peuvent bloquer indéfiniment.
TrueAsync résout ce problème : si un timeout est défini pour un flux (via stream_set_timeout()),
l’opération de lecture enregistre simultanément un événement IO et un minuteur. Si le minuteur se déclenche avant la fin de l’IO,
la lecture est annulée et la coroutine reçoit un résultat de -1 (indicateur de timeout).
Cela ne fonctionne qu’à l’intérieur des coroutines — en dehors, le comportement reste standard.
Sockets de flux
| Fonction |
Description |
stream_socket_client() |
Créer une connexion client |
stream_socket_server() |
Créer un socket serveur |
stream_socket_accept() |
Accepter une connexion |
stream_select() |
Surveiller l’activité des flux |
stream_context_create() |
Créer un contexte async |
Limitation : stream_select() avec les flux pipe (ex. de proc_open()) n’est pas supporté sous Windows. Sous Linux/macOS, cela fonctionne nativement via la boucle d’événements.
Exécution de processus
| Fonction |
Description |
proc_open() |
Ouvrir un processus avec pipes |
proc_close() |
Fermer un processus |
exec() |
Exécuter une commande externe |
shell_exec() |
Exécuter une commande shell |
system() |
Exécuter une commande système |
passthru() |
Exécuter avec sortie directe |
Important : proc_close() et pclose() bloquent la coroutine.
L’appel à proc_close() ou pclose() attend la fin du processus enfant.
À l’intérieur d’une coroutine, cela bloque la coroutine courante jusqu’à la fin du processus — les autres coroutines continuent de s’exécuter.
Cela se produit aussi lors d’appels implicites via les destructeurs : si une variable contenant une ressource de processus sort de la portée
ou est détruite par le ramasse-miettes, le destructeur appelle pclose(), ce qui bloque la coroutine où s’exécute le ramasse-miettes.
Recommandation : fermez toujours les processus explicitement via proc_close() au lieu de compter sur les destructeurs,
afin de contrôler quelle coroutine sera bloquée.
Minuteries et délais
| Fonction |
Description |
sleep() |
Délai en secondes |
usleep() |
Délai en microsecondes |
time_nanosleep() |
Délai en nanosecondes |
time_sleep_until() |
Attendre jusqu’à un horodatage |
Mise en tampon de sortie
Chaque coroutine reçoit un tampon de sortie isolé.
| Fonction |
Description |
ob_start() |
Démarrer la mise en tampon |
ob_flush() |
Vider le tampon |
ob_clean() |
Nettoyer le tampon |
ob_get_contents() |
Obtenir le contenu du tampon |
ob_end_clean() |
Terminer la mise en tampon |
Pas encore supporté
Fonctions prévues pour implémentation ou pas encore adaptées.
DNS
| Fonction |
Description |
dns_check_record() / checkdnsrr() |
Vérifier un enregistrement DNS |
dns_get_mx() / getmxrr() |
Obtenir les enregistrements MX |
dns_get_record() |
Obtenir les enregistrements DNS |
Bases de données
| Extension |
Description |
| PDO ODBC |
Pilote ODBC |
| PDO Oracle |
Pilote Oracle |
| PDO SQLite |
Pilote SQLite |
| PDO Firebird |
Pilote Firebird |
| MongoDB |
Client MongoDB |
Opérations sur fichiers (métadonnées)
| Fonction |
Description |
opendir() / readdir() / closedir() |
Parcours de répertoire |
unlink() / rename() |
Suppression et renommage de fichiers |
mkdir() / rmdir() |
Création et suppression de répertoires |
stat() / lstat() |
Informations sur les fichiers |
readlink() |
Lecture des liens symboliques |
Remarque : Les opérations sur les métadonnées de fichiers sur disque local s’exécutent en microsecondes. Leur asynchronisation n’a de sens que pour les systèmes de fichiers réseau (NFS).
Et ensuite ?