Curs Php-mysql

1. Obtinerea accesului exclusiv la un fisier

Web-ul ridica o problema speciala pentru dezvoltatorii de programe, deoarece mai multi utilizatori pot avea acces simultan la un singur script PHP. Uneori, accesul simultan poate avea ca rezultat date incorecte. Pentru a vedea cum se poate produce aceasta, sa luam în considerare urmatorul script, care reprezinta un contor pentru numarul de deschideri a unei pagini.

<?php
$contor = "ctr.txt";
$fh = @fopen($contor, "r+b");
if (!$fh) {
      echo "Nu a fost deschis fisierul ctr.txt.";
}
else {
      $s = fgets($fh, 7);
      $count = (int) $s;
      $count = $count + 1;
      rewind($fh);
      fwrite($fh, $count);
      echo "<br /> Nr. vizitari: $count";
      fclose($fh);
}
?>
Remarcati functiile pe care le foloseste scriptul pentru a executa operatiile cu fisiere. Programul deschide fisierul "ctr.txt" pentru citire si scriere, preia datele din acesta, care sunt un numar intreg, mareste acel numar cu o unitate, intoarce pointerul la inceputul fisierului "rewind" dupa care rescrie noul numar, afiseaza numarul si inchide fisierul.
Secventa de cod descrisa mai sus poate creea probleme in cazul in care, de exemplu doi utilizatori diferiti acceseaza acelasi fisier, in acelasi timp, cand contoarul este, de exemplu, la numarul 100. Amandoi vor incrementa numarul 100 cu o unitate si va rescrie in fisierul "ctr.txt" 101; in final, contoarul va arata 101, in loc de 102 cum ar fi trebuit (deoarece au fost 2 vizitatori).
Pentru a evita astfel de conflicte PHP pune la dispozitia utilizatorilor o metoda prin care se poate bloca accesul temporar la un fisier. Pe durata blocarii, un alt utilizator nu va mai putea scrie/citi din acest fisier. De aceea durata blocarii trebuie sa fie limitata.
Functia care realizeaza blocarea este flock(), care are urmatoarea forma: - Unde "identificator_fisier" este identificatorul de fisier returnat de functia fopen(). Argumentul "operatie" este o constanta sau o expresie care poate avea urmatoarele valori:

Iata cum se foloseste procesul de blocare, vom folosi acelasi exemplu, contoarul de mai sus, de data aceasta imbunatatit.

<?php
$contor = "ctr.txt";
$fh = @fopen($contor, "r+b");
if (!$fh) {
      echo "Nu a fost deschis fisierul ctr.txt.";
}
else {
      flock($fh, LOCK_EX);
      $s = fgets($fh, 7);
      $count = (int) $s;
      $count = $count + 1;
      rewind($fh);
      fwrite($fh, $count);
      flock($fh, LOCK_UN);
      echo "<br /> Nr. vizitari: $count"
      fclose($fh);
}
?>
- De data aceasta scriptul blocheaza fisierul "ctr.txt" pe timpul citirii si scrierii acestuia, astfel încât accesul simultan sa nu cauzeze o numarare eronata.
Blocare se face imediat dupa ce a fost deschis fisierul, cu "LOCK_EX", si se incheie imediat dupa rescrierea in fisier, prin deblocare acestuia "LOCK_UN".

2. Copierea unui fisier

O functie care faciliteaza copierea fisierelor, este copy(). Functia copy() are urmatoarea forma:
                copy (sursa, destinatiea)
Unde "sursa" este numele si calea fisierului care urmeaza a fi copiat, iar "destinatie" este numele sau calea copiei.
Functia returneaza TRUE daca operatia de copiere reuseste; în caz contrar, returneaza FALSE.
Iata un exemplu în care este prezentat modul de utilizare a functiei copy():

<?php
$ok = copy("test.txt", "test.txt.bak");
if (!$ok) {
      echo "Copierea nu a reusit.";
}
?>
Exemplul creeaza o copie a fisierului "test.txt", cu numele "test.txt.bak", in acelasi director.
Functia copy() va suprascrie fisierul destinatie, daca acesta exista.

3. Modificarea numelui unui fisier

Functia care va permite sa modificati numele unui fisier este rename(), aceasta care are urmatoarea forma:
                rename(nume_vechi, nume_nou)
Unde "nume_vechi" este numele si calea originala a fisierului, iar "nume_nou" este numele dorit.
Functia returneaza TRUE daca operatia de modificare a numelui a reusit; în caz contrar, returneaza FALSE.
Iata un exemplu de utilizare a functiei rename():

<?php
$ok = rename("test.txt", "teste.dat");
if (!$ok) {
      echo "Modificarea numelui nu a reusit.";
}
?>
- Exemplu modifica numele fisierului "test.txt" in "teste.dat".

4. Stergerea unui fisier

Functia care va permite sa stergeti un fisier este unlink(), aceasta care are urmatoarea forma:
                unlink(nume_fisier)
Unde "nume_fisier" este numele si calea fisierului care va fi sters.
Functia returneaza TRUE daca operatia de stergere a reusit; în caz contrar, returneaza FALSE.
Iata un exemplu de utilizare a functiei unlink():

<?php
$ok = unlink("test.txt");
if (!$ok) {
      echo "Stergerea fisierului nu a reusit.";
}
?>
- Exemplu sterge fisierului "test.txt".

Retineti ca PHP trebuie sa aiba acces de scriere la catalogul în care se vor executa operatiile de copiere, redenumire sau stergere; în caz contrar, PHP nu va putea executa aceste operatii.

5. Incarcarea unui fisier in server

Pentru incarcarea unui fisier in server, se folosesc formulare HTML impreuna cu un script PHP de incarcare care foloseste functia move_uploaded_file() pentru operatia de upload.
Pentru a crea un formular de încarcare, specificati ENCTYPE="multipart/form-data" în eticheta FORM si includeti un control de introducere a datelor cu atributul TYPE="FILE".
Iata un exemplu de script PHP si formular HTML care incarca fisierele in server:

<?php
if(isset($_POST['submit'])) {
$uploadpath = "upload/";       // Modifica aici directorul de upload
$uploadpath = $uploadpath . basename( $_FILES['fisier']['name']);
if(move_uploaded_file($_FILES['fisier']['tmp_name'], $uploadpath)) {
      echo"Fisier: ". basename( $_FILES['fisier']['name']). " a fost incarcat";
}
else {
      echo "Eroare la urcarea fisierului pe server, mai incerca o data!";
}
}
?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
Alege fisierul:
<input type="file" name="fisier" /> <br />
<input type="submit" name='submit' value="Trimite" />
</form>
- Când utilizatorul apasa pe butonul de "Trimite", scriptul PHP preia datele si va incarca fisierul dorit in server

- O lista cu mai multe functii utile in lucrul cu fisiere gasiti la pagina -> Functii pentru fisiere si directoare.

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag defineste zona de click intr-o harta creata dintr-o imagine?
<map> <img> <area>
<img src="image.jpg" usemap="#map1">
<map name="map1">
  <area shape="rect" coords="9, 120, 56, 149" href="#">
  <area shape="rect" coords="100, 200, 156, 249" href="#">
</map>
Ce proprietate CSS indica ce sa se intample cand continutul unui element depaseste dimensiunile lui?
display overflow position
#id {
  overflow: auto;
}
Clic pe evenimentul care este declansat cand mouse-ul e deasupra unui obiect.
onclick onmouseover onmouseout
document.getElementById("id").onmouseover = function(){
  document.write("Sa ai Viata Buna");
}
Indicati variabila PHP ce contine datele adaugate in adresa URL, dupa caracterul "?".
$_SESSION $_GET $_POST
if(isset($_GET["id"])) {
  echo $_GET["id"];
}
Clic pe pronumele reflexiv care e potrivit in propozitia: "Marc is the boy ... won the prize".
who which whoever
Marc is the boy who won the prize.
- Marc e baiatul care a castigat premiul.
Clic pe pronumele reflexiv care e potrivit in propozitia: "Voy a ver al pintor de ... les hablé ayer".
que quien cuyo
Voy a ver al pintor de quien les hablé ayer.
- Ma duc sa vad pictorul despre care ti-am vorbit ieri.
Lucrul cu fisiere 3

Last accessed pages

  1. Laravel - Instalare (2236)
  2. Prezentul simplu - Exercitii si teste incepatori (66076)
  3. Coduri pt culori (65207)
  4. Efect zbor fluturi (577)
  5. Creare link-uri (18522)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (622)
  2. Conditional IF in Limba Engleza - Fraze Conditionale (538)
  3. Gramatica limbii engleze - Prezentare Generala (439)
  4. Exercitii engleza - English Tests and exercises - Grammar (379)
  5. Coduri pt culori (363)