Php necə Oxunur php-də fayllarla işləmək: açmaq, yazmaq, oxumaq. Ənənəvi fopen üsulları

Son yeniləmə: 1.11.2015

Əksər proqramlaşdırma dilləri kimi, PHP də məlumatı saxlamağın 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. Əgər fayl mövcud deyilsə, false qaytarır

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

    "w+" : Fayl yazmaq üçün açılır və oxunur. Əgər belə bir fayl artıq varsa, 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 yoxdursa, 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 yoxdursa, 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 xəttin 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 blok-blok oxuya bilərsiniz, yəni fread() funksiyasından istifadə edərək fayldan müəyyən sayda bayt oxuya bilərsiniz:

fread() funksiyası iki parametr qəbul edir: 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:

Başqa bir fputs() funksiyası eyni şəkildə işləyir:

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

Faylı oxumaq və ya yazmaq üçün "w" rejimində açarkən, fayldakı göstərici başlanğıcda yerləşdirilir. Oxuyanda PHP məlumatları fayldakı göstəricini oxunan məlumat 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ənləşdirir. Üç dəyər ala bilər:

    SEEK_SET : standart dəyər, faylın başlanğıcına nisbətən ofset baytlarında ofseti 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 : ofseti faylın sonundan baytların ofsetinə 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);

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 Perlin dil şüarını asanlıqla qəbul edə bilər, "Bir şey etmək üçün birdən çox yol var", xüsusən də haqqında danışırıq faylın işlənməsi haqqında. 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ı, bəlkə də, köhnə C və C++ proqramçılarına ən çox tanış olan metodlardı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 standart prosedur, Siyahı 1-də göstərildiyi kimi faylı açmaq üçün fopen, verilənləri oxumaq funksiyası və sonra faylı bağlamaq üçün fclose funksiyasından istifadə edin.

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 oxumaq üçü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, məhdudlaşdırmaq üçün fgets-ə arqument əlavə edə bilərsiniz. maksimum uzunluq tutulan məlumat xətləri. 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ətirlərin işlənməsinə qayıdaraq, 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 verilənlər 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, fget kimi işləyir, lakin tapdığı hər şeyi rədd edir. HTML teqləri və ya PHP, yalnız açıq 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ünüzsə, Amerika qrupunun çoxunu dinləyirsiniz.



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" ifadəsinin nə demək olduğunu başa düşürsənsə, o zaman Amerika qrupunu çox dinləyirsən.

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);

Eyni şəkildə, 100 bayt geriyə daşınması 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("faylımın adı");

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, bunu fərq edə bilərsiniz bu əmr birləşdirilən bölmələr. Bu, defolt hərəkətdir, lakin siz parse_ini_file: process_sections ikinci arqumentindən istifadə edərək 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. Daha çox əldə etmək üçün bölməyə baxın ətraflı məlumat bu funksiyaların işləməsi haqqında. Bu tip fayllarla işləyirsinizsə, onların hər ikisini nəzərdən keçirməyə dəyər, lakin bütün mümkün fayl növlərinə baxmaq əvəzinə, bu məqalənin məzmununa daha yaxından baxmaq istəyə bilərsiniz, burada bir neçə yaxşı fayl var. ümumi qaydalar indiyə qədər təsvir etdiyim funksiyalarla işləmək üçün.

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 sapı düzgün bağlanmazsa, edilə biləcək çox şey yoxdur, ona görə də fclose-in qaytarılması dəyərini yoxlamaq ümumiyyətlə həddən artıq çox olur.

Seçim sənindir

PHP-nin heç bir çatışmazlığı yoxdur təsirli yollar faylları oxumaq və təhlil etmək. 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ə, ehtimal 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, doğru olarsa PHP istifadə edərək keşləmə və ya hətta müvəqqəti proxy server yaratmaq üçün.

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ə geniş seçim təklif olunur proqram təminatı, onlardan ən səmərəli istifadə edin və PHP ilə fayllarınızı emal etməklə əylənin.

PHP, proqramlaşdırma dillərinin öz mövqelərini möhkəmləndirməsindən və sintaksis, məntiq, dəyişənlər və digər proqram obyektləri haqqında ümumi təsəvvürləri formalaşdırmasından çox sonra ortaya çıxdı. Fayllar və onlarla işləmək üçün funksiyalar irəliləyiş əldə etmədi və hətta təbii səbəblərdən yaranan faylların kodlaşdırılması problemi kökündən yeni həll yollarına səbəb olmadı.

Ümumi qeydlər

Fayllarla əsas iş, nə olursa olsun, açmaq, oxumaq/yazmaq və bağlamaqdan ibarətdir. Siz faylın işlənməsi zamanı ona girişi bloklamaq/blokdan çıxarmaq funksiyalarından istifadə edə bilərsiniz, faylda oxumaq/yazma mövqeyini təyin edə bilərsiniz - hər şey əvvəlki kimidir, uzaq keçmişdə.

PHP-də vacib məqam fayllarla işləmək üçün funksiyaların və onlardan istifadə variantlarının çoxluğudur. Praktikada sadə, lakin işləyən variantlardan istifadə etmək kifayətdir. Fayl ilk növbədə proqram yaddaşıdır. Orada məlumat saxlaya bilərsiniz. İstənilən proqramın, hər hansı bir internet saytının məqsədi məlumatın təqdim edilməsi, işlənməsi və təhlükəsizliyinin təmin edilməsidir.

Vacib vəziyyət

Əvvəllər uyğunluq tələbi, ən azı aşağıdan yuxarıya doğru sarsılmaz idi. Yəni bir proqramlaşdırma dilinin bir versiyasında bir dəfə yazılmış proqram növbəti versiyada ideal şəkildə tərtib edilir/şərh edilir. Müasir proqramlaşdırmada bu belə deyil. Dilin sintaktik strukturlarının uyğunluğu tələbi tarixə çevrilmiş, üslublarla proqramlaşdırma vasitələri və müəyyən vasitələrin versiyaları arasında mübarizə onların həyat normasına çevrilmişdir.

Fayllarla, eləcə də verilənlər bazası ilə işləmək sayt interfeysi qədər vacibdir. Birincisi elə qurulmalıdır ki, platforma, hostinq və ya dil versiyasını dəyişdirərkən sayt kodunu dəyişməyə ehtiyac qalmasın. Fayllarla işləmək üçün interfeys ayrıca skriptə daxil edilməli və tam uyğunluğu təmin etməlidir, necə ki, sayt dizaynı istənilən cihaza, brauzerə adekvat uyğunlaşmalı və saytın qalan funksionallığını eyni imkanlarla təmin etməlidir.

Oxuyun və özünüzü dəyişdirin

Proqram özünü dəyişə bilər, yəni skript təkmilləşə bilərmi? Bu sual bu günə qədər çoxlarını maraqlandırır. Ancaq tapşırıq daha praktik səslənir: PHP PHP faylını oxuyur. Tərtibatçı hər zaman konkret kodu yazmaqla müəyyən problemi həll edə bilməz. Bəzən bir ziyarətçi sayta gəldikdə və inkişaf mərhələsində nəzərdə tutulmayan bir sual hazırladıqda onu dəyişdirmək lazımdır.

Bütün digər hallarda olduğu kimi, ilk növbədə faylı açmalısınız. Bu faylın olub-olmamasının əhəmiyyəti yoxdur. Əgər faylın mövcud olduğu məlumdursa (file_exists() funksiyası müsbət cavab verir), fopen() funksiyası 'r', 'r+', 'a', 'a+' girişi ilə istifadə olunur. Əgər fayl hələ mövcud deyilsə, 'a', 'a+', 'w', 'w+' girişi ilə. Faylın açılmasının nəticəsi onun deskriptoru olacaq. Fayl fclose() funksiyası ilə bağlanır.

Oxu zamanı onu emal etməyə ehtiyac olmadığı halda, faylı massivdə oxumaq üçün PHP-dən istifadə etmək rahatdır.

əgər (fayl_mövcuddur($fName)) (

$aLines = fayl($fName)

Bu seçimdə faylın hər bir sətri ardıcıl olaraq massiv elementinə keçir. Qeyd etmək lazımdır ki, file() və ya file_get_contents() funksiyaları üçün faylı açıb bağlamağa ehtiyac yoxdur.

Daxiletmə faylı çox böyük olduqda və sadəcə bir az məlumat tapmaq lazım olduqda və ya başqa səbəblərdən faylı sətir-sətir oxumaq üçün PHP-dən istifadə edə bilərsiniz. PHP bunu fgets() və fgetc() funksiyaları ilə etmək imkanı verir.

$fvs = fopen($fName, "r")

isə ((yanlış !== ($cLine = fgets($fvs, 2000))) (

$cLines .= "
" . $i . "). " . $cLine

Hər iki variant qüsursuz işləyir. Bununla belə, sonradan modifikasiya üçün PHP faylının PHP oxunmasını həyata keçirərkən ehtiyat tədbirləri görülməlidir. Ziyarətçinin saytın hazırlanması mərhələsində ondan necə istifadə edəcəyini əvvəlcədən görmək həmişə mümkün deyil. Skriptlər saytın funksiyaları daxilində dəyişdirilsə və bu dəyişikliyə nəzarət resurs administratoru da daxil olmaqla ziyarətçi üçün mümkün deyilsə, daha yaxşıdır.

Nəticələrin saxlanması

Qəbul edilmiş və yenilənmiş məlumat fputs() funksiyası ilə sətir-sətir və ya bütövlükdə file_put_contents() funksiyası ilə fayla yazılır.

$fName = $_SERVER["DOCUMENT_ROOT"] . "/tmp/scData.php"

$fvs = fopen($fName, "a")

sürü($fvs, LOCK_EX)

$cLine = "1 sətir". chr(10)

fputs($fvs, $cLine)

$cLine = "2 sətir" . chr(10)

fputs($fvs, $cLine)

sürü($fvs, LOCK_UN)

Sətir-sətir qeyd etmə seçimində siz qeyd prosesi zamanı məlumatları manipulyasiya edə bilərsiniz, ikinci halda, yazılı sətir və ya massiv bütün faylda yerləşdirilir.

$fayl = " scData.php "

$cContents = file_get_contents($file)

// giriş əlavə etmək

$cContents .= "yeni giriş\n"

// faylı geri yazın

file_put_contents($file, $cContents)

PHP fayllarını oxumaq və yazmaq asan və təbiidir. Bununla belə, yadda saxlamaq lazımdır: hər bir faylın adı, uzantısı və yolu (qovluğu) var. PHP skriptinin faylları oxuya və yaza bilməsi üçün bu skript müvafiq hüquqlara malik olmalıdır. Onlar avtomatik olaraq hostinqdə ifşa olunur, lakin bəzi hallarda onları genişləndirmək lazımdır.

Bəzi hallarda, test oxumaqla nəticələri yoxlamaq arzuolunan ola bilər. PHP fayllarının yazılması inkişaf zamanı bunu tələb edir, lakin bəzi hallarda saytın təhlükəsizliyi və ya etibarlılığı maraqları üçün məlumatların qeydini yoxlamaq vacibdir.

PHP, MySQl, JavaScript və xüsusilə brauzerlərin xarakterik xüsusiyyəti: bəzi səhvlərin baş verməsinə səssizcə imkan verir. "Tanınmadı, edilmədi ..." - çox yaxşı cəbhə təcrübəsi deyil informasiya texnologiyaları, lakin bu, tərtibatçılara səhv etməməyi və təmiz, yüksək keyfiyyətli kod yazmağı öyrədir ki, bu da pis deyil.

PHP və real sənədlərlə işləmək

PHP-nin PHP faylını oxuması, şübhəsiz ki, praktiki maraq doğurur, lakin bu, proqramlaşdırma sahəsidir. İstifadəçi və sayt ziyarətçisi onun cədvəl və sənədlər şəklində, xüsusən *.xlsx və *.docx fayl formatlarında görməyə adət etdiyi tətbiq xarakterli məlumatlarla maraqlanır. Bunlar MS Excel və MS Word formatında olan fayllardır.

Malların, qiymətlərin, xüsusiyyətlərin siyahıları adətən cədvəllər şəklində formalaşır, buna görə də PHP Excel faylını oxumaq vacibdir.

Belə fayllarla işləmək üçün PHPExcel və PHPWord kitabxanaları işlənib hazırlanmışdır. Bununla belə, *.xlsx və *.docx fayllarının məzmunu OOXML standartında təqdim olunur, yəni real, başa düşülən sənəd zip arxivində təqdim olunur. Zip arxivi digər proqramlardan şəkillər, obyektlər, düsturlar və əlavələr daxil olmaqla fayllar toplusudur. Burada mətn faylları teqlər şəklində təsvirlərlə təmsil olunur. Belə bir faylı oxumaq kifayət deyil, istifadə etmək və dəyişdirmək üçün məzmunu və strukturu əldə etmək üçün onu təhlil etməlisiniz.

Bu o deməkdir ki, oxu əməliyyatı arxivin açılması proseduruna çevrilir. Bu kitabxanalar müstəqil olaraq sənəd arxivini açır və tərtibatçıya bu cür sənədlərin oxunması, işlənməsi və yazılması üçün geniş funksiyalar təqdim edir.

Excel cədvəlləri

bir dəfə daxil edin 'PhpOffice/PhpExcel/IOFactory.php'

scGetExcelFile funksiyası($xls)(

$objPHPExcel = PHPExcel_IOFactory::load($xls)

$objPHPExcel->setActiveSheetIndex(0)

//bu massiv sətirlərdən ibarət massivləri ehtiva edir

$aSheet = $objPHPExcel->getActiveSheet()

$massiv = massiv()

//müalicə

foreach($aSheet->getRowIterator() $sətir kimi)(

$cellIterator = $row->getCellIterator()

foreach($cellIterator $cell kimi)(

array_push($item, iconv("utf-8", "cp1251", $cell->getCalculatedValue()))

array_push($massiv, $element)

Excel fayllarını oxumaq və emal etmək daha çətindir Word sənədləri. Tətbiq olunan məlumatların oxunması və emalı üçün ciddi bir layihə həyata keçirmək lazımdırsa, ən yaxşı seçim ilk növbədə PHPWord kitabxanasını mənimsəməkdir. Bu, sizə yaxşı təcrübə və məsələnin xüsusiyyətlərini tez başa düşməyə imkan verəcək.

Word sənədləri

Yalnız iki xətt:

$oWord = yeni \PhpOffice\PhpWord\PhpWord()

$oDocx = $this->oWord->loadTemplate($cFileName)

$cFileName sənədi indi emal üçün əlçatandır. Sonra arxiv açılır, onun məzmunu seçilir və təhlil edilir, vebsaytda göstərilə, dəyişdirilə və geri yazıla bilər.

$zipClass = yeni ZipArxiv()

$zipClass->open($this->tempFileName)

// sənədin bütün məzmununu oxuyun

üçün ($i=0; $i<$zipClass->numFiles; $i++) (

$cNameIn = $zipClass->getNameIndex($i)

$cNameInExt = substr($cNameIn, -4)

əgər (($cNameInExt == ".xml") || ($cNameInExt == "rels")) (

// ".xml" və ".xml.rels" uzantılı fayllar sənəd cədvəlində saxlanılır

// hər xml sətri sıra ilə unikal nömrə ilə yazılır

$cBodyIn = $zipClass->getFromName($cNameIn)

$cBodyInLen = strlen($cBodyIn)

// bütün digər fayllar sənəd qovluğuna olduğu kimi yazılır

$cNameOnly = substr($cNameIn, strrpos($cNameIn, "/") + 1)

$zipClass->getFromName($cNameIn, $cWorkPath); // fayl kimi məzmun

Nə vaxt açılan imkanlar PHP yardımı Excel və PHP Word sizə real sənədləri manipulyasiya etməyə və onların məzmununu istənilən vaxt aktuallaşdırmağa imkan verir. Bugünkü dinamik dünyada bu çox vacib olur. Ağırlıq mərkəzi yerli istifadədən çoxdan keçib kompüter avadanlığı virtual internet məkanına. Buna görə də, yerli Microsoft məhsullarında cədvəllər və sənədlər yaratmaq, yalnız cədvəlin və ya sənədin yaradıcısı üçün deyil, həm də onun istehlakçıları üçün əlçatan olan veb-saytda avtomatik və yarı avtomatik rejimdə belə sənədlərlə işləməkdən daha az səmərəlidir.

Mətn faylları, başqa bir həyat

Birinci təxminə görə, mətn faylları PHP fayllarından və ya proqram sənədlərindən daha sadədir. Bununla belə, burada düşünməli bir şey var. Bu cür faylların oxu/yazma əməliyyatları artıq yuxarıda göstərilmişdir, lakin bu cür faylların mənası daha vacibdir.

Müştəri və server (birincisində JavaScript, ikincisində PHP üstünlük təşkil edir) mövcud olduğundan, hətta kuki və sessiya mexanizmləri skriptlər, səhifələr və ya müəyyən proseslər arasında məlumat ötürmək ehtiyacının öhdəsindən gələ bilmir.

İstənilən dəyişiklikləri verilənlər bazasında əks etdirmək mümkündür, lakin bütün üstünlüklərinə və sürətinə görə kiçik müvəqqəti və ya daimi mətn faylları məlumat ötürmək üçün daha maraqlı seçim ola bilər. Əgər siz çoxlu kiçik fayllar yaratmırsınızsa və onların ölçüsünə nəzarət etmirsinizsə, onlar verilənlər bazasının spesifik və daha çevik versiyası ola bilər.

Mətn faylını oxuyan PHP sürətlidir, onu dərhal struktur, massiv və ya obyektdə təhlil etmək olar. Sonuncu çox vacibdir, çünki bu, ayrılmış vaxtdan kənarda yaşayan obyektlər yaratmağa imkan verir PHP skripti, bildiyiniz kimi, yalnız serverdə mövcud ola bilər və yalnız səhifə yüklənərkən, AJAX cavabı yaradılanda və ya PHP tərcüməçisinin işə salınmasına səbəb olan başqa bir səbəbdən.

Mətn faylının tərtibatçının məzmunu və quruluşu olduğunu düşünsəniz, PHP faylı tərcüməçinin sintaksisi və tərtibatçının məntiqidir və "etiketlənmiş" təsvirlər html, css, xml daha semantik elementlərdir, lakin tənzimlənir. statik standartlara görə. Belə bir nəticəyə gəlmək olar ki, yəqin ki, fayllar üçün yeni məzmun əldə etməyin vaxtı çatıb və bu, onların keyfiyyətini və istifadə məntiqini müəyyən etməlidir. Məhz proqramlaşdırma öz inkişafının növbəti mərhələsinə hələ hazır olmadığı üçün bu gün fayllar sadəcə olaraq tərtibatçının yaratdığı və istifadəsini təyin etdiyi fayllar olaraq qalır.

Ən maraqlısı və perspektivlisi, ehtiyac yarandıqda PHP-nin PHP faylını müstəqil oxumasıdır. Və sadə bir PHP fayldan sətir oxumaqla nəticələnir, ən azı saxlandığı vəziyyətdə obyekt yaradılır. Bunlar tamamilə tanış fikirlər deyil, lakin müasir dünyada hər şey çox tez dəyişir.

16,5 min

Əslində php faylı necə açmaq elə də böyük problem deyil. Meşənin ortasında olduğunuz zaman bir şüşə pivə açmaq daha çətin ola bilər. Ancaq yalnız həvəsli proqramçılar belə düşünürlər. Yeni başlayanlar üçün biz sizə PHP-nin fayllarla işləmək üçün bütün imkanları haqqında məlumat verəcəyik:

php faylları

php uzantılı fayllar eyni adlı proqramlaşdırma dilində yazılmış kodlardan ibarətdir. Digər dillərdən fərqli olaraq php server tərəfi proqramlaşdırma dilidir. Yəni server tərəfində işləyir. Buna görə də, kodunu sazlamaq üçün müştəri maşınında yerli server quraşdırılmalıdır.

php faylları ilə işləmək üçün xüsusi proqramlardan - proqram redaktorlarından istifadə olunur. Ən ümumi olanlar bunlardır:

  • Dreamweaver.
  • PHPEdit.
  • Eclipse PHP İnkişafı.
PHP əsasında veb-saytlar yaratarkən, proqram kodundan təkrar istifadə etməli ola bilərsiniz. Belə vəziyyətlərdə başqa bir faylda yerləşən hazır həlləri birləşdirmək rahatdır. Bunun üçün daxil konstruksiyasından istifadə olunur. Onun sintaksisi belədir:

fayl adını daxil edin

Bağlantı nümunəsi:

Daxil olan fayl:


Faylın daxil edilməsi tələb konstruksiyasından istifadə etməklə də mümkündür. Daxil etməkdən fərqli olaraq, o, proqram kodu icra edilməzdən əvvəl faylı ehtiva edir. Kodun tələbindən istifadə etməklə bu fayla yalnız bir zəng etmək mümkündür. Yenidən daxil olduqda, sistem qlobal səhv mesajı göstərəcək və proqramın icrasını dayandıracaq.

Daxil etmə konstruksiyasına yalnız proqramın icrası zamanı mənbə daxildir. php faylının çoxlu oxunmasını dəstəkləyir. Səhv baş verərsə, yalnız xəbərdarlıq mesajı görünəcək və kodun icrası növbəti sətirdən davam edəcək.

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

php-də fayllarla bütün əməliyyatlar bir neçə mərhələdə həyata keçirilir:

  • Faylın açılması;
  • Məzmun redaktəsi;
  • Faylın bağlanması.

Fopen() funksiyası faylı açmaq üçün istifadə olunur. Onun sintaksisi belədir:

int fopen(sətir fayl adı, sətir rejimi [, int use_include_path])

Qəbul edilən arqumentlər:

  • string fayl adı – fayl adı və ya ona mütləq yol. Faylın yolu göstərilməyibsə, o, cari kataloqda axtarılacaq. Axtardığınız fayl yoxdursa, sistem səhv mesajı göstərəcək. Misal:

  • sətir rejimi – faylın açılması rejimini göstərir. Arqument tərəfindən qəbul edilən dəyərlər:
  • r – fayl yalnız oxumaq üçün açılır, fayl göstəricisi başlanğıcda qoyulur;
  • r+ – fayl oxumaq və yazmaq üçün açıqdır;
  • w – yalnız yazmaq üçün yeni fayl yaradır. Eyni adlı fayl artıq mövcuddursa, onda olan bütün məlumatlar avtomatik olaraq silinir;
  • w+ - yazmaq və oxumaq üçün yeni fayl yaradır. Belə bir fayl mövcud olduqda, onun məlumatları tamamilə yeniləri ilə yazılır;
  • a – fayl yazmaq üçün açıqdır. Göstərici sonunda təyin olunur. Yəni php faylına yazmaq əvvəldən deyil, axırdan başlayacaq;
  • a+ – faylı oxumaq-yazmaq rejimində açın. Yazma sondan başlayacaq;
  • b – ikili verilənlərdən ibarət faylla işləmə rejimi (ikilik say sistemində). Bu rejim yalnız burada mövcuddur əməliyyat sistemi Windows.

Fayla girişi bağlamaq üçün fclose() funksiyasından istifadə edin. Sintaksis:

int fclose (int faylı), burada int faylı saytın bağlanması üçün idarəedicidir.

Hər oxumaq və ya yazdıqdan sonra fayl bu funksiya ilə bağlanmalıdır. Əks halda, fayl üçün yaradılmış axın açıq qalır. Və bu, server tutumunun lazımsız istehlakına gətirib çıxarır.

Misal:

Faylların oxunması və yazılması

Sadəcə olaraq faylın bütün məzmununu göstərmək üçün readfile() funksiyası idealdır. Onun sintaksisi belədir:

readfile (string fayl adı) , burada string fayl adı sətir fayl adıdır (dəlil deyil).


Eyni faylı fpassthru() funksiyasından istifadə etməklə oxumaq olar. Son göstərici mövqeyindən faylın sonuna qədər məlumatları oxuyur. Onun sintaksisi belədir:

int fpassthru (int faylı)

Funksiya faylın açılmasını və bağlanmasını tələb edir. Misal:

Nəticə əvvəlkinə bənzəyir.

php-də fayllarla işləmək funksiyaları məzmunu sətir-sətir və simvol-xarakter olaraq oxumağa imkan verir:

  • sətir fgets (int faylı, int uzunluğu)– funksiya uzunluqlu sətri oxuyur. Misal:

  • string fread (int faylı, int uzunluğu)- hərəkət əvvəlki ilə eynidir.

Fayla mətn məlumatı yazmaq üçün iki eyni funksiya var:

  • int fputs (int faylı, sətir sətri [, int uzunluğu])
  • int fwrite(int faylı, sətir sətri [, int uzunluğu])

Funksiyalar int faylına müəyyən edilmiş int uzunluğunda bir sətir yazır ( isteğe bağlı arqument). Misal:

Faylların yaradılması və silinməsi

php faylı yaratmaq üçün "w" və ya "w+" giriş rejimində fopen() funksiyasından istifadə edə bilərsiniz. Və ya touch() funksiyası. Faylın dəyişdirilməsi vaxtını təyin edir. Axtarılan adı olan element yoxdursa, o yaradılacaq. Onun sintaksisi.




Üst