Nette Documentation Preview

syntax
SafeStream: Siguranță pentru fișiere
************************************

.[perex]
Nette SafeStream garantează că fiecare citire și scriere într-un fișier este izolată. Aceasta înseamnă că niciun fir de execuție nu va începe să citească un fișier care nu este încă complet scris sau că mai multe fire de execuție nu vor suprascrie același fișier.

Instalare:

```shell
composer require nette/safe-stream
```


La ce este bun? .[#toc-what-is-it-good-for]
-------------------------------------------

La ce sunt bune, de fapt, operațiile izolate? Să începem cu un exemplu simplu care scrie în mod repetat într-un fișier și apoi citește același șir de caractere din el:

```php
$s = str_repeat('Long String', 10000);

$counter = 1000;
while ($counter--) {
	file_put_contents('file', $s); // scrieți-o
	$readed = file_get_contents('file'); // o citește
	if ($s !== $readed) { // o verifică
		echo 'strings are different!';
	}
}
```

Se poate părea că `echo 'strings differ!'` nu poate apărea niciodată. Dimpotrivă, este adevărat contrariul. Încercați să rulați acest script în două file de browser în același timp. Eroarea va apărea aproape imediat.

Una dintre file va citi fișierul într-un moment în care cealaltă nu a apucat să îl scrie în întregime, astfel încât conținutul nu va fi complet.

Prin urmare, codul nu este sigur dacă este executat de mai multe ori în același timp (adică în mai multe fire de execuție). Ceea ce nu este neobișnuit pe internet, de multe ori un server răspunde la un număr mare de utilizatori în același timp. Așadar, este foarte important să vă asigurați că aplicația dumneavoastră funcționează în mod fiabil chiar și atunci când este executată în mai multe fire de execuție (thread-safe). În caz contrar, se vor pierde date și vor apărea erori greu de detectat.

Dar, după cum puteți vedea, funcțiile native de citire și scriere a fișierelor din PHP nu sunt izolate și atomice.


Cum se utilizează SafeStream? .[#toc-how-to-use-safestream]
-----------------------------------------------------------

SafeStream creează un protocol securizat pentru citirea și scrierea fișierelor în mod izolat, utilizând funcții PHP standard. Tot ce trebuie să faceți este să specificați `nette.safe://` înaintea numelui de fișier:

```php
file_put_contents('nette.safe://file', $s);
$s = file_get_contents('nette.safe://file');
```

SafeStream se asigură că cel mult un singur fir de execuție poate scrie în fișier la un moment dat. Celelalte fire așteaptă în coadă. Dacă niciun fir nu scrie, orice număr de fire poate citi fișierul în paralel.

Toate funcțiile obișnuite ale PHP pot fi utilizate cu acest protocol, de exemplu:

```php
// 'r' înseamnă deschis numai pentru citire
$handle = fopen('nette.safe://file.txt', 'r');

$ini = parse_ini_file('nette.safe://translations.neon');
```

{{leftbar: nette:@menu-topics}}

SafeStream: Siguranță pentru fișiere

Nette SafeStream garantează că fiecare citire și scriere într-un fișier este izolată. Aceasta înseamnă că niciun fir de execuție nu va începe să citească un fișier care nu este încă complet scris sau că mai multe fire de execuție nu vor suprascrie același fișier.

Instalare:

composer require nette/safe-stream

La ce este bun?

La ce sunt bune, de fapt, operațiile izolate? Să începem cu un exemplu simplu care scrie în mod repetat într-un fișier și apoi citește același șir de caractere din el:

$s = str_repeat('Long String', 10000);

$counter = 1000;
while ($counter--) {
	file_put_contents('file', $s); // scrieți-o
	$readed = file_get_contents('file'); // o citește
	if ($s !== $readed) { // o verifică
		echo 'strings are different!';
	}
}

Se poate părea că echo 'strings differ!' nu poate apărea niciodată. Dimpotrivă, este adevărat contrariul. Încercați să rulați acest script în două file de browser în același timp. Eroarea va apărea aproape imediat.

Una dintre file va citi fișierul într-un moment în care cealaltă nu a apucat să îl scrie în întregime, astfel încât conținutul nu va fi complet.

Prin urmare, codul nu este sigur dacă este executat de mai multe ori în același timp (adică în mai multe fire de execuție). Ceea ce nu este neobișnuit pe internet, de multe ori un server răspunde la un număr mare de utilizatori în același timp. Așadar, este foarte important să vă asigurați că aplicația dumneavoastră funcționează în mod fiabil chiar și atunci când este executată în mai multe fire de execuție (thread-safe). În caz contrar, se vor pierde date și vor apărea erori greu de detectat.

Dar, după cum puteți vedea, funcțiile native de citire și scriere a fișierelor din PHP nu sunt izolate și atomice.

Cum se utilizează SafeStream?

SafeStream creează un protocol securizat pentru citirea și scrierea fișierelor în mod izolat, utilizând funcții PHP standard. Tot ce trebuie să faceți este să specificați nette.safe:// înaintea numelui de fișier:

file_put_contents('nette.safe://file', $s);
$s = file_get_contents('nette.safe://file');

SafeStream se asigură că cel mult un singur fir de execuție poate scrie în fișier la un moment dat. Celelalte fire așteaptă în coadă. Dacă niciun fir nu scrie, orice număr de fire poate citi fișierul în paralel.

Toate funcțiile obișnuite ale PHP pot fi utilizate cu acest protocol, de exemplu:

// 'r' înseamnă deschis numai pentru citire
$handle = fopen('nette.safe://file.txt', 'r');

$ini = parse_ini_file('nette.safe://translations.neon');