Php nasıl telaffuz edilir Php'de dosyalarla çalışma: açma, yazma, okuma. Geleneksel fopen yöntemleri

Son Güncelleme: 1.11.2015

Çoğu programlama dili gibi PHP de bilgi depolamanın yollarından biri olan dosyalarla çalışmayı destekler.

Dosyaları okuma ve yazma

Dosyaları açma ve kapatma

Dosyaları PHP'de açmak için fopen() işlevi tanımlanmıştır. Şu tanıma sahiptir: Resources fopen(string $filename, string $mode) . İlk $filename parametresi dosyanın yolunu temsil eder, ikincisi ise açılış modunu temsil eder. Açılma amacına ve dosyanın türüne bağlı olarak bu parametre aşağıdaki değerleri alabilir:

    "r" : Dosya salt okunur olarak açılır. Dosya mevcut değilse false değerini döndürür

    "r+" : Dosya salt okunur ve yazılabilir olarak açılır. Dosya mevcut değilse false değerini döndürür

    "w" : Dosya yazılmak üzere açılır. Böyle bir dosya zaten mevcutsa üzerine yazılır, yoksa oluşturulur.

    "w+" : Dosya yazılmaya ve okunmaya açılır. Böyle bir dosya zaten mevcutsa üzerine yazılır, yoksa oluşturulur.

    "a" : Dosya yazılmak üzere açılır. Böyle bir dosya zaten mevcutsa, veriler dosyanın sonuna yazılır ve eski veriler kalır. Dosya yoksa oluşturulur

    "a+" : Dosya okuma ve yazma için açılır. Dosya zaten mevcutsa veriler dosyanın sonuna eklenir. Dosya yoksa oluşturulur

Fopen fonksiyonunun çıktısı bir dosya tanımlayıcı olacaktır. Bu tanıtıcı dosya işlemleri ve dosyayı kapatmak için kullanılır.

İş bittikten sonra dosya, dosya tanımlayıcısını parametre olarak alan fclose() işlevi kullanılarak kapatılmalıdır. Örneğin bir dosyayı açıp kapatalım:

$fd = fopen("form.php", "r") or die("dosya açılamadı"); fclose($fd);

or die("hata metni") yapısı, fopen işlevi dosyayı açamadığında betiğin çalışmayı durdurmasına ve bazı hata mesajları görüntülemesine olanak tanır.

Bir dosyayı okuma

Bir dosyayı okumak için çeşitli işlevleri kullanabilirsiniz. Satır satır okuma için, bir dosya tanımlayıcı alan ve bir satır okuma döndüren fgets() işlevi kullanılır. Dosyanın tamamını satır satır inceleyelim:

fgets() her çağrıldığında, PHP işaretçiyi okunan satırın sonuna yerleştirir. Bir dosyanın sonunu izlemek için, dosya tamamlandığında true değerini döndüren feof() işlevi kullanılır. Ve dosyanın sonuna ulaşılana kadar fgets() fonksiyonunu kullanabiliriz.

Dosyanın tamamını okuma

Bu durumda dosyayı açıkça açmamız, bir tanıtıcı edinmemiz ve ardından dosyayı kapatmamız gerekmez.

Okumayı engelle

Ayrıca fread() işlevini kullanarak blok blok okuma da yapabilirsiniz, yani bir dosyadan belirli sayıda bayt okuyabilirsiniz:

fread() işlevi iki parametre alır: okunacak dosya tanıtıcısı ve okunacak bayt sayısı. Bir blok okunduğunda dosyadaki işaretçi o bloğun sonuna gider. Ayrıca feof() işlevini kullanarak bir dosyanın tamamlandığını takip edebilirsiniz.

Bir dosya yaz

Bir dosya yazmak için, dosyaya aşağıdaki satırı yazan fwrite() işlevini kullanın:

Başka bir fputs() işlevi de benzer şekilde çalışır:

Dosya işaretçisiyle çalışma

Bir dosyayı "w" modunda okumak veya yazmak için açarken, dosyadaki işaretçi başlangıca yerleştirilir. Okurken PHP verileri dosyadaki işaretçiyi okunan veri bloğunun sonuna taşır. Bununla birlikte, dosyadaki işaretçiyi manuel olarak da değiştirebilir ve onu isteğe bağlı bir konuma ayarlayabiliriz. Bunu yapmak için işlevi kullanmanız gerekir fseek aşağıdaki resmi tanıma sahiptir:

Int fseek (kaynak $tanıtıcı, int $offset [, int $whence = SEEK_SET ])

$handle parametresi bir dosya tanıtıcısını temsil eder. $offset parametresi, okuma/yazmanın başlayacağı dosyanın başlangıcına göre bayt cinsinden uzaklıktır. Üçüncü isteğe bağlı parametre ofsetin nasıl ayarlandığını belirtir. Üç değer alabilir:

    SEEK_SET : varsayılan değer, dosyanın başlangıcına göre ofset bayt cinsinden ofseti ayarlar

    SEEK_CUR : dosyadaki geçerli konumun başlangıcına göre ofset bayt cinsinden ofseti ayarlar

    SEEK_END : ofseti dosyanın sonundaki baytlara göre ayarlar

İşaretçi başarılı bir şekilde yüklenirse fseek() işlevi 0 değerini döndürür; işaretçi başarısız olursa -1 değerini döndürür.

Fonksiyonun kullanımına örnek:

$fd = fopen("hello.txt", "w+") or die("dosya açılamadı"); $str = "Merhaba dünya!"; // yazılacak satır fwrite($fd, $str); // satırı başlangıca yaz fseek($fd, 0); // dosya işaretçisini başlangıca yerleştirin fwrite($fd, "Oink"); // satırın başına yaz fseek($fd, 0, SEEK_END); // işaretçiyi sonuna yerleştirin fwrite($fd, $str); // sonuna başka bir satır yaz fclose($fd);

Fopen, fclose, feof, fgets, fgetss ve fscanf işlevlerini kullanma hakkında

Tüm olasılıkları listeleyelim

PHP gibi modern programlama dilleriyle çalışmanın faydalarından biri de mevcut özelliklerin sayısıdır. PHP, Perl'ün "Bir şeyi yapmanın birden fazla yolu vardır" sloganını kolayca benimseyebilir. Hakkında konuşuyoruz Dosya işleme hakkında. Ancak mevcut araçların çokluğuyla, işin yapılması için hangisinin en iyi olduğu sorusu ortaya çıkıyor. Tabii ki, bu sorunun cevabı dosyayı işlerken hedeflerinize bağlıdır, bu nedenle dilin tüm yeteneklerini öğrenmek zaman ayırmaya değer.

Geleneksel fopen yöntemleri

Fopen yöntemleri belki de eski C ve C++ programcılarının en aşina olduğu yöntemlerdir, çünkü bu programlama dilleriyle çalıştıysanız aşağı yukarı yıllardır parmaklarınızın ucunda olan araçlardır. Bu yöntemlerden herhangi biri için yaptığınız standart prosedür Liste 1'de gösterildiği gibi, dosyayı açmak için fopen'ı, verileri okumak için bir işlevi ve ardından dosyayı kapatmak için fclose'u kullanın.

Listeleme 1. fgets kullanarak bir dosyayı açma ve okuma
$file_handle = fopen("dosyam", "r"); while (!feof($file_handle)) ( $satır = fgets($file_handle); echo $satır; ) fclose($file_handle);

Bu işlevler çoğu deneyimli programcıya tanıdık gelse de nasıl çalıştıklarını analiz etmeme izin verin. Gerçekte şu adımları izliyorsunuz:

  1. Dosyayı aç. $file_handle dosyanın kendisine bir bağlantı saklar.
  2. Dosyanın sonuna gelip gelmediğinizi kontrol edin.
  3. Okuduğunuz her satırı yazdırarak sonuna ulaşana kadar dosyayı okumaya devam edin.
  4. Dosyayı kapatın.

Bunu aklımda tutarak burada kullanılan her dosya işlevine bakacağım.

fopen işlevi

Fopen işlevi bir dosyaya bağlantı kurar. "Bağlantı kurar" diyorum çünkü fopen bir dosyayı açmanın yanı sıra bir URL'yi de açabilir:

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

Bu program satırı yukarıdaki sayfaya bir bağlantı oluşturur ve onu yerel bir dosya olarak okumaya başlamanıza olanak tanır.

Not: Fopen'da kullanılan "r" seçeneği, dosyanın salt okunur olarak açık olduğunu gösterir. Bu yazıda ele alınan konuların kapsamına dosyaya yazmak dahil olmadığından parametrenin olası tüm değerlerini listelemeyeceğim. Ancak platformlar arası uyumluluk için ikili dosyalardan okuyorsanız "r"yi "rb" olarak değiştirmeniz gerekir. Aşağıda bu türün bir örneğini görüyorsunuz.

feof işlevi

feof komutu, okumanın dosyanın sonuna ulaşıp ulaşmadığını belirler ve Doğru veya Yanlış değerini döndürür. Gösterilen döngü "dosyam" dosyasının sonuna kadar devam eder. Bir URL okuyorsanız ve okunacak veri kalmadığından bağlantı zaman aşımına uğradığında feof'un False değerini döndürdüğünü unutmayın.

fclose işlevi

Liste 1'in ortasını atlayıp sonuna geçelim; fclose, fopen'ın tersini yapar: dosyaya veya URL'ye olan bağlantıyı kapatır. Bu işlevi yürüttükten sonra artık dosyadan veya yuvadan okuma yapamayacaksınız.

fgets işlevi

Liste 1'de birkaç satır geriye gidersek, dosya işleme sürecinin kalbine ulaşırsınız: dosyayı gerçekten okumak. İlk örnekte fgets işlevi sizin tercih ettiğiniz silahtır. Bir dosyadan bir satır veri alır ve bunu bir dize olarak döndürür. Buradan verileri görüntüleyebilir veya başka şekilde işleyebilirsiniz. Liste 1'deki örnek, dosyanın tamamını yazdırır.

Çalıştığınız veri yığınının boyutunu sınırlamaya karar verirseniz, sınırlamak için fgets'e bir argüman ekleyebilirsiniz. maksimum uzunluk Yakalanan veri satırları. Örneğin, bir satırın uzunluğunu 80 karakterle sınırlamak için aşağıdaki kodu kullanın:

$string = fgets($file_handle, 81);

C'deki satır sonu göstergesi olan "\0"ı düşünün ve uzunluğu gerçekte ihtiyacınız olandan bir karakter daha uzun olacak şekilde ayarlayın. Gördüğünüz gibi yukarıdaki örnekte 81 karakter kullanılıyor, oysa sizin 80 karaktere ihtiyacınız var. Belirli bir işlev için satır uzunluğu sınırı ayarlamanız gerektiğinde fazladan bir karakter eklemeyi alışkanlık haline getirin.

korku fonksiyonu

fgets işlevi, bir dosyayı okumak için kullanılabilen birçok işlevden yalnızca biridir. Çoğu durumda bir dosyayı satır satır işlemek en mantıklısı olduğundan, bu en sık kullanılan işlevlerden biridir. Aslında başka bazı özellikler de benzer yetenekler sunar. Öyle olsa bile, satır satır analiz her zaman ihtiyacınız olan şey değildir.

Ve burada fread'e erişiyoruz. Fread işlevinin fget'lerden biraz farklı bir amacı vardır: ikili dosyalardan (yani, başlangıçta insan tarafından okunabilen metinlerden oluşmayan dosyalar) okumak için tasarlanmıştır. "Satır" kavramı ikili dosyalar için geçerli olmadığından (mantıksal veri yapıları genellikle satırlara bölünmez), okunacak bayt sayısını belirtmeniz gerekir.

$fh = fopen("dosyam", "rb"); $veri = fread($file_handle, 4096);

Yukarıdaki örnekte 4096 bayt (4 KB) veri okunmaktadır. Belirttiğiniz değere bakılmaksızın fread'in maksimum 8192 bayt (8 KB) okuyacağını unutmayın.

Dosyanın 8 KB'tan büyük olmadığını varsayarsak, aşağıdaki program pasajının dosyanın tamamını tek satırda okuması gerekir.

$fh = fopen("dosyam", "rb"); $veri = fread($fh, dosya boyutu("dosyam")); fclose($fh);

Dosya boyutu daha büyükse geri kalanını okumak için bir döngü kullanmanız gerekecektir.

fscanf işlevi

Dize işlemeye geri dönecek olursak, fscanf aynı zamanda geleneksel C dosya kitaplığı işlevinin devamı niteliğindedir.Buna aşina değilseniz, fscanf, veri alanlarını bir dosyadaki değişkenlere okur.

list ($alan1, $alan2, $alan3) = fscanf($fh, "%s %s %s");

Bu işlevde kullanılan biçim dizeleri PHP.net gibi birçok kaynakta anlatılmıştır, bu nedenle bu bilgiyi burada tekrarlamayacağım. Dize biçimlendirmesinin çok esnek olduğunu söylemek yeterli. Ayrıca tüm alanların fonksiyonun döndürdüğü değişkene yerleştirildiğini de belirtmek gerekir. (C'de bunlar argüman olarak iletilir.)

fgets işlevi

fgetss işlevi geleneksel dosya işleme işlevlerinden farklıdır ve PHP'nin yeteneklerini daha iyi anlamanızı sağlar. Fgets gibi çalışır ancak bulduğu her şeyi atar. HTML etiketleri veya PHP, yalnızca çıplak metni bırakıyor. Aşağıdaki HTML dosyasını ele alalım.

Liste 2. Örnek HTML dosyası
Başlığım

Eğer "Çünkü sana acı verecek kimse yok" sözünün ne anlama geldiğini anlıyorsan, o zaman America grubunu çok fazla dinliyorsun



fgetss fonksiyonundan geçirelim.

Listeleme 3. fgetss'in kullanılması
$file_handle = fopen("dosyam", "r"); while (!feof($file_handle)) ( echo = fgetss($file_handle); ) fclose($file_handle);

Çıktı olarak alacağınız şey budur:

Başlığım "Çünkü sana acı vermeyecek kimse yok" sözünün ne anlama geldiğini anlıyorsan, o zaman America grubunu çok fazla dinliyorsun

fgeçiş işlevi

Bir dosyadan verileri nasıl okuduğunuzdan bağımsız olarak, fpassthru işlevini kullanarak standart çıkış kanalını kullanarak kalan verileri yazdırabilirsiniz.

fgeçiş($fh);

Bu işlev verileri yazdırır, böylece onu bir değişkene koymanıza gerek kalmaz.

Doğrusal olmayan dosya işleme: bir dosyada gezinme

Elbette yukarıda açıklanan işlevler yalnızca bir dosyadan sıralı olarak okuma yapmanıza olanak tanır. Daha karmaşık dosyalar, dosyanın başında veya sonunda dosyanın farklı bölümlerine taşınmayı gerektirebilir. Bunu yapmak için fseek fonksiyonuna ihtiyacınız var.

fseek($fh, 0);

Yukarıdaki örnek dosyanın başlangıcına geri döner. Dosyanın en başına gitmek istemiyorsanız (örneğin bir kilobayt yeterlidir) şunu yazmanız yeterlidir:

fseek($fh, 1024);

PHP V4.0'dan itibaren başka seçenekler de mevcuttur. Örneğin, mevcut konumunuzdan 100 bayt ileri gitmeniz gerekiyorsa aşağıdaki kodu kullanabilirsiniz:

fseek($fh, 100, SEEK_CUR);

Benzer şekilde, 100 bayta geri dönmek şu şekilde yapılır:

fseek($fh, -100, SEEK_CUR);

Dosyanın sonundan önceki 100 baytlık konuma geri dönmek istiyorsanız bunun yerine SEEK_END öğesini kullanın.

fseek($fh, -100, SEEK_END);

Yeni konuma ulaşıldığında verileri okumak için fgets, fscanf veya başka bir işlevi kullanabilirsiniz.

Not: fseek'i bir URL'ye başvuran dosya tanımlayıcılarda kullanamazsınız.

Bir dosyanın tamamını yakalayın

Şimdi PHP'nin benzersiz dosya işleme yeteneklerinden bazılarına bakmaya geçiyoruz: büyük veri bloklarını bir veya iki satırda işlemek. Örneğin, bir dosyayı nasıl yakalayabilir ve tüm içeriğini Web sayfanızda görüntüleyebilirsiniz? Fget'lerle döngü kullanmanın bir örneğini gördünüz. Peki bunu nasıl kolaylaştırabilirsiniz? İşlem, tüm dosyayı bir satıra yerleştiren fgetcontents kullanılarak neredeyse gülünç derecede kolaydır.

$dosyam = file_get_contents("dosya ismim"); echo $dosyam;

Bu en iyi seçenek olmasa da bu komutu daha da kısa yazabilirsiniz:

echo file_get_contents("dosyaadım");

Bu makale öncelikle yerel dosyaların işlenmesine odaklanmaktadır, ancak açıklanan işlevleri kullanarak diğer Web sayfalarını da yakalayabileceğinizi, görüntüleyebileceğinizi ve ayrıştırabileceğinizi belirtmekte fayda var.

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

Bu komut aslında şununla aynıdır:

$fh = fopen("http://127.0.0.1/", "r"); fgeçiş($fh);

Bu örneklere bakıp "Bu çok iş" diye düşünüyor olabilirsiniz. PHP geliştiricileri sizinle aynı fikirde. Böylece yukarıdaki komutu şu şekilde kısaltabilirsiniz:

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

Readfile işlevi, bir dosyanın veya Web sayfasının tüm içeriğini varsayılan çıktı arabelleğine çıkarır. Varsayılan olarak bu komut başarısız olduğunda bir hata mesajı görüntüler. Bu davranışı önlemek için (eğer istiyorsanız) şu komutu deneyin:

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

Elbette, dosyaların içeriğini işlemeniz gerekiyorsa, file_get_contents'in döndürdüğü tek satır muhtemelen çok fazla olacaktır. İlk önce split() işlevini kullanarak onu parçalara bölmek isteyebilirsiniz.

$dizi = split("\n", file_get_contents("dosyam"));

Peki bu işi sizin için yapacak mükemmel derecede uygun bir işlev varsa neden tüm bu karmaşıklığa ihtiyacınız var? PHP file() işlevi bu görevi tek adımda gerçekleştirir: öğeleri dosyanın satırları olan bir dize dizisi döndürür.

$dizi = dosya("dosyam");

Yukarıdaki iki örnek arasında ufak bir fark olduğunu belirtmek gerekir. Split komutu yeni satırları kaldırırken, file komutu dizi satırlarını yeni satırlarla bitirir (fget'lerde olduğu gibi).

Ancak PHP'nin yetenekleri yukarıda anlatılanların çok ötesine geçer. Yalnızca bir parse_ini_file komutuyla .ini dosyalarının tamamını PHP tarzında ayrıştırabilirsiniz. parse_ini_file komutu Liste 4'te gösterilenlere benzer dosyalar için geçerlidir.

Liste 4. Örnek .ini dosyası
; Yorum adı = "Kral Arthur" görevi = Kutsal Kase'yi aramak için favori renk = Mavi Samuel Clemens = Mark Twain Caryn Johnson = Whoopi Goldberg

Aşağıdaki komutlar bir dosyayı dizi olarak temsil eder ve ardından diziyi yazdırır:

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

Sonuç aşağıdaki çıktı olacaktır:

Listeleme 5. Çıktı
Dizi ( => Kral Arthur => Kutsal Kase'yi Aramak => Mavi => Mark Twain => Whoopi Goldberg)

Elbette bunu fark edebilirsiniz bu komut birleştirilmiş bölümler Bu varsayılan eylemdir, ancak bir Boolean değişkeni olan parse_ini_file:process_sections'ın ikinci bağımsız değişkenini kullanarak bunu kolayca özelleştirebilirsiniz. Process_sections'ı Doğru olarak ayarlayın.

$file_array = parse_ini_file("holy_grail.ini", true); print_r $dosya_dizisi;

Ve çıktınız şöyle görünecek:

Listeleme 6. Çıktı
Dizi ( => Dizi ( => Kral Arthur => Kutsal Kase'yi Aramak İçin => Mavi) => Dizi ( => Mark Twain => Whoopi Goldberg))

PHP, verileri kolayca ayrıştırılabilir çok boyutlu bir diziye yerleştirir.

Ancak konu PHP'de dosya işlemeye geldiğinde bu sadece buzdağının görünen kısmıdır. tidy_parse_file ve xml_parse gibi daha karmaşık işlevler sırasıyla HTML ve XML belgelerini ayrıştırmanıza yardımcı olabilir. Daha fazlasını almak için bölüme bakın detaylı bilgi Bu fonksiyonların işleyişi hakkında. Bu tür dosyalarla çalışıyorsanız her ikisi de dikkate alınmaya değerdir; ancak olası tüm dosya türlerine bakmak yerine, birkaç iyi dosyanın bulunduğu bu makalenin içeriğine daha yakından bakmak isteyebilirsiniz. Genel kurallarşu ana kadar anlattığım işlevlerle çalışmak için.

İyi programlama stili

Hiçbir zaman programınızdaki her şeyin amaçlandığı gibi çalışacağını varsaymayın. Örneğin: aradığınız dosya taşınmışsa ne olur? Bir izin değişikliği dosyanın içeriğini okuyamamanıza neden olursa ne olur? File_exists ve is_readable yöntemlerini kullanarak bir dosyanın varlığını ve okuma haklarını önceden kontrol edebilirsiniz.

Liste 7. file_exists ve is_readable'ı kullanma
$dosyaadı = "dosyam"; if (file_exists($dosyaadı) && is_readable ($dosyaadı)) ( $fh = fopen($dosyaadı, "r"); # İşleniyor fclose($fh); )

Ancak pratikte bu program parçası muhtemelen göreviniz için aşırıya kaçacaktır. Fopen tarafından döndürülen değerlerin işlenmesi daha basit ve daha doğrudur.

if ($fh = fopen($dosyaadı, "r")) ( # fclose($fh); işleniyor)

Fopen başarısız olursa False değerini döndüreceğinden, bu, dosyanın yalnızca dosya açılabiliyorsa işlenmesini sağlayacaktır. Elbette dosya mevcut değilse veya okunamıyorsa, dönüş değerinin negatif olmasını beklersiniz. Dolayısıyla böyle bir kontrol, tüm olası sorunların içine düştüğü bir tuzaktır. Alternatif olarak, dosya açılamıyorsa programdan çıkabilir veya bir hata mesajı görüntüleyebilirsiniz.

Fopen gibi file_get_contents, file ve readfile işlevleri de dosya açılamıyor veya işlenemiyorsa False değerini döndürür. fgets, fgetss, fread, fscanf ve fclose işlevleri de bir hata oluştuğunda False değerini döndürür. Elbette fclose haricinde, muhtemelen döndürdükleri sonuçları zaten işlemişsinizdir. fclose'a gelince, dosya tanıtıcısı düzgün kapanmazsa yapılabilecek pek bir şey yoktur, bu nedenle fclose'un dönüş değerini kontrol etmek genellikle gereksizdir.

Seçim senin

PHP'de hiçbir eksiklik yok etkili yollar Dosyaları okuma ve analiz etme. Fread gibi klasik işlevler çoğu zaman size güvenilir bir şekilde hizmet edebilir veya işi bitirmek için ihtiyacınız olan şey buysa, okuma dosyasının basitliği sizi daha çok cezbedebilir. Seçim gerçekten neyi başarmaya çalıştığınıza bağlıdır.

Büyük miktarda veri işliyorsanız fscanf'ı, örneğin file'yi sonraki split ve sprintf komutlarıyla birlikte kullanmaktan daha kullanışlı ve verimli bulacaksınız. Ancak büyük miktarda metni küçük değişikliklerle görüntülüyorsanız file , file_get_contents veya readfile işlevlerini kullanmak daha anlamlı olabilir. Bu çözüm muhtemelen doğru olacaktır: PHP'yi kullanmaönbelleğe almak ve hatta geçici bir proxy sunucusu oluşturmak için.

PHP dosyalarla çalışmak için birçok araç sağlar. Her birini daha iyi tanıyın ve üzerinde çalıştığınız proje için hangi araçların en iyi olduğunu öğrenin. Size geniş bir seçenek sunuluyor yazılım, bunları en etkili şekilde kullanın ve dosyalarınızı PHP ile işlerken eğlenin.

PHP, programlama dillerinden çok daha sonra ortaya çıktı ve konumlarını güçlendirdi ve sözdizimi, mantık, değişkenler ve diğer program nesneleri hakkında genel fikirler formüle etti. Dosyalar ve onlarla çalışma işlevleri ilerleme kaydetmedi ve doğal nedenlerden dolayı ortaya çıkan dosya kodlama sorunu bile kökten yeni çözümlere yol açmadı.

Genel açıklamalar

Dosyalar ne olursa olsun, ana iş açma, okuma/yazma ve kapatmadan oluşur. İşlenirken bir dosyaya erişimi engelleme/engellemeyi kaldırma işlevlerini kullanabilirsiniz, dosyadaki okuma/yazma konumunu ayarlayabilirsiniz - her şey uzak geçmişte olduğu gibi aynıdır.

PHP'de önemli bir nokta, dosyalarla çalışmaya yönelik işlevlerin ve bunları kullanma seçeneklerinin çokluğudur. Pratikte basit ama çalışan seçenekleri kullanmak yeterlidir. Bir dosya her şeyden önce program belleğidir. İçinde bilgi saklayabilirsiniz. Herhangi bir programın, herhangi bir web sitesinin amacı bilginin sunulması, işlenmesi ve güvenliğinin sağlanmasıdır.

Temel durum

Daha önce, en azından aşağıdan yukarıya uyumluluk gereksinimi sarsılmazdı. Yani, bir programlama dilinin bir sürümünde yazılan bir program, bir sonraki sürümde ideal olarak derlenir/yorumlanır. Modern programlamada durum böyle değildir. Bir dilin sözdizimsel yapılarının uyumluluğu gereksinimi tarih oldu ve stiller ile programlama araçları ile belirli araçların versiyonları arasındaki mücadele hayatlarının normu haline geldi.

Dosyalarla ve veritabanlarıyla çalışmak site arayüzü kadar önemlidir. Birincisi, platformu, barındırmayı veya dil sürümünü değiştirirken site kodunu değiştirmeye gerek kalmayacak şekilde oluşturulmalıdır. Dosyalarla çalışmaya yönelik arayüz ayrı bir komut dosyasına dahil edilmeli ve tam uyumluluk sağlamalıdır; tıpkı site tasarımının herhangi bir cihaza, tarayıcıya yeterince uyum sağlaması ve sitenin geri kalan işlevselliğini aynı yeteneklerle sağlaması gerektiği gibi.

Okuyun ve kendinizi değiştirin

Bir program kendini değiştirebilir mi, yani bir script gelişebilir mi? Bu soru bugüne kadar pek çok kişinin ilgisini çekiyor. Ancak görev çok daha pratik görünüyor: PHP, bir PHP dosyasını okuyor. Bir geliştirici her zaman belirli bir sorunu belirli bir kod yazarak çözemez. Bazen bir ziyaretçi siteye geldiğinde ve geliştirme aşamasında öngörülmeyen bir soruyu formüle ettiğinde bunu değiştirmek gerekebilir.

Diğer tüm durumlarda olduğu gibi öncelikle dosyayı açmanız gerekir. Bu dosyanın var olup olmaması önemli değil. Dosyanın var olduğu biliniyorsa (file_exists() işlevi olumlu yanıt verir), fopen() işlevi 'r', 'r+', 'a', 'a+' erişimiyle kullanılır. Dosya henüz mevcut değilse 'a', 'a+', 'w', 'w+' erişimine sahiptir. Bir dosyayı açmanın sonucu onun tanımlayıcısı olacaktır. Dosya fclose() işleviyle kapatılır.

Okuma sırasında işleme gerek olmadığında, bir dosyayı diziye okumak için PHP'yi kullanmak uygundur.

if (file_exists($fName)) (

$aLines = dosya($fİsim)

Bu seçenekte dosyanın her satırı sırayla dizi öğesine gider. file() veya file_get_contents() işlevlerinin dosyayı açıp kapatmasına gerek olmadığı unutulmamalıdır.

Giriş dosyası çok büyük olduğunda ve az miktarda bilgi bulmanız gerektiğinde veya başka nedenlerden dolayı, dosyayı satır satır okumak için PHP'yi kullanabilirsiniz. PHP bunu fgets() ve fgetc() işlevleriyle yapma olanağı sağlar.

$fvs = fopen($fİsim, "r")

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

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

Her iki seçenek de kusursuz çalışıyor. Ancak, daha sonra değişiklik yapmak üzere bir PHP dosyasının PHP okumasını gerçekleştirirken önlemler alınmalıdır. Bir ziyaretçinin site geliştirme aşamasında nasıl kullanacağını öngörmek her zaman mümkün olmamaktadır. Komut dosyalarının sitenin işlevleri dahilinde değiştirilmesi ve bu değişikliğin kontrolünün kaynak yöneticisi de dahil olmak üzere ziyaretçinin elinde olmaması daha iyidir.

Sonuçlar kaydediliyor

Alınan ve güncellenen bilgiler, fputs() fonksiyonu tarafından satır satır veya file_put_contents() fonksiyonu tarafından bir bütün olarak dosyaya yazılır.

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

$fvs = fopen($fİsim, "a")

sürü($fvs, LOCK_EX)

$cLine = "1 satır". Chr(10)

fputs($fvs, $cLine)

$cLine = "2 satır" . Chr(10)

fputs($fvs, $cLine)

sürü($fvs, LOCK_UN)

Satır satır kayıt seçeneğinde, kayıt işlemi sırasında verileri işleyebilirsiniz; ikinci durumda, yazılan dize veya dizi, dosyanın tamamına yerleştirilir.

$dosya = " scData.php "

$cContents = file_get_contents($dosya)

//giriş ekleme

$cContents .= "yeni giriş\n"

// dosyayı geri yaz

file_put_contents($dosya, $cİçerikler)

PHP dosyalarını okumak ve yazmak kolay ve doğaldır. Ancak şunu akılda tutmak önemlidir: her dosyanın bir adı, uzantısı ve yolu (klasörü) vardır. Bir PHP betiğinin dosyaları okuyabilmesi ve yazabilmesi için betiğin uygun haklara sahip olması gerekir. Barındırmada otomatik olarak gösterilirler, ancak bazı durumlarda genişletilmeleri gerekir.

Bazı durumlarda sonuçların test okuması yapılarak doğrulanması istenebilir. PHP dosyalarının yazılması, geliştirme sırasında bunu gerektirir, ancak bazı durumlarda site güvenliği veya güvenilirliği açısından veri kaydının kontrol edilmesi önemlidir.

PHP, MySQl, JavaScript ve özellikle tarayıcıların karakteristik bir özelliği: bazı hataların oluşmasına sessizce izin vermek. "Tanınmadı, yapılmadı..." - ön saflarda pek iyi bir uygulama değil Bilişim Teknolojileri ancak bu, geliştiricilere hata yapmamalarını ve temiz, yüksek kaliteli kod yazmalarını öğretir ki bu da fena değildir.

PHP ve gerçek belgelerle çalışma

PHP'nin bir PHP dosyasını okuması kesinlikle pratik açıdan ilgi çekicidir, ancak bu programlamanın alanıdır. Kullanıcı ve site ziyaretçisi, özellikle *.xlsx ve *.docx dosya formatlarında tablolar ve belgeler biçiminde görmeye alışkın olduğu uygulamalı nitelikteki bilgilerle ilgilenmektedir. Bunlar MS Excel ve MS Word formatındaki dosyalardır.

Malların, fiyatların ve özelliklerin listeleri genellikle tablolar şeklinde oluşturulur, bu nedenle PHP'nin Excel dosyasını okuması önemlidir.

PHPExcel ve PHPWord kütüphaneleri bu tür dosyalarla çalışacak şekilde geliştirilmiştir. Ancak *.xlsx ve *.docx dosyalarının içerikleri OOXML standardında sunulmaktadır, yani gerçek, anlaşılır belge zip arşivinde sunulmaktadır. Zip arşivi, resimler, nesneler, formüller ve diğer programlardan gelen ekleri içeren bir dosya kümesidir. Buradaki metin dosyaları, etiket biçimindeki açıklamalarla temsil edilir. Böyle bir dosyayı okumak yeterli değildir; kullanım ve değişiklik amacıyla içeriğini ve yapısını elde etmek için onu ayrıştırmanız gerekir.

Bu, okuma işleminin arşiv açma işlemine dönüşmesi anlamına gelir. Bu kütüphaneler belge arşivini bağımsız olarak açar ve geliştiriciye bu tür belgeleri okumak, işlemek ve yazmak için kapsamlı işlevler sağlar.

Excel tabloları

include_once 'PhpOffice/PhpExcel/IOFactory.php'

function scGetExcelFile($xls)(

$objPHPExcel = PHPExcel_IOFactory::load($xls)

$objPHPExcel->setActiveSheetIndex(0)

//bu dizi dizi dizilerini içeriyor

$aSheet = $objPHPExcel->getActiveSheet()

$dizi = dizi()

//tedavi

foreach($aSheet->getRowIterator() as $row)(

$cellIterator = $row->getCellIterator()

foreach($cellIterator as $cell)(

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

array_push($dizi, $öğe)

Excel dosyalarını okumak ve işlemek çok daha zordur Word belgeleri. Uygulamalı bilgileri okumak ve işlemek için ciddi bir proje uygulamanız gerekiyorsa en iyi seçenek, önce PHPWord kütüphanesine hakim olmaktır. Bu size iyi bir deneyim kazandıracak ve konunun ayrıntılarını hızlı bir şekilde anlamanızı sağlayacaktır.

Word Belgeleri

Sadece iki satır:

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

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

$cFileName belgesi artık işlenmeye hazır. Daha sonra arşiv açılır, web sitesinde görüntülenebilen, değiştirilebilen ve geri yazılabilen içerikleri seçilir ve analiz edilir.

$zipClass = yeni ZipArchive()

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

// belgenin tüm içeriğini oku

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

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

$cNameInExt = substr($cNameIn, -4)

if (($cNameInExt == ".xml") || ($cNameInExt == "rels")) (

// ".xml" ve ".xml.rels" uzantılı dosyalar belge tablosuna kaydedilir

// her xml satırı benzersiz bir sayı ile sırayla yazılır

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

$cBodyInLen = strlen($cBodyIn)

// diğer tüm dosyalar olduğu gibi belge klasörüne yazılır

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

$zipClass->getFromName($cNameIn, $cWorkPath); // dosya olarak içerik

Ne zaman açılacak fırsatlar PHP yardımı Excel ve PHP Word, gerçek belgeleri değiştirmenize ve içeriklerini istediğiniz zaman alakalı hale getirmenize olanak tanır. Günümüzün dinamik dünyasında bu çok önemli hale geliyor. Ağırlık merkezi uzun zamandan beri yerel kullanımdan çıktı bilgisayar ekipmanı sanal İnternet alanına. Bu nedenle, yerel Microsoft ürünlerinde tablo ve belge oluşturmak, yalnızca tablonun veya belgenin yaratıcısının değil aynı zamanda tüketicilerinin de erişebildiği bir web sitesinde bu tür belgelerle otomatik ve yarı otomatik modda çalışmaktan daha az verimlidir.

Metin dosyaları, başka bir hayat

İlk yaklaşıma göre metin dosyaları PHP dosyalarından veya uygulama belgelerinden daha basittir. Ancak burada düşünülmesi gereken bir şey var. Bu tür dosyaların okuma/yazma işlemleri yukarıda zaten belirtilmiştir ancak bu tür dosyaların anlamı çok daha önemlidir.

İstemci ve sunucu diye bir veri mevcut olduğundan (birincisi JavaScript'in hakimiyetindedir, ikincisi ise PHP'nin hakimiyetindedir), çerez ve oturum mekanizmaları bile komut dosyaları, sayfalar veya belirli işlemler arasında bilgi aktarma ihtiyacını karşılayamaz.

İstenilen değişiklikleri veritabanına yansıtmak mümkündür ancak tüm avantajları ve hızları nedeniyle, küçük geçici veya kalıcı metin dosyaları bilgi aktarımı için çok daha ilginç bir seçenek olabilir. Çok sayıda küçük dosya oluşturmuyorsanız ve bunların boyutlarını kontrol etmiyorsanız, bunlar veritabanının spesifik ve daha esnek bir versiyonu olabilir.

PHP bir metin dosyasını okumak hızlıdır, anında bir yapıya, diziye veya nesneye ayrıştırılabilir. İkincisi çok önemlidir, çünkü ayrılan zamanın dışında yaşayan nesneler yaratmanıza olanak tanır. PHP betiği, bildiğiniz gibi, yalnızca sunucuda bulunabilir ve yalnızca sayfa yüklendiğinde bir AJAX yanıtı oluşturulur veya başka bir nedenden dolayı PHP yorumlayıcısının başlatılmasına neden olur.

Bir metin dosyasının geliştiricinin içeriği ve yapısı olduğunu düşünürseniz, bir PHP dosyası yorumlayıcının sözdizimi artı geliştiricinin mantığıdır ve html, css, xml "etiketli" açıklamalar daha anlamsal öğelerdir, ancak düzenlenmiştir Statik standartlara göre. Dosyaların yeni içerik edinme zamanının muhtemelen geldiği ve bunların kalitesini ve kullanım mantığını bunun belirlemesi gerektiği sonucuna varılabilir. Tam da programlamanın, gelişiminin bir sonraki aşamasına henüz hazır olmaması nedeniyle, bugün dosyalar yalnızca geliştiricinin oluşturduğu ve kullanımlarını belirlediği dosyalar olarak kalır.

En ilginç ve gelecek vaat eden şey, ihtiyaç duyulduğunda PHP'nin bir PHP dosyasını bağımsız olarak okumasıdır. Ve basit bir PHP'nin bir dosyadan bir satırı okuması, en azından kaydedildiği durumda bir nesnenin yaratılmasıyla sonuçlanır. Bunlar pek tanıdık fikirler olmasa da modern dünyada her şey çok hızlı değişiyor.

16.5K

Aslında bir php dosyasının nasıl açılacağı büyük bir sorun değildir. Ormanın ortasındayken bir şişe birayı açmak daha zor olabilir. Ancak yalnızca hevesli programcılar bu şekilde düşünür. Yeni başlayanlar için size PHP'nin dosyalarla çalışmaya yönelik tüm yeteneklerini anlatacağız:

php dosyaları

Php uzantılı dosyalar aynı isimli programlama dilinde yazılmış kodlar içerir. Diğer dillerden farklı olarak php, sunucu taraflı bir programlama dilidir. Yani sunucu tarafında çalışır. Bu nedenle, kodunda hata ayıklamak için istemci makineye yerel bir sunucunun kurulması gerekir.

Php dosyalarıyla çalışmak için özel uygulamalar kullanılır - yazılım editörleri. En yaygın olanları şunlardır:

  • Dreamweaver.
  • PHPEdit.
  • Eclipse PHP Geliştirme.
PHP tabanlı web siteleri oluştururken program kodunu yeniden kullanmanız gerekebilir. Bu gibi durumlarda başka bir dosyada bulunan hazır çözümleri bağlamak uygundur. Bunun için include yapısı kullanılır. Sözdizimi şöyledir:

dosya adını ekle

Bağlantı örneği:

Dahil edilen dosya:


Bir dosyanın dahil edilmesi require yapısı kullanılarak da mümkündür. Dahil etmenin aksine, program kodu yürütülmeden önce dosyayı içerir. Kodda require kullanıldığında bu dosyaya yalnızca bir çağrı yapılabilir. Tekrar erişildiğinde sistem genel bir hata mesajı görüntüleyecek ve programın yürütülmesini durduracaktır.

Include yapısı yalnızca programın yürütülmesi sırasında kaynağı içerir. Php dosyasının çoklu okunmasını destekler. Bir hata oluşursa yalnızca bir uyarı mesajı görüntülenecek ve kod yürütmeye bir sonraki satırdan devam edilecektir.

Dosyaları açma ve kapatma

Php'de dosyalarla yapılan tüm işlemler birkaç aşamada gerçekleştirilir:

  • Bir dosyayı açmak;
  • İçerik düzenleme;
  • Dosyayı kapatıyorum.

Fopen() fonksiyonu bir dosyayı açmak için kullanılır. Sözdizimi şöyledir:

int fopen(string dosya adı, string modu [, int use_include_path])

Kabul edilen argümanlar:

  • string dosya adı – dosya adı veya dosyanın mutlak yolu. Dosyanın yolu belirtilmezse geçerli dizinde aranacaktır. Aradığınız dosya eksikse sistem bir hata mesajı görüntüleyecektir. Örnek:

  • dize modu – dosya açma modunu gösterir. Argüman tarafından kabul edilen değerler:
  • r – dosya yalnızca okumak için açılır, dosya işaretçisi başlangıçta ayarlanır;
  • r+ – dosya okuma ve yazmaya açık;
  • w – yalnızca yazmak için yeni bir dosya oluşturur. Aynı adda bir dosya zaten mevcutsa içindeki tüm veriler otomatik olarak silinir;
  • w+ - yazma ve okuma için yeni bir dosya oluşturur. Böyle bir dosya mevcut olduğunda, yeni veriler onun verilerinin üzerine tamamen yazılır;
  • a – dosya yazmaya açıktır. İşaretçi sonunda ayarlanır. Yani php dosyasına yazmaya baştan değil sondan başlanacak;
  • a+ – bir dosyayı okuma-yazma modunda açar. Kayıt sondan başlayacaktır;
  • b – ikili veri içeren bir dosyayla çalışma modu (ikili sayı sisteminde). Bu mod yalnızca işletim sistemi Pencereler.

Bir dosyaya erişimi kapatmak için fclose() işlevini kullanın. Sözdizimi:

int fclose (int dosyası), burada int dosyası kapatılacak sitenin tanıtıcısıdır.

Her okuma veya yazma işleminden sonra dosyanın bu fonksiyonla kapatılması gerekir. Aksi takdirde dosya için oluşturulan akış açık kalır. Bu da gereksiz sunucu kapasitesi tüketimine yol açmaktadır.

Örnek:

Dosyaları okuma ve yazma

Bir dosyanın tüm içeriğini basitçe görüntülemek için readfile() işlevi idealdir. Sözdizimi şöyledir:

readfile (string filename) ; burada dize dosya adı dize dosya adıdır (bir tanıtıcı değil).


Aynı dosya fpassthru() işlevi kullanılarak okunabilir. Verileri uç işaretçi konumundan dosyanın sonuna kadar okur. Sözdizimi şöyledir:

int fpassthru (int dosyası)

İşlev, bir dosyanın açılıp kapatılmasını gerektirir. Örnek:

Sonuç bir öncekine benzer.

Php'deki dosyalarla çalışma işlevleri, içeriği satır satır ve karakter karakter okumanıza olanak tanır:

  • string fgets (int dosyası, int uzunluğu)– fonksiyon uzunluk uzunluğunda bir dize okur. Örnek:

  • string fread (int dosyası, int uzunluğu)– eylem öncekiyle aynıdır.

Bir dosyaya metin verisi yazmak için iki özdeş işlev vardır:

  • int fputs (int dosyası, string string [, int uzunluk])
  • int fwrite(int dosyası, string string [, int uzunluk ])

İşlevler bir dosya int dosyasına belirtilen uzunlukta bir dize dizesi yazar int uzunluk ( isteğe bağlı argüman). Örnek:

Dosya oluşturma ve silme

Bir php dosyası oluşturmak için fopen() fonksiyonunu "w" veya "w+" erişim modunda kullanabilirsiniz. Veya touch() işlevi. Dosya değişiklik zamanını ayarlar. Aranan isimde eleman yoksa oluşturulacaktır. Sözdizimi.




Tepe