stream_is_local în PHP

Stream-uri PHP 5.2.4+

Verifică dacă un stream sau o adresă este locală (fișier, memorie) sau la distanță (http, ftp).

Sintaxă
stream_is_local($stream): bool

Ce face stream_is_local

stream_is_local primește un stream deschis sau o adresă ca text. Returnează true pentru fișiere, php://memory, socket-uri locale, și false pentru wrapperele de rețea precum http:// și ftp://.

Este utilă când primești o cale de la utilizator și vrei să refuzi adresele web, de exemplu ca serverul să nu poată fi folosit pentru cereri către alte site-uri.

Parametri

Parametru Descriere
$stream Un stream deschis sau o adresă (text).

Ce returnează

true dacă este local, false dacă este la distanță.

Exemple

Exemplul 1: Stream-uri și adrese

<?php
$f = fopen("nota.txt", "w");

var_dump(stream_is_local($f));
var_dump(stream_is_local(fopen("php://memory", "r")));
var_dump(stream_is_local("poze/vacanta.jpg"));
var_dump(stream_is_local("https://www.exemplu.ro/poza.jpg"));

Rezultat

bool(true)
bool(true)
bool(true)
bool(false)

Exemplul 2: Refuză adresele web

<?php
function citeste_sablon(string $cale): string
{
    if (!stream_is_local($cale)) {
        return "Refuzat: $cale";
    }
    return "Citesc $cale";
}

echo citeste_sablon("sabloane/factura.html") . "\n";
echo citeste_sablon("http://atacator.exemplu/cod.php") . "\n";

Rezultat

Citesc sabloane/factura.html
Refuzat: http://atacator.exemplu/cod.php

Greșeli frecvente

  • Consideri că o cale locală este automat sigură. stream_is_local nu oprește ../. Verifică și calea cu realpath.

Comenzi înrudite

  • stream_get_wrappers: Returnează lista protocoalelor pe care funcțiile de fișier le înțeleg (file, http, https, php, data, phar…).
  • realpath: Transformă o cale relativă într-o cale absolută, fără ../ și fără scurtături.
  • fopen / fclose: Deschide un fișier pentru citire sau scriere și returnează o resursă; fclose îl închide.