FunktionsreferenzUnterstützte Funktionen

Unterstützte Funktionen ​

TrueAsync passt über 70 Standard-PHP-Funktionen für nicht-blockierenden Betrieb innerhalb von Koroutinen an. Alle aufgeführten Funktionen werden automatisch asynchron, wenn sie innerhalb einer Koroutine aufgerufen werden. Außerhalb einer Koroutine funktionieren sie wie gewohnt.


DNS ​

FunktionBeschreibung
gethostbyname()Hostname in IP-Adresse auflösen
gethostbyaddr()IP-Adresse in Hostname auflösen
gethostbynamel()Liste der IP-Adressen für Hostname abrufen

Datenbanken ​

PDO MySQL ​

FunktionBeschreibung
PDO::__construct()Nicht-blockierende Verbindung
PDO::prepare()Anweisung vorbereiten
PDO::exec()Abfrage ausführen
PDOStatement::execute()Vorbereitete Anweisung ausführen
PDOStatement::fetch()Ergebnisse abrufen

PDO PgSQL ​

FunktionBeschreibung
PDO::__construct()Nicht-blockierende Verbindung
PDO::prepare()Anweisung vorbereiten
PDO::exec()Abfrage ausführen
PDOStatement::execute()Vorbereitete Anweisung ausführen
PDOStatement::fetch()Ergebnisse abrufen

PDO Connection Pooling ​

Transparentes Connection Pooling für PDO über Async\Pool-Integration. Jede Koroutine erhält eine eigene Verbindung aus dem Pool mit automatischer Lebenszyklusverwaltung.

MySQLi ​

FunktionBeschreibung
mysqli_connect()Nicht-blockierende Verbindung
mysqli_query()Abfrage ausführen
mysqli_prepare()Anweisung vorbereiten
mysqli_stmt_execute()Vorbereitete Anweisung ausführen
mysqli_fetch_*()Ergebnisse abrufen

PostgreSQL (nativ) ​

FunktionBeschreibung
pg_connect()Nicht-blockierende Verbindung
pg_query()Abfrage ausführen
pg_prepare()Anweisung vorbereiten
pg_execute()Vorbereitete Anweisung ausführen
pg_fetch_*()Ergebnisse abrufen

Jeder Async-Kontext verwendet eine separate Verbindung für sichere Nebenläufigkeit.


CURL ​

FunktionBeschreibung
curl_exec()Anfrage ausführen
curl_multi_exec()Mehrere Anfragen ausführen
curl_multi_select()Auf Aktivität warten
curl_multi_getcontent()Inhalt abrufen
curl_setopt()Optionen setzen
curl_getinfo()Anfrageinformationen abrufen
curl_error()Fehler abrufen
curl_close()Handle schließen

Sockets ​

FunktionBeschreibung
socket_create()Socket erstellen
socket_create_pair()Socket-Paar erstellen
socket_connect()Verbinden
socket_accept()Verbindung annehmen
socket_read()Daten lesen
socket_write()Daten schreiben
socket_send()Daten senden
socket_recv()Daten empfangen
socket_sendto()An Adresse senden
socket_recvfrom()Von Adresse empfangen
socket_bind()An Adresse binden
socket_listen()Lauschen
socket_select()Socket-Aktivität überwachen

Datei- und Stream-E/A ​

FunktionBeschreibung
fopen()Datei öffnen
fclose()Datei schließen
fread()Aus Datei lesen
fwrite()In Datei schreiben
fgets()Zeile lesen
fgetc()Zeichen lesen
fgetcsv()CSV-Zeile lesen
fputcsv()CSV-Zeile schreiben
fseek()Position setzen
ftell()Position abrufen
rewind()Position zurücksetzen
ftruncate()Datei kürzen
fflush()Puffer leeren
fscanf()Formatiertes Lesen
file_get_contents()Gesamte Datei lesen
file_put_contents()Gesamte Datei schreiben
file()Datei in Array lesen
copy()Datei kopieren
tmpfile()Temporäre Datei erstellen
readfile()Datei ausgeben
fpassthru()Rest der Datei ausgeben
stream_get_contents()Rest des Streams lesen
stream_copy_to_stream()Zwischen Streams kopieren
flock()Dateisperrung (über Thread-Pool)

Wichtig: flock() verwendet den Thread-Pool. Die Funktion flock() ist ein blockierender Systemaufruf, der nicht über libuv-I/O-Events nicht-blockierend gemacht werden kann. Innerhalb einer Coroutine werden blockierende Sperr-Operationen (LOCK_SH, LOCK_EX) an den libuv-Thread-Pool ausgelagert, sodass andere Coroutinen weiterarbeiten können, während auf die Sperre gewartet wird. Nicht-blockierende Sperren (LOCK_NB) und Entsperrungen (LOCK_UN) werden direkt ohne Thread-Pool ausgeführt.

Wichtig: Timeouts für Dateien und Pipe-Streams. PHP unterstützt nativ keine Timeouts für Lese-/Schreiboperationen auf Dateien und Pipe-Streams — Standard-Funktionen wie fread(), fwrite() und andere können unbegrenzt blockieren. TrueAsync löst dieses Problem: Wenn ein Timeout für einen Stream gesetzt ist (über stream_set_timeout()), registriert die Leseoperation gleichzeitig ein IO-Ereignis und einen Timer. Wenn der Timer vor Abschluss der IO auslöst, wird das Lesen abgebrochen und die Coroutine erhält das Ergebnis -1 (Timeout-Indikator). Dies funktioniert nur innerhalb von Coroutinen — außerhalb bleibt das Verhalten standard.


Stream-Sockets ​

FunktionBeschreibung
stream_socket_client()Client-Verbindung erstellen
stream_socket_server()Server-Socket erstellen
stream_socket_accept()Verbindung annehmen
stream_select()Stream-Aktivität überwachen
stream_context_create()Async-fähigen Kontext erstellen

Einschränkung: stream_select() mit Pipe-Streams (z.B. von proc_open()) wird unter Windows nicht unterstützt. Unter Linux/macOS funktioniert es nativ über die Event-Schleife.


Prozessausführung ​

FunktionBeschreibung
proc_open()Prozess mit Pipes öffnen
proc_close()Prozess schließen
exec()Externen Befehl ausführen
shell_exec()Shell-Befehl ausführen
system()Systembefehl ausführen
passthru()Ausführen mit direkter Ausgabe

Wichtig: proc_close() und pclose() blockieren die Coroutine. Der Aufruf von proc_close() oder pclose() wartet auf das Ende des Kindprozesses. Innerhalb einer Coroutine blockiert dies die aktuelle Coroutine bis der Prozess beendet ist — andere Coroutinen laufen weiter. Dasselbe geschieht bei impliziten Aufrufen über Destruktoren: Wenn eine Variable mit einer Prozess-Ressource den Gültigkeitsbereich verlässt oder vom Garbage Collector zerstört wird, ruft der Destruktor pclose() auf, was die Coroutine blockiert, in der die Garbage Collection läuft.

Empfehlung: Schließen Sie Prozesse immer explizit über proc_close(), anstatt sich auf Destruktoren zu verlassen, damit Sie kontrollieren können, welche Coroutine blockiert wird.


Timer und Verzögerungen ​

FunktionBeschreibung
sleep()Verzögerung in Sekunden
usleep()Verzögerung in Mikrosekunden
time_nanosleep()Nanosekunden-genaue Verzögerung
time_sleep_until()Warten bis Zeitstempel

Ausgabepufferung ​

Jede Koroutine erhält einen isolierten Ausgabepuffer.

FunktionBeschreibung
ob_start()Pufferung starten
ob_flush()Puffer leeren
ob_clean()Puffer bereinigen
ob_get_contents()Pufferinhalt abrufen
ob_end_clean()Pufferung beenden

Noch nicht unterstützt ​

Funktionen, die zur Implementierung geplant oder noch nicht angepasst sind.

DNS ​

FunktionBeschreibung
dns_check_record() / checkdnsrr()DNS-Eintrag prüfen
dns_get_mx() / getmxrr()MX-Einträge abrufen
dns_get_record()DNS-Ressourceneinträge abrufen

Datenbanken ​

ErweiterungBeschreibung
PDO ODBCODBC-Treiber
PDO OracleOracle-Treiber
PDO SQLiteSQLite-Treiber
PDO FirebirdFirebird-Treiber
MongoDBMongoDB-Client

Dateioperationen (Metadaten) ​

FunktionBeschreibung
opendir() / readdir() / closedir()Verzeichnisdurchlauf
unlink() / rename()Datei löschen und umbenennen
mkdir() / rmdir()Verzeichnis erstellen und entfernen
stat() / lstat()Dateiinformationen
readlink()Symbolische Links lesen

Hinweis: Datei-Metadatenoperationen auf lokalen Festplatten werden in Mikrosekunden abgeschlossen. Ihre Asynchronität ist nur bei Netzwerkdateisystemen (NFS) sinnvoll.


Wie geht es weiter? ​