Le funzioni di stream in PHP offrono un'interfaccia potente e flessibile per lavorare con risorse come file, socket, URL e altri flussi di dati. PHP consente di trattare queste risorse in modo uniforme, facilitando la lettura e la scrittura di dati da fonti diverse.
Cos'è uno stream?
Uno stream è una risorsa che consente di leggere o scrivere una sequenza di dati, potenzialmente senza conoscere la loro dimensione finale. Gli stream possono essere applicati a file locali, connessioni di rete, input/output della console, compressione e molto altro.
Funzioni fondamentali
Le principali funzioni utilizzate con gli stream includono:
fopen()
: apre un file o URL come stream.fread()
efwrite()
: leggono e scrivono dati da/verso uno stream.fclose()
: chiude uno stream.stream_get_contents()
: legge il contenuto rimanente di uno stream.stream_context_create()
: crea un contesto per personalizzare le opzioni degli stream.
Esempio: Lettura da un file
$handle = fopen("file.txt", "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {
echo $line;
}
fclose($handle);
} else {
echo "Errore nell'apertura del file.";
}
Utilizzo di contesti di stream
I contesti consentono di definire opzioni specifiche per lo stream. Ad esempio, è possibile impostare header personalizzati per una richiesta HTTP:
$options = [
"http" => [
"header" => "User-Agent: CustomAgent/1.0\r\n"
]
];
$context = stream_context_create($options);
$content = file_get_contents("http://example.com", false, $context);
echo $content;
Streams wrappers
PHP supporta diversi wrapper di stream che permettono di utilizzare protocolli differenti con le stesse funzioni. Alcuni wrapper comuni sono:
file://
per file localihttp://
ehttps://
per accesso a risorse webphp://
per flussi di input/output standardftp://
per connessioni FTP
Conclusione
Le funzioni di stream in PHP offrono una base solida per la manipolazione di dati provenienti da varie fonti. Comprendere come utilizzare gli stream e i relativi contesti è essenziale per sviluppare applicazioni robuste, scalabili e sicure.