php - pre začiatočníkov

Vytlač príspevok
Odporuč príspevok
Bookmark and Share PRIDAŤ NA VYBRALI.SME.SK

PHP Manuál : 8. Práca so súbormi

Mazať, meniť, nahrávať ...
Navigácia
  1. Otváranie a zatváranie súborov
    1.1 FOpen
    1.2 Funkcia File_Exists
    1.3 FClose

  2. Čítanie a zápis do súborov
    2.1 FRead
    2.2 Funkcia FileSize
    2.3 FWrite
    2.4 Funkcia File
    2.5 Funkcie FGets a FEof

  3. Upload súborov na server

OTVÁRANIE A ZATVÁRANIE SÚBOROV

Na to aby sme mohli pracovať so súborom(i) , ho(ich) potrebujeme otvoriť. Analogicky po práci s nimi ich potrebujeme zavrieť. Na otváranie súborov sa v PHP používa príkaz :

FOPEN
Jeho syntax je nasledovná :
fopen("cesta_a_nazov_suboru","mod");

Obidva parametere sú povinné:
"cesta_a_nazov_suboru" - je cesta k suboru s absolútne zadanou cestou cez protokol HTTP/FTP. Pokiaľ je skript a otváraný súbor v tom istom adresári stačí zadať názov súboru.
"mod" - je mód v akom sa súbor otvorí. Zoznam módov s popisom :
  • "r" - otvorí súbor len na čítanie. Začne čítať na začiatku súboru.
  • "r+" - otvorí súbor pre čítanie a zápis. Začne čítať/zapisovať na začiatku súboru.
  • "w" -  otvorí  súbor len pre zápis. Ak súbor existuje otvorí sa a vymaže celý obsah. Ak neexistuje, vytvorí sa.
  • "w+" - otvorí súbor pre čítanie a zápis. Ak existuje otvorí a vymaže celý obsah. Ak neexistuje, vytvorí sa.
  • "a" - otvorí súbor pre pridávanie. Ak existuje otvorí sa a pridá obsah ku koncu súboru. Ak neexistuje, vytvorí sa.
  • "a+" - otvorí súbor pre zápis a pridávanie. Ak existuje otvorí sa , zachová sa obsah a zapisuje na koniec súboru.
  • "x" - zápis. Vytvorí nový súbor , ak existuje vráti false.
  • "x+" - čítanie a zápis. Vytvorí nový súbor, ak existuje vráti false.
fopen pri chybe vracia hodnotu "0" - false.
Použitie parametra exit:
Toto zadanie vygeneruje chybovú hlášku a pripojí text zadaný za parametrom exit v prípade ,že fopen vráti false.
Otváraný súbor ukladáme do premennej.
$subor = fopen("skuska.txt","r") or exit ("Súbor neexistuje !");

Ak chceme použiť iný spôsob ako ošetriť skript ,aby neotváral neexistujúce súbory , existuje funkcia :

File_Exists()

Syntax : File_Exists("nazov_suboru");
Príklad :
if(File_Exists("skuska.txt") {
$subor = fopen("skuska.txt","r");
}
else {
echo "Súbor neexistuje !";
}


Užitočnou funkciou je:

Po ukončení práce so súborom ho uzavrieme príkazom :

FCLOSE

tento príkaz má jediný parameter a jeho syntax je :
fclose("premenna_s_obsahom_suboru");

Príklad :
$subor = fopen("skuska.txt","r+");
.. práca so súborom ..
fclose("$subor");


ČÍTANIE A ZÁPIS DO SÚBOROV

Pre čítanie dát zo súboru používame príkaz :

FREAD
Jeho syntax je nasledovná :
fread($subor,"velkost");

Obidva parametre sú povinné.
"$subor" - je premenná v ktorej je otvorený súbor pomocou funkcie fopen.
"velkost" - je veľkosť v bajtoch ,ktorá sa má načítať

V prípade ,že chceme načítať celý súbor ,nebudeme určovať jeho dĺžku v bajtoch (čo je navyše nemožné ak sa súbor dynamicky mení) , ale použijeme funkciu :

FileSize
Syntax :
FileSize("subor");

Príklad:
$subor = fopen("skuskat.txt","w");
fread($subor,filesize("skuska.txt"));
fclose($subor);


Pre zápis dát do súboru použijeme príkaz :

FWRITE
Syntax :
fwrite("$subor","retazec","velkost");

Parameter "dlzka" je nepovinný , ostatné áno.
"$subor" - je premenná v ktorej je otvorený súbor pomocou funkcie fopen.
"retazec" - je reťazec ,ktorý predstavuje dáta ,ktoré chceme do otvoreného súboru vložiť
"velkost" - určuje veľkosť v bajtoch ,ktorá sa má zapísať

Príklad :
$subor = fopen("skuska.txt","w");
fwrite($subor,"Hello World !"); //zapíše hello world do súboru skuska.txt
fclose($subor);


Celkom užitočná funkcia je :

File
,ktorá načíta obsah súboru do poľa , kde indexom poľa sú jednotlivé riadky súboru. Jej jediným parametrom je názov súboru.
Syntax :
File("skuska.txt")
Táto funkcia bude použitá v nasledujúcom príklade.

FGets a FEof
funkcie fgets() a feof() majú jediný parameter a to premennú v ktorej je otvorený súbor.
fgets($subor)
feof($subor)


funkcia fgets načíta obsah súboru po jednotl. riadkoch
funkcia feof určuje koniec súboru, resp. posl. zápis. EOF = End Of File
Ich použitie bude demonštrované v nasledujúcom príklade :

Príklad 21

<?

$subor = fopen("skuska.txt","w");
fwrite($subor,"Prvy riadok \nDruhy riadok \nTreti riadok"); //použitie escape sekvencie n pre nový riadok
fclose($subor);

Vysvetlenie :
Otvoríme súbor skuska.txt (ak neexistuje vytvorí sa nový) pre zápis do premennej $subor.
Zapíšeme do neho (za pomoci escape sekvencie \n) tri riadky.
Zavrieme súbor.

$subor = fopen("skuska.txt","r");
$data = fread($subor,filesize("skuska.txt"));
echo $data;
fclose($subor);

Vysvetlenie :
Otvoríme súbor skuska.txt len pre čítanie do premennej $subor.
Do premennej $data načítame obsah celého súboru pomocou funkcie filesize.
Vypíšeme obsah súboru.

$subor = fopen("skuska.txt","r");
while(!feof($subor)) {
echo fgets($subor)."<br />";
}
fclose($subor);

Vysvetlenie :
Otvoríme súbor skuska.txt len pre čítanie do premennej $subor.
Pomocou cyklu while  budeme vypisovať (fgets) obsah otvoreného súboru po jednotl. riadkoch  pokiaľ sa nenarazí na koniec súboru (feof).

$subor = File("skuska.txt");
for ($i=0; $i < Count($subor); $i++){
echo "Index poľa $i : ".$subor[$i]."<br />";
}

Vysvetlenie :
Pomocou funkcie File načítame do premennej $subor pole kde indexom budú jednotl. riadky v súbore skuska.txt.
Pomocou cyklusu for a funkcie count budeme vypisovať jednotlivé indexy tohto poľa dovtedy pokiaľ nenarazíme na koniec súboru.


UPLOAD SÚBOROV NA SERVER

Ako sme si spomenuli v článku o superglobálnych premenných , pre nahrávanie súborov na server použijeme pole $FILES. Zopakujeme si syntax :
$FILES["file"]["meno"]["dalsie parametre"] ... , kde zoznam parametrov je nasledovný :
  • "file" - názov elementu použitého vo formulári (id , name)
  • "name" - meno súboru
  • "typ" - typ súboru podľa špecifikácie MIME
  • "size" - veľkosť súboru v bajtoch
  • "tmp_name" - dočasný názov súboru pod ktorým bol uložený na serveri
  • "error" - chyba vygenerovaná ,počas nahrávania súboru na server
$FILES nám nahaje súbor na server pod dočasným názvom a na jeho uloženie použijeme funkciu move_uploaded_files().
Problematiku uploadu súborov nám objasní nasledujúci príklad :
Príklad 22
upload_form.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <title>Príklad č. 22 - Upload súborov na server , http://php.blog.sk</title>
  </head>
  <body>
<form action="nahraj_subor.php" method="post" enctype="multipart/form-data">
<p>Súbor:</p> <input type="file" name="file" id="file">
<input type="submit" value="Nahraj">
</form>
  </body>
</html>


nahraj_subor.php
<?php

if ($_FILES["file"]["error"] > 0) {
echo "Vyskytla sa chyba :".$_FILES["file"]["error"]." !";
}
else {
echo "Nahraný súbor :".$_FILES["file"]["name"]."<br />";
echo "Typ súboru :".$_FILES["file"]["type"]."<br />";
echo "Veľkosť súboru :".($_FILES["file"]["size"] / 1024)." Kb <br />";
echo "Dočasný názov súboru :".$_FILES["file"]["tmp_name"]."<br />";

move_uploaded_file($_FILES["file"]["tmp_name"],"upload/".$_FILES["file"]["name"]);
echo "Súbor je umiestnený :"."upload/".$_FILES["file"]["name"];

?>


Myslím ,že tento príklad dostatočne demonštruje použitie $_FILES. Upozorňujem , že tento príklad nie je vhodný pre praktické použitie ,pretože neobsahuje (napr.) kontrolu typu vkladaného súboru ,alebo kontrolu či uploadovaný súbor už neexistuje na serveri.
Ale ak ste čítali predošlé články mali by ste si to vedieť bez problémov upraviť.
Ďalej chcem upozorniť ,že funkcie pre prácu so súbormi sú zavislé od nastavenia web servera , resp. atribútov. (či je povolený zápis do adresára "upload" ,alebo či je možné zapisovať / vytvárať súbory).Napríklad v prípade ,že budete chcieť zapisovať do adresára ,ktorý nemá právo pre zápis , PHP vygeneruje chybu.


Články

Predošlý článok : 7. Formuláre a superglobálne premenné
Nasledujúci článok : 8. Cookies



Odkazy
Stiahnite si príklady vypracované v článku


php | stály odkaz

Komentáre

  1. sdadsdsa
    dasd sad sad asd sd asd assdasds
    publikované: 07.07.2010 16:25:15 | autor: asdasd (e-mail, web, neautorizovaný)
Pozor, na konci je potreba spočítať neľahkú matematickú úlohu! Inak komentár nevložíme. Pre tých lenivejších je tam tlačidlo kúzlo.



Prevádzkované na CMS TeaGuru spoločnosti Singularity, s.r.o., © 2004-2014