PHP istifadə edərək faylları necə düzgün oxumaq olar. Fayl sistemi ilə işləmək php-də fayllarla işləmək tapşırıqları

Hansı ki, bəzi məlumatlar fayllara yazılacaq. Məsələn, müxtəlif hesabatlar, üzləşdirmələr və s. Bu rahatdır, çünki... Onlayn mağaza idarəetmə sisteminiz üçün parolları həmişə özünüzlə aparmaq məcburiyyətində deyilsiniz, ancaq sadəcə mətn faylını flash sürücüyə ata bilərsiniz.

Faylları yazmaq və oxumaq üçün fopen funksiyası var, buna misal ilə baxaq.

Fayla yazın

$handle = fopen("1.txt", "w");

Burada faylı açırıq, "w" parametri faylın yazıla biləcəyini söyləyir. Faylın resurs identifikatorunu onunla sonrakı iş (məsələn, yazmaq və ya oxumaq) üçün $handle dəyişəninə yazırıq.

"w" ilə yanaşı php-də aşağıdakı parametrlər var:

r- oxumaq

w- qeyd, əgər fayl yoxdursa, o yaradılır, əgər varsa, onda olan bütün məlumatlar silinir.

a- əlavə qeyd, əgər fayl yoxdursa, o zaman yaradılır, fayl varsa, məlumat sona qədər yazılır.

Fayldan oxumaq

Faylın əlavə edilməsi

Funksiya fayl ölçüsü("1.txt")— fayldakı simvolların sayını hesablayırıq, yəni faylı tam oxuyuruq.
Əvəzində qeyd etsəniz fayl ölçüsü("1.txt")- rəqəm 10, sonra ilk 10 simvol oxunacaq

Massivin fayla yazılması

Bəzən fayla sətir deyil, massiv yazmaq lazımdır. Bu məqsədlər üçün serialize/serializasiya funksiyası mövcuddur.

Serializasiya funksiyası massivi fayla yaza biləcəyimiz sətirə çevirir. Seriyadan çıxarma funksiyası əks əməliyyatı yerinə yetirir, sətri massivə çevirir.
Budur bir nümunə:

Çox vaxt insanlar bəzi məlumatların fayllarda qeyd olunacağı bir onlayn mağaza sifariş etmək istəyirlər. Məsələn, müxtəlif hesabatlar, üzləşdirmələr və s. Bu rahatdır, çünki... Onlayn mağaza idarəetmə sisteminiz üçün parolları həmişə özünüzlə aparmaq məcburiyyətində deyilsiniz, ancaq sadəcə mətn faylını flash sürücüyə ata bilərsiniz.

OX2 2014-10-03 2014-03-10

Əgər siz PHP ilə təkbaşına işləməyi öyrənirsinizsə, o zaman fayldan verilənləri oxumağı və ona dəyişikliklər etməyi öyrənmək vacibdir. php faylında qeyd veb proqramların hazırlanması, server məlumatlarının dəyişdirilməsi və xarici proqramların və daxiletmələrin işə salınması üçün həyata keçirilir.

php faylları ilə necə işləmək olar

Əgər faylda belə genişlənmə varsa, bu o deməkdir ki, o, eyni adlı proqramlaşdırma dilində yazılmış proqram kodunu ehtiva edir. Dəyişikliklər etmək üçün kompüterinizdə proqram redaktorlarından birini quraşdırmalısınız:

PHP Ekspert Redaktoru;
. Dreamweaver;
. Eclipse PHP İnkişafı;
. PHPEdit.

Əgər siz vebsayt yaradırsınızsa, onda siz tez-tez başqa faylda şablon kimi saxlanılan eyni dizaynlardan istifadə etməlisiniz. Bunun üçün daxildən istifadə etmək daha yaxşıdır. Bu funksiyanı daxil etdikdən sonra php faylına qoşulma adını və uzantısını yazmalısınız, məsələn, 1.php daxil edin. Bu dizayn daxil edilmiş faylın çoxsaylı oxunuşlarını dəstəkləyir və əlavə xüsusiyyət xəta baş verdikdə kodun icrasının davamlılığıdır. Əgər bir şey səhv olarsa, kod yeni sətirdən icra olunmağa davam edəcək.
Beləliklə, faylı kodunuza daxil edəcəksiniz. Başqa bir yol tələb daxil etməkdir. Yuxarıda təsvir edilən daxiletmədən fərqli olaraq, fayl proqram kodu icra etməyə başlamazdan əvvəl daxil edilir, lakin siz ona yalnız bir dəfə daxil ola bilərsiniz.

Fayl yoxlanışı

php faylına yazmazdan əvvəl onun mövcud olduğundan əmin olmalı, sonra onu açıb lazımi redaktəni etməlisiniz. Bunun üçün file_exists() funksiyasından istifadə edə bilərsiniz, əgər o, mövcudluğu təsdiq edirsə, o zaman redaktor pəncərəsində TRUE cavabı qaytarılacaq, əks halda - FALSE.
Başqa bir funksiya is_file() php faylına məlumat yazmağın mümkün olduğunu bildirə bilər. O, file_exits-dən daha etibarlıdır və əksər proqramçılar işə başlamaq üçün is_file istifadə edirlər. Faylın mövcud olduğunu təsdiqlədikdən sonra onunla işləməyə başlaya bilərsiniz.

Fayla dəyişikliklərin edilməsi

Faylda dəyişiklik etmək üçün istifadə edə biləcəyiniz ilk alət fwrite()-dir. Aşağıdakı sintaksislə sətirlər yazır:

Int - manipulyator;
. String dəyişəndir.

Buna bənzər başqa bir funksiya da var - fputs(), ləqəbdir. Bu alətlər arasında heç bir fərq yoxdur, siz birini və ya digərini seçə bilərsiniz. Tələbələr üçün fwrite daha çox yayılmışdır, praktiki proqramçılar isə ən çox fputlardan istifadə edirlər.

Mətn faylına PHP girişi etmək üçün bir vacib şərt yerinə yetirilməlidir - o, redaktə üçün açıq olmalıdır. Belə bir fayl yazma icazəsi olan bir qovluqda yerləşməlidir.

İşləmək üçün əvvəlcə proqramda mətn sənədini açmağa, sonra isə adi alətlərdən istifadə edərək redaktə etməyə çalışın.

// Mətn faylını açın
$f = fopen("text.txt", "w");
// Mətn sətirini yazın
fwrite($f, "Salam! Gününüz xeyir!");
// Mətn faylını bağlayın
fclose($f);

Bu nümunədə text.txt sənəd adıdır. Siz onu fərqli adlandıra bilərsiniz: “Salam! Yaxşı gün! - mətn nümunəsi, tamamilə ixtiyari ola bilər. Bütün dəyişikliklər avtomatik olaraq açıq faylda saxlanılır.

Qeyd edək ki, PHP ümumi məqsəddir. Veb proqramları yaratmaq üçün intensiv şəkildə istifadə olunur. Bu həll əksər hosting provayderləri tərəfindən dəstəklənir. Söhbət veb-saytların yaradılmasında istifadə olunan alətlər arasında liderdən gedir. İndi bir php faylına necə yazacağınızı bilirsiniz.

PHP-də siz tez-tez fayl yaratmaqla məşğul olursunuz... çox sadədir: diskdə heç bir fayl yoxdur, kod işə salınıb və fayl ortaya çıxdı, onda siz bu faylı başqa dəyişənə və ya hətta istənilən səhifəyə oxuya bilərsiniz. İnternet və sonra orada nəsə yazın... lakin bunun üçün xüsusi funksiyaları bilməlisən... bu barədə ətraflı bu məqalədə...

PHP-də icra olunan skriptdə fayl yaratmaq üçün sadəcə bir neçə funksiyanı qeyd etməlisiniz:

Bir nümunəyə nəzər salaq:

$text = "Faya yazmaq üçün bəzi mətn";
$fp = fopen("file.txt", "w");
fwrite($fp, $mətn);
fclose($fp);
?>

Burada bilməlisən:

fopen()- funksiya faylı oxumaq və ya yazmaq və dəqiqləşdirmələr üçün açır;

Bu aydınlaşdırma (fopen funksiyasının rejim parametri) çox vacibdir:

  • "r" - php-də fayl açın Yalnız oxumaq üçün. Kursor başlanğıcda yerləşdirilir.
  • "r+" - php-də fayl açın oxumaq və yazmaq üçün. Kursor başlanğıcda yerləşdirilir. !!! - bu iki r və r+ rejimi ilə fayllar artıq yaradılmalıdır (əks halda xəta görünəcək Xəbərdarlıq: fopen(file.txt): axını aça bilmədi: Belə bir fayl və ya qovluq yoxdur...) və yalnız oxuyuruq və ya əlavə etmək imkanımız var.
  • "w" - fayl YALNIZ yazmaq üçün açılır. Faylın uzunluğu sıfıra qədər kəsilir - yəni üzərinə yazılır. Lazım olan yazılır və Kursor başlanğıcda yerləşdirilir.
  • "w+" - yazmaq və oxumaq üçün faylı açır! Qalanları "w" rejimində olduğu kimidir. !!! - bu iki rejimdə - fayl yaradılmayıbsa - ONU YARATMAQ ÜÇÜN CƏYYƏT EDİLƏCƏK!
  • "a" - faylı YALNIZ yazmaq üçün açın. "w" dən fərqli olaraq bu seçim faylın məzmununun üzərinə yazmır, kursoru sətrin sonuna yerləşdirir və əlavə etmək istədiyimiz məzmunu sonuna əlavə edir.
  • "a+" - faylı yazmaq və oxumaq üçün açın.

yaz($fp, $text) - PHP-də fayla yazmaq üçün funksiya - yəni $text dəyişənində olanlar $fp dəyişənində olan fayla yazılır;

fclose($fp) - $fp dəyişəninə yazdığımız faylı bağlamaq funksiyası;

İndi siz asanlıqla php-də faylları düzgün yarada, onları oxumaq və redaktə etmək üçün aça bilərsiniz.

Açıq faylla işləmək üçün faydalı PHP əlavələri və funksiyaları:

while(!feof($fp))(
$mytext = fgets($fp, 99);
echo $mytext."
";
}

burada şərt yerinə yetirilir - "faylın sonuna çatana qədər bunu edin" while(!feof($fp))

1. Funksiya fgets($fp, 99) - bütün məzmunu 99 bayt və daha sonra bölmələrə bölməyə imkan verir, bunu daha aydın görmək üçün biz bir etiket yerləşdiririk

Bu sətir funksiyası fgets(resurs sapı [, int uzunluğu]) defolt olaraq uzunluq parametri kimi 1024 baytı (1 kilobayt) qəbul edir, göstərilməsə belə olacaq. Bu parametr PHP 4.2.0-dan etibarən isteğe bağlıdır (səhv olduqda FALSE qaytarır)

Faylın açılması, yazılması və yaradılması üçün əlavə funksiyalar

Funksiya - int oxunan fayl(sətir fayl adı [, bool use_include_path [, resurs konteksti]]) - faylı bütövlükdə oxuyun.

Faylı oxuyur və məzmunu çıxış buferinə yazır. Və baytların sayını qaytarır. Səhv olduqda, it istifadə edilmədikdə geri qayıdacaq - @readfile.

Buna bənzər bir şey olacaq:

Sözün sonunda etiket var
.

b. Funksiya - massiv fayl(sətir fayl adı [, int use_include_path [, resurs konteksti]]), oxunuş faylı funksiyası ilə eyni şeyi edir, bir istisna olmaqla, faylın məzmununu massivə əlavə edir:

Bu yolla siz İnternetdə istənilən səhifəni oxuya bilərsiniz: $lines = file("http://site/"); və foreach funksiyasından istifadə edərək massivi təkrarlayın;

3a. string funksiyası file_get_contents(sətir fayl adı [, bool use_include_path [, resurs konteksti [, int ofset [, int maxlen]]]] - məzmunu tək sətir kimi əldə etməyə imkan verir.

Bu, faylın oxunması üçün daha universal PHP funksiyasıdır, fayl funksiyasına bənzəyir, yalnız məzmun massiv kimi deyil, sətir kimi qaytarılır və siz şərtləri təyin edə bilərsiniz - hansı baytdan başlamalısınız - ofset və harada bitir - maxlen. Uğursuzluq halında, FALSE qaytarılacaq.

Vacib!!!- bu halda funksiya bir anda 3-ü əvəz edir: fopen(), fread() və fclose() və beləliklə işarədən xilas olur.

3b. int funksiyası file_put_contents(sətir fayl adı, qarışıq verilənlər [, int bayraqları [, resurs konteksti]]) - fopen(), fwrite() və fclose() funksiyalarına ardıcıl çağırışlarla eynidir - yazılmış baytların sayını qaytarır.

fopen, fclose, feof, fgets, fgetss və fscanf funksiyalarından istifadə haqqında

Bütün imkanları sadalayaq

PHP kimi müasir proqramlaşdırma dilləri ilə işləməyin üstünlüklərindən biri də mövcud funksiyaların sayıdır. PHP Perl-in “Bir şeyi etmək üçün birdən çox yol var” şüarını asanlıqla qəbul edə bilər, xüsusən də söhbət faylların işlənməsinə gəldikdə. Ancaq mövcud alətlərin çoxluğu ilə, işi yerinə yetirmək üçün hansının daha yaxşı olduğu sualına çevrilir. Əlbəttə ki, bu sualın cavabı həqiqətən faylı emal edərkən məqsədlərinizin nə olduğundan asılıdır, ona görə də dilin bütün imkanlarını öyrənmək vaxt ayırmağa dəyər.

Ənənəvi fopen üsulları

Fopen metodları, yəqin ki, keçmiş C və C++ proqramçılarına ən çox tanış olan üsullardır, çünki bu proqramlaşdırma dilləri ilə işləmiş olsanız, illərdir barmaqlarınızın ucunda olan alətlərdir. Bu üsullardan hər hansı biri üçün siz faylı açmaq üçün fopendən, məlumatları oxumaq funksiyasından istifadə edərək, Siyahı 1-də göstərildiyi kimi faylı bağlamaq üçün fclose istifadə edərək standart prosedura əməl edirsiniz.

Siyahı 1. fgets istifadə edərək faylın açılması və oxunması
$fayl_handle = fopen("mənim faylım", "r"); while (!feof($file_handle)) ( $line = fgets($file_handle); echo $line; ) fclose($file_handle);

Bu funksiyalar ən təcrübəli proqramçılara tanış olsa da, onların necə işlədiyini təhlil edim. Əslində bu addımları izləyirsiniz:

  1. Faylı açın. $file_handle faylın özünə keçidi saxlayır.
  2. Faylın sonuna çatdığınızı yoxlayın.
  3. Sona çatana qədər faylı oxumağa davam edin, oxuduğunuz hər sətri çap edin.
  4. Faylı bağlayın.

Bunu nəzərə alaraq, burada istifadə olunan hər bir fayl funksiyasına baxacağam.

fopen funksiyası

Fopen funksiyası fayl ilə əlaqə yaradır. Mən "bağlantı qurur" deyirəm, çünki fopen faylı açmaqla yanaşı, URL-i də aça bilər:

$fh = fopen("http://127.0.0.1/", "r");

Bu proqram xətti yuxarıdakı səhifəyə keçid yaradır və onu yerli fayl kimi oxumağa başlamağa imkan verir.

Qeyd: Fopen-də istifadə olunan "r" seçimi faylın yalnız oxunmaq üçün açıq olduğunu göstərir. Fayla yazmaq bu məqalədə müzakirə olunan məsələlərin əhatə dairəsinə daxil olmadığı üçün parametrin bütün mümkün dəyərlərini sadalamayacağam. Bununla belə, cross-platform uyğunluğu üçün ikili fayllardan oxuyursunuzsa, "r"-ni "rb"-yə dəyişmək lazımdır. Aşağıda bu növün bir nümunəsidir.

feof funksiyası

feof əmri oxunmanın faylın sonuna çatdığını müəyyən edir və True və ya False qaytarır. Göstərilən dövrə "myfile" faylının sonuna qədər davam edir. Qeyd edək ki, əgər siz URL oxuyursunuzsa və oxumaq üçün daha çox məlumat olmadığına görə bağlantı vaxtı keçibsə, feof da False qaytarır.

fclose funksiyası

Siyahı 1-in ortasını atlayaq və sonuna gedək; fclose fopen-in əksini edir: fayl və ya URL ilə əlaqəni bağlayır. Bu funksiyanı yerinə yetirdikdən sonra siz artıq fayldan və ya yuvadan oxuya bilməyəcəksiniz.

fgets funksiyası

Siyahı 1-də bir neçə sətir geri qayıdaraq, siz faylın işlənməsi prosesinin mahiyyətinə çatırsınız: əslində faylı oxuyursunuz. Fgets funksiyası ilk nümunə üçün seçdiyiniz silahdır. O, fayldan verilənlər sətrini tutur və onu sətir kimi qaytarır. Oradan məlumatları göstərə və ya başqa bir şəkildə emal edə bilərsiniz. Siyahı 1-dəki nümunə bütün faylı çap edir.

Əgər işlədiyiniz məlumat yığınının ölçüsünü məhdudlaşdırmaq qərarına gəlsəniz, tutulan məlumat sətirinin maksimum uzunluğunu məhdudlaşdırmaq üçün fgets arqumenti əlavə edə bilərsiniz. Məsələn, xəttin uzunluğunu 80 simvolla məhdudlaşdırmaq üçün aşağıdakı kodu istifadə edin:

$string = fgets($file_handle, 81);

C-də sətir sonu göstəricisi olan "\0" haqqında düşünün və uzunluğu həqiqətən ehtiyacınız olandan daha uzun bir simvol təyin edin. Gördüyünüz kimi, yuxarıdakı nümunə 81 simvoldan istifadə edir, halbuki sizə 80 simvol lazımdır. Verilmiş funksiya üçün sətir uzunluğu limiti təyin etmək lazım olduqda əlavə simvol əlavə etməyi vərdiş halına salın.

fread funksiyası

fgets funksiyası faylı oxumaq üçün mövcud olan bir çox funksiyalardan yalnız biridir. Bu, ən çox istifadə edilən funksiyalardan biridir, çünki əksər hallarda faylı sətir-sətir emal etmək ən mənalı olur. Əslində, bir sıra digər xüsusiyyətlər oxşar imkanlar təklif edir. Nə olursa olsun, sətir-sətir təhlili həmişə sizə lazım olan şey deyil.

Və burada biz fread-a daxil oluruq. Fread funksiyası fgets funksiyasından bir qədər fərqli məqsədə malikdir: o, binar fayllardan (yəni ilkin olaraq insan tərəfindən oxuna bilən mətndən ibarət olmayan fayllar) oxumaq üçün nəzərdə tutulub. "Xətlər" anlayışı ikili fayllar üçün uyğun olmadığından (məntiqi məlumat strukturları adətən sətirlərə bölünmür), oxunacaq baytların sayını göstərməlisiniz.

$fh = fopen("mənim faylım", "rb"); $data = fread($file_handle, 4096);

Yuxarıdakı nümunə 4096 bayt (4 KB) məlumat oxuyur. Nəzərə alın ki, göstərdiyiniz dəyərdən asılı olmayaraq, fread maksimum 8192 bayt (8 KB) oxuyacaq.

Faylın 8 KB-dən böyük olmadığını fərz etsək, aşağıdakı proqram parçası bütün faylı bir sətirdə oxumalıdır.

$fh = fopen("mənim faylım", "rb"); $data = fread($fh, fayl ölçüsü("mənim faylım")); fclose($fh);

Fayl ölçüsü daha böyükdürsə, qalanını oxumaq üçün bir döngədən istifadə etməli olacaqsınız.

fscanf funksiyası

Sətir emalına qayıdarkən, fscanf həm də ənənəvi C fayl kitabxanası funksiyasının davamçısıdır, əgər siz onunla tanış deyilsinizsə, fscanf fayldan məlumat sahələrini dəyişənlərə oxuyur.

siyahı ($field1, $field2, $field3) = fscanf($fh, "%s %s %s");

Bu funksiyada istifadə olunan format sətirləri PHP.net kimi bir çox mənbələrdə təsvir edilmişdir, ona görə də bu məlumatı burada təkrarlamayacağam. Simli formatlaşdırmanın çox çevik olduğunu söyləmək kifayətdir. Onu da qeyd etmək lazımdır ki, bütün sahələr funksiya tərəfindən qaytarılan dəyişəndə ​​yerləşdirilir. (C-də bunlar arqument kimi ötürüləcək.)

fgetss funksiyası

fgetss funksiyası ənənəvi fayl manipulyasiya funksiyalarından fərqlidir və sizə PHP-nin imkanlarını daha yaxşı başa düşməyə imkan verir. Bu fgets kimi işləyir, lakin aşkar etdiyi hər hansı HTML və ya PHP teqlərini rədd edir və yalnız çılpaq mətni buraxır. Aşağıdakı HTML faylını götürək.

Siyahı 2. Nümunə HTML faylı
Mənim başlığım

Əgər "Cause there ain"t no one for to give you no pain" sözünün nə demək olduğunu başa düşürsənsə, o zaman Amerika qrupunun çoxunu dinləyirsən.

Gəlin onu fgetss funksiyasından keçirək.

Siyahı 3. fgetss istifadə
$fayl_handle = fopen("mənim faylım", "r"); while (!feof($file_handle)) ( echo = fgetss($file_handle); ) fclose($file_handle);

Çıxış olaraq əldə edəcəyiniz budur:

Mənim başlığım "Cause there ain"t no one for to give you no pain" sözünün nə demək olduğunu başa düşürsənsə, Amerika qrupuna çox qulaq asırsan.

fpassthru funksiyası

Fayldan məlumatları necə oxumağınızdan asılı olmayaraq, fpassthru funksiyasından istifadə edərək standart çıxış kanalından istifadə edərək qalan məlumatları çap edə bilərsiniz.

fpassthru($fh);

Bu funksiya verilənləri çap edir ki, siz onu dəyişənə daxil etməyiniz lazım deyil.

Qeyri-xətti fayl emalı: faylda hərəkət etmək

Əlbəttə ki, yuxarıda təsvir olunan funksiyalar yalnız fayldan ardıcıl oxumağa imkan verir. Daha mürəkkəb fayllar faylın əvvəlində və ya sonunda faylın müxtəlif hissələrinə keçməyi tələb edə bilər. Bunun üçün sizə fseek funksiyası lazımdır.

fseek($fh, 0);

Yuxarıdakı nümunə faylın əvvəlinə qayıdır. Faylın ən əvvəlinə keçmək istəmirsinizsə - deyək ki, bir kilobayt kifayətdir - sadəcə yazırsınız:

fseek($fh, 1024);

PHP V4.0-dan etibarən bir neçə başqa seçim də mövcuddur. Məsələn, cari mövqeyinizdən 100 bayt irəliləmək lazımdırsa, aşağıdakı kodu istifadə edə bilərsiniz:

fseek($fh, 100, SEEK_CUR);

Eynilə, 100 bayt geriyə qayıtmaq aşağıdakılarla həyata keçirilir:

fseek($fh, -100, SEEK_CUR);

Faylın sonundan əvvəl 100 bayt mövqeyinə qayıtmaq istəyirsinizsə, əvəzinə SEEK_END istifadə edin.

fseek($fh, -100, SEEK_END);

Yeni mövqeyə çatdıqdan sonra məlumatları oxumaq üçün fgets, fscanf və ya başqa funksiyadan istifadə edə bilərsiniz.

Qeyd: URL-yə istinad edən fayl deskriptorlarında fseek-dən istifadə edə bilməzsiniz.

Bütün faylı çəkin

İndi biz PHP-nin bəzi unikal fayl emal imkanlarına baxmağa davam edirik: bir və ya iki sətirdə böyük məlumat bloklarının işlənməsi. Məsələn, bir faylı tutmaq və onun bütün məzmununu Web səhifənizdə necə göstərmək olar? Yaxşı, siz fgets ilə loopdan istifadə nümunəsini gördünüz. Ancaq bunu necə asanlaşdıra bilərsiniz? Bütün faylı bir xəttə qoyan fgetcontents istifadə edərək proses demək olar ki, gülünc dərəcədə asandır.

$my_fayl = file_get_contents("faylımın adı"); echo $my_file;

Bu ən yaxşı seçim olmasa da, bu əmri daha da qısa şəkildə yaza bilərsiniz:

echo file_get_contents("filename");

Bu məqalə ilk növbədə yerli faylların işlənməsinə yönəlib, lakin qeyd etmək lazımdır ki, təsvir olunan funksiyalardan istifadə edərək digər Veb səhifələri də çəkə, göstərə və təhlil edə bilərsiniz.

echo file_get_contents("http://127.0.0.1/");

Bu əmr əslində eynidir:

$fh = fopen("http://127.0.0.1/", "r"); fpassthru($fh);

Ola bilsin ki, siz bu misallara baxıb “bu, çox işdir” deyə düşünürsünüz. PHP tərtibatçıları sizinlə razılaşırlar. Beləliklə, yuxarıdakı əmri qısalda bilərsiniz:

readfile("http://127.0.0.1/");

Readfile funksiyası faylın və ya Veb səhifənin bütün məzmununu standart çıxış buferinə çıxarır. Varsayılan olaraq, bu əmr uğursuz olduqda səhv mesajı göstərir. Bu davranışın qarşısını almaq üçün (əgər istəyirsinizsə), əmri sınayın:

@readfile("http://127.0.0.1/");

Əlbəttə, əgər faylların məzmununu emal etmək lazımdırsa, file_get_contents tərəfindən qaytarılan tək sətir, yəqin ki, həddən artıq çoxdur. Əvvəlcə onu split() funksiyasından istifadə edərək hissələrə bölmək istəyə bilərsiniz.

$array = split("\n", file_get_contents("mənim faylım"));

Bəs sizin üçün mükəmməl uyğun bir funksiya varsa, bütün bu mürəkkəbliyə niyə ehtiyacınız var? PHP file() funksiyası bu tapşırığı bir addımda yerinə yetirir: o, elementləri faylın sətirləri olan sətir massivini qaytarır.

$massiv = fayl ("mənim faylım");

Qeyd etmək lazımdır ki, yuxarıdakı iki nümunə arasında cüzi fərq var. Split əmri yeni sətirləri silir, fayl əmri isə massiv sətirlərini yeni sətirlərlə bitirir (fgets kimi).

Bununla belə, PHP-nin imkanları yuxarıda təsvir edilənlərdən çox-çox kənara çıxır. Siz yalnız bir parse_ini_file əmri ilə PHP üslubunda bütün .ini fayllarını təhlil edə bilərsiniz. parse_ini_file əmri Siyahı 4-də göstərilənlərə oxşar fayllara aiddir.

Siyahı 4. Nümunə .ini faylı
; Şərh adı = "Kral Artur" tapşırığı = Müqəddəs Grailin sevimli rəngini axtarmaq = Mavi Samuel Klemens = Mark Tven Caryn Johnson = Vupi Qoldberq

Aşağıdakı əmrlər faylı massiv kimi təqdim edir və sonra massivi çap edir:

$file_array = parse_ini_file("holy_grail.ini"); print_r $fayl_array;

Nəticə aşağıdakı çıxış olacaq:

Siyahı 5. Çıxış
Array ( => Kral Artur => Müqəddəs Grail axtarmaq üçün => Mavi => Mark Tven => Vupi Qoldberq)

Əlbəttə ki, bu əmrin bölmələri birləşdirdiyini görə bilərsiniz. Bu, defolt hərəkətdir, lakin siz parse_ini_file: process_sections ikinci arqumentindən istifadə etməklə onu asanlıqla fərdiləşdirə bilərsiniz, hansı ki Boolean dəyişənidir. Proses_bölmələrini Doğru olaraq təyin edin.

$file_array = parse_ini_file("holy_grail.ini", doğru); print_r $fayl_array;

Və çıxışınız belə görünəcək:

Siyahı 6. Çıxış
Massiv ( => Array ( => Kral Artur => Müqəddəs Qrası axtarmaq üçün => Mavi) => Array ( => Mark Tven => Vupi Qoldberq))

PHP məlumatları asanlıqla təhlil edilə bilən çoxölçülü massivə qoyur.

Lakin bu, PHP-də faylların işlənməsinə gəldikdə, aysberqin yalnız görünən hissəsidir. tidy_parse_file və xml_parse kimi daha mürəkkəb funksiyalar müvafiq olaraq HTML və XML sənədlərini təhlil etməyə kömək edə bilər. Bu funksiyaların necə işləməsi haqqında daha ətraflı məlumat üçün bölməyə baxın. Bunların hər ikisi bu fayl növləri ilə işləyəcəyiniz barədə düşünməyə dəyər, lakin bütün mümkün fayl növlərini nəzərdən keçirmək əvəzinə, bu məqalənin məzmununa daha yaxından baxmaq istəyə bilərsiniz. indiyə qədər təsvir etdiyim funksiyalarla işləmək.

Yaxşı proqramlaşdırma tərzi

Proqramınızdakı hər şeyin nəzərdə tutulduğu kimi işləyəcəyini heç vaxt düşünməyin. Məsələn: axtardığınız fayl köçürülübsə nə olacaq? Əgər icazə dəyişikliyi faylın məzmununu oxuya bilməyəcəksiniz? Siz file_exists və is_readable metodlarından istifadə edərək faylın mövcudluğunu və onu oxumaq hüquqlarını əvvəlcədən yoxlaya bilərsiniz.

Siyahı 7. file_exists və is_readable istifadə
$filename = "mənim faylım"; əgər (fayl_mövcuddur($fayl adı) && oxuna bilir ($fayl adı)) ( $fh = fopen($filename, "r"); # Emal olunur fclose($fh); )

Bununla belə, praktikada bu proqram parçası, yəqin ki, sizin tapşırığınız üçün həddindən artıq çox olacaq. Fopen tərəfindən qaytarılan dəyərləri idarə etmək daha sadə və daha dəqiqdir.

if ($fh = fopen($fayl adı, "r")) ( # Emal olunur fclose($fh); )

Əgər uğursuz olarsa, fopen False qaytardığından, bu, faylın yalnız aça bildiyi halda işlənməsini təmin edəcək. Əlbəttə ki, əgər fayl mövcud deyilsə və ya oxunmursa, qaytarılan dəyərin mənfi olmasını gözləyirsiniz. Buna görə də, belə bir yoxlama bütün potensial problemlərin düşdüyü bir tələdir. Alternativ olaraq, faylı açmaq mümkün olmadıqda proqramdan çıxa və ya səhv mesajı göstərə bilərsiniz.

Fopen kimi, file_get_contents, file və readfile funksiyaları faylı açmaq və ya emal etmək mümkün olmadıqda False qaytarır. Səhv baş verdikdə fgets, fgetss, fread, fscanf və fclose funksiyaları da False qaytarır. Əlbəttə, fclose istisna olmaqla, siz yəqin ki, onların qaytardığı nəticələri artıq emal etmisiniz. O ki qaldı fclose , əgər fayl idarəsi düzgün bağlanmasa, edilə biləcək çox şey yoxdur, ona görə də fclose funksiyasının qaytarılması dəyərini yoxlamaq ümumiyyətlə həddən artıq çox olur.

Seçim sənindir

PHP-də faylları oxumaq və təhlil etmək üçün effektiv üsullar çatışmazlığı yoxdur. Fread kimi klassik funksiyalar çox vaxt sizə etibarlı şəkildə xidmət edə bilər və ya işi yerinə yetirmək üçün lazım olan budursa, oxunuş faylının sadəliyi sizi daha çox cəlb edə bilər. Seçim həqiqətən nəyə nail olmağa çalışdığınızdan asılıdır.

Əgər siz böyük həcmdə məlumatı emal edirsinizsə, yəqin ki, fscanf faylını sonrakı bölmə və sprintf əmrləri ilə birlikdə istifadə etməkdən daha faydalı və səmərəli tapacaqsınız. Əgər siz sadəcə olaraq kiçik dəyişikliklərlə böyük həcmdə mətn göstərirsinizsə, fayl , file_get_contents və ya readfile funksiyalarından istifadə daha mənalı ola bilər. Bu həll yəqin ki, PHP-dən keşləmə üçün istifadə edərkən və ya hətta müvəqqəti proksi server yaratdıqda düzgün olacaq.

PHP faylları ilə işləmək üçün çoxlu alətlər təqdim edir. Hər biri ilə daha yaxından tanış olun və üzərində işlədiyiniz layihə üçün hansı vasitələrin daha yaxşı olduğunu öyrənin. Sizə proqram alətlərinin geniş seçimi təklif olunur, onlardan ən səmərəli şəkildə istifadə edin və PHP-dən istifadə etməklə fayllarınızı emal etməklə əylənin.

Son yeniləmə: 11/1/2015

Əksər proqramlaşdırma dilləri kimi, PHP də məlumatların saxlanma yollarından biri olan fayllarla işləməyi dəstəkləyir.

Faylların oxunması və yazılması

Faylların açılması və bağlanması

PHP-də faylları açmaq üçün fopen() funksiyası müəyyən edilir. Onun aşağıdakı tərifi var: resurs fopen(string $fayl adı, string $rejim) . Birinci $filename parametri fayla gedən yolu, ikincisi isə açılış rejimini təmsil edir. Açılma məqsədindən və faylın növündən asılı olaraq, bu parametr aşağıdakı dəyərləri qəbul edə bilər:

    "r" : Fayl yalnız oxumaq üçün açılır. Əgər fayl mövcud deyilsə, false qaytarır

    "r+" : Fayl yalnız oxumaq üçün açılır və yazıla bilər. Fayl mövcud deyilsə, false qaytarır

    "w" : Fayl yazmaq üçün açılır. Əgər belə bir fayl artıq mövcuddursa, o zaman onun üzərinə yazılır, yoxsa, yaradılır.

    "w+" : Fayl yazmaq və oxumaq üçün açılır. Əgər belə bir fayl artıq mövcuddursa, o zaman onun üzərinə yazılır, yoxsa, yaradılır.

    "a" : Fayl yazmaq üçün açılır. Əgər belə bir fayl artıq mövcuddursa, o zaman verilənlər faylın sonuna yazılır və köhnə məlumatlar qalır. Əgər fayl mövcud deyilsə, o yaradılmışdır

    "a+" : Fayl oxumaq və yazmaq üçün açılır. Əgər fayl artıq mövcuddursa, məlumat faylın sonuna əlavə olunur. Əgər fayl mövcud deyilsə, o yaradılmışdır

Fopen funksiyasının çıxışı fayl deskriptoru olacaq. Bu tutacaq fayl əməliyyatları və faylı bağlamaq üçün istifadə olunur.

İşi bitirdikdən sonra fayl deskriptorunu parametr kimi qəbul edən fclose() funksiyasından istifadə etməklə fayl bağlanmalıdır. Məsələn, bir faylı açıb bağlayaq:

$fd = fopen("form.php", "r") və ya die("fayl aça bilmədi"); fclose($fd);

Və ya die("səhv mətni") konstruksiyası skriptin işləməsini dayandırmağa və fopen funksiyası faylı aça bilmədiyi halda bəzi xəta mesajını göstərməyə imkan verir.

Faylın oxunması

Faylı oxumaq üçün bir neçə funksiyadan istifadə edə bilərsiniz. Sətir-sətir oxumaq üçün fayl deskriptorunu qəbul edən və bir sətir oxunmasını qaytaran fgets() funksiyasından istifadə olunur. Bütün faylı sətir-sətir keçirək:

Hər dəfə fgets() çağırılanda PHP göstəricini oxunan sətirin sonunda yerləşdirir. Faylın sonunu izləmək üçün feof() funksiyasından istifadə olunur ki, bu da fayl tamamlandıqda doğru olanı qaytarır. Və faylın sonuna çatana qədər fgets() funksiyasından istifadə edə bilərik.

Bütün faylın oxunması

Bu halda, biz faylı açıq şəkildə açmaq, tutacaq əldə etmək və sonra faylı bağlamaq məcburiyyətində deyilik.

Oxumağı bloklayın

Siz həmçinin fread() funksiyasından istifadə edərək blok-blok oxuya bilərsiniz, yəni fayldan müəyyən sayda bayt oxuya bilərsiniz:

fread() funksiyası iki parametr alır: oxunacaq fayl idarəsi və oxunacaq baytların sayı. Blok oxunduqda fayldakı göstərici həmin blokun sonuna keçir. Həmçinin feof() funksiyasından istifadə edərək faylın tamamlanmasını izləyə bilərsiniz.

Fayl yazın

Fayl yazmaq üçün fwrite() funksiyasından istifadə edin, o, fayla aşağıdakı sətri yazır:

Digər fputs() funksiyası oxşar şəkildə işləyir:

Fayl göstəricisi ilə işləmək

Faylı "w" rejimində oxumaq və ya yazmaq üçün açarkən, fayldakı göstərici başlanğıcda yerləşdirilir. Məlumatları oxuyarkən PHP fayldakı göstəricini oxunan verilənlər blokunun sonuna aparır. Bununla belə, biz həmçinin fayldakı göstərici ilə əl ilə manipulyasiya edə və onu ixtiyari yerə təyin edə bilərik. Bunu etmək üçün funksiyadan istifadə etməlisiniz fseek, aşağıdakı formal tərifə malikdir:

Int fseek (resurs $handle , int $offset [, int $whence = SEEK_SET ])

$handle parametri fayl idarəsini təmsil edir. $ofset parametri oxunmanın/yazmanın başlayacağı faylın əvvəlinə nisbətən baytlarla ofsetdir. Üçüncü əlavə parametr ofsetin necə qurulduğunu müəyyən edir. Üç dəyər ala bilər:

    SEEK_SET : standart dəyər, faylın başlanğıcına nisbətən ofset baytlarında ofset təyin edir

    SEEK_CUR : fayldakı cari mövqenin başlanğıcına nisbətən ofset baytlarında ofseti təyin edir

    SEEK_END : faylın sonundan baytları ofset etmək üçün ofset təyin edir

Göstərici uğurla quraşdırılıbsa, fseek() funksiyası 0, göstərici uğursuz olarsa, -1 qaytarır.

Funksiyadan istifadə nümunəsi:

$fd = fopen("salam.txt", "w+") və ya die("fayl aça bilmədi"); $str = "Salam dünya!"; // yazmaq üçün sətir fwrite($fd, $str); // sətri başlanğıca yazın fseek($fd, 0); // fayl göstəricisini başlanğıcda yerləşdirin fwrite($fd, "Oink"); // sətri əvvəlinə yazın fseek($fd, 0, SEEK_END); // göstəricini sonuna qoyun fwrite($fd, $str); // sonuna başqa sətir yazın fclose($fd);