Php bir dosya hakkında bilgi alır. Bir dosya hakkında bilgi almak. Bir dosyayı standart çıktıya yeniden yönlendirme

  • 03.11.2019

İşlev, belirtilen dosya için işletim sistemi tarafından sağlanan tüm bilgileri bir araya toplar ve bir dizi olarak döndürür.

Sözdizimi:

Dizi statüsü (string $ dosyaadı)

Bu dizi her zaman belirtilen anahtarlara sahip aşağıdaki öğeleri içerir:

0 - cihaz;
1 - inode düğümü sayısı;
2 - dosya koruma öznitelikleri;
3 - dosyanın eşanlamlı sayısı ("sabit" bağlantılar);
4 - sahibinin kimliği;
5 - grup gid;
6 - cihaz türü;
7 - bayt cinsinden dosya boyutu;
8 - 1 Ocak 1970'ten bu yana saniye cinsinden son erişim zamanı;
9 - dosya içeriğinin son değişikliğinin zamanı;
10 - dosya özniteliklerindeki son değişikliğin zamanı;
11 - blok boyutu;
12 - işgal edilen blokların sayısı;

Bu dizi, Unix sistemlerinde bulunan bilgileri tutar. Windows'ta birçok alan boş olabilir.

$ Filename bir dosya adı değil, sembolik bir bağın adını belirtiyorsa, bu bağın başvurduğu dosya hakkındaki bilgiler (bağlantı hakkında değil) döndürülür.

fileinode ()

Bir dosyanın inode numarasını alın (PHP 3, PHP 4, PHP 5)

Açıklama:

Int dosya modu (dize dosya adı)

Fonksiyon, dosyanın inode numarasını veya hata durumunda FALSE değerini döndürür.

Yorum Yap

dosya sahibi ()

Dosya sahibi kimliğini alın (PHP 3, PHP 4, PHP 5)

Açıklama:

Int dosya sahibi (dize dosya adı)

İşlev, belirtilen dosyanın sahibinin sayısal kimliğini veya hata durumunda FALSE değerini döndürür. Sahibin adını bir dizge olarak almak için posix_getpwuid () işlevini kullanın.

Yorum Yap: Bu işlevin sonuçları önbelleğe alınır. Daha fazla bilgi için clearstatcache () bölümüne bakın.

PHP 5.0.0'dan itibaren, bu işlev bazı url sarmalayıcıları ile de kullanılabilir.

fileperms ()

Dosya izinleri bilgilerini alın (PHP 3, PHP 4, PHP 5)

Açıklama:

Int dosya türleri (dize dosya adı)

İşlev, bir hata durumunda belirtilen dosya veya FALSE ile ilgili haklar hakkında bilgi verir.

Yorum Yap: Bu işlevin sonuçları önbelleğe alınır. Daha fazla bilgi için clearstatcache () bölümüne bakın.

PHP 5.0.0'dan itibaren, bu işlev bazı url sarmalayıcıları ile de kullanılabilir. Stat () ailesi fonksiyonları tarafından desteklenen paketleyicilerin bir listesi için Ek'e bakın. M.

Sekizlik gösterimde hakların çıkarımı

echo substr (sprintf ("% o", fileperms ("/ tmp")), -4);
echo substr (sprintf ("% o", fileperms ("/ etc / passwd")), -4);
?>

Bu çıktı:

1777
0644

Haklarla ilgili tüm bilgileri görüntüleme

$ perms \u003d fileperms ("/ etc / passwd");

eğer (($ perms & 0xC000) \u003d\u003d 0xC000) (
// Priz
$ bilgi \u003d "s";
) elseif (($ perms & 0xA000) \u003d\u003d 0xA000) (
// Sembolik bağlantı
$ bilgi \u003d "l";
) elseif (($ perms & 0x8000) \u003d\u003d 0x8000) (
// Olağan
$ bilgi \u003d "-";
) elseif (($ perms & 0x6000) \u003d\u003d 0x6000) (
// Özel blok
$ bilgi \u003d "b";
) elseif (($ perms & 0x4000) \u003d\u003d 0x4000) (
// Dizin
$ bilgi \u003d "d";
) elseif (($ perms & 0x2000) \u003d\u003d 0x2000) (
// Özel karakter
$ bilgi \u003d "c";
) elseif (($ perms & 0x1000) \u003d\u003d 0x1000) (
// FIFO akışı
$ bilgi \u003d "p";
) Başka (
// Bilinmeyen
$ bilgi \u003d "u";
}

// Sahip
$ bilgi. \u003d (($ perms & 0x0100)? "r": "-");
$ bilgi. \u003d (($ perms & 0x0080)? "w": "-");
$ info. \u003d (($ perms & 0x0040)?
(($ perms & 0x0800)? "s": "x"):
(($ perms & 0x0800)? "S": "-"));

// Grup
$ bilgi. \u003d (($ perms & 0x0020)? "r": "-");
$ bilgi. \u003d (($ perms & 0x0010)? "w": "-");
$ info. \u003d (($ perms & 0x0008)?
(($ perms & 0x0400)? "s": "x"):
(($ perms & 0x0400)? "S": "-"));

// Dünya
$ bilgi. \u003d (($ perms & 0x0004)? "r": "-");
$ bilgi. \u003d (($ perms & 0x0002)? "w": "-");
$ info. \u003d (($ perms & 0x0001)?
(($ perms & 0x0200)? "t": "x"):
(($ perms & 0x0200)? "T": "-"));

echo $ bilgi;
?>

Sonuç:

R - r - r--

fnmatch ()

Dosya adı kalıbı ile eşleşiyor mu (PHP 4\u003e \u003d 4.3.0, PHP 5)

Açıklama:

Bool fnmatch (dize deseni, dize dizesi [, int bayrakları])

fnmatch (), sağlanan dize parametresinin belirtilen kabuk joker karakteriyle eşleşip eşleşmediğini kontrol eder.

Bu işlev dosya adlarıyla çalışırken kullanışlıdır, ancak normal bir satırda da kullanılabilir. Ortalama bir kullanıcı, en azından en basit şekliyle "?" Kabuk ikamelerine aşinadır. ve "*", dolayısıyla sitenin ön ucunda arama yapmak için ereg () veya preg_match () yerine fnmatch () kullanmak normal ifadelere aşina olmayan kullanıcılar için çok daha uygun olabilir.

Rengin kabuk joker karakter deseniyle eşleşip eşleşmediğini kontrol eder.

eğer (fnmatch ("* gry", $ renk)) (
echo "bir çeşit gri ...";
}
?>

Bu özellik şu anda Windows ve diğer POSIX uyumlu olmayan sistemlerde mevcut değildir.

Açık bir dosya işaretçisi kullanarak bir dosya hakkındaki bilgileri alır (PHP 4, PHP 5)

Açıklama:

Dizi fstat (kaynak tutamacı)

Dosya işaretçisi tutamacına göre açık bir dosya hakkında istatistiksel bilgileri toplar. Bu işlev stat () işlevine benzer, tek farkı bir dosya adı üzerinde değil, açık bir dosya tanıtıcısı üzerinde çalışmasıdır.

Bir dosya için istatistiksel bilgiler içeren bir dizi döndürür; dizi biçimi, stat () işlevi açıklama sayfasında ayrıntılı olarak açıklanmıştır.

Fstat () işlevinin kullanımına bir örnek

// dosyayı aç
$ fp \u003d fopen ("/ etc / passwd", "r");

// istatistikleri topla
$ fstat \u003d fstat ($ fp);

// dosyayı kapat
fclose ($ fp);

// sadece ilişkili kısmı göster
print_r (dizi_slice ($ fstat, 13));

Bu örnek şuna benzer bir sonuç verecektir:

Dizi
=> 771
=> 488704
=> 33188
=> 1
=> 0
=> 0
=> 0
=> 1114
=> 1061067181
=> 1056136526
=> 1056136526
=> 4096
=> 8
)

Yorum Yap: Dosyanın sunucunun dosya sisteminden erişilebilir olması gerektiğinden, bu işlev uzak dosyalarla çalışmak için geçerli değildir.

is_writable ()

Bir dosyanın yazılabilir olup olmadığını belirler (PHP 4, PHP 5)

Açıklama:

Bool is_writable (dize dosya adı)

Dosya adı varsa ve yazılabilir ise DOĞRU döndürür. Dosya adı bağımsız değişkeni, dizinleri yazma erişilebilirliği için test etmenize olanak sağlayan bir dizin adı olabilir.

PHP'nin dosyaya web sunucusunu çalıştıran kullanıcı olarak (genellikle "hiç kimse") erişebileceğini unutmayın. Güvenli mod kısıtlamaları dikkate alınmaz.

Yorum Yap: Bu işlevin sonuçları önbelleğe alınır. Daha fazla bilgi için clearstatcache () bölümüne bakın.

PHP 5.0.0'dan beri, bu işlev bazı url sarmalayıcılarla da kullanılabilir

Bir dosya veya sembolik bağlantı hakkında bilgi alın (PHP 3\u003e \u003d 3.0.4, PHP 4, PHP 5)

Açıklama:

Dizi lstat (dize dosya adı)

Dosya adı adlı bir dosya veya sembolik bağlantı için istatistikleri toplayın. Bu işlev stat () ile aynıdır, tek fark, dosya adı sembolik bir bağ ise, işaret ettiği dosyanın değil, sembolik bağın durumu döndürülür.

Lstat () tarafından döndürülen dizinin yapısı hakkında bilgi için stat () işlevi kılavuz sayfasına bakın.

Yorum Yap: Bu işlevin sonuçları önbelleğe alınır. Daha fazla bilgi için clearstatcache () bölümüne bakın.

PHP 5.0.0'dan itibaren, bu işlev bazı url sarmalayıcıları ile de kullanılabilir.

dosya zamanı

Dosyaya en son erişildiği zamanı döndürür.

Sözdizimi:

Int dosya zamanı (dize dosya adı)

Dosya bulunmazsa yanlış döndürür.

Dosyanın son erişim zamanı özniteliği, dosyanın verileri her okunduğunda değiştirilir. Bu, dosyalar ve dizinlerle yoğun bir şekilde çalışırken performansı büyük ölçüde düşürdüğünden, bu özniteliğin değiştirilmesi genellikle işletim sistemlerinde engellenir ve bu durumda işlev işe yaramaz.

filemtime

Dosyanın en son değiştirildiği zamanı döndürür veya dosya eksikse false.

Sözdizimi:

Int filemtime (string $ dosyaadı)

filectime

Dosyanın oluşturulma zamanını döndürür.

Sözdizimi:

Int filectime (string $ dosyaadı)

dosya boyutu

Dosyanın boyutunu bayt olarak veya dosya yoksa false olarak döndürür.

Sözdizimi:

Int dosya boyutu (string $ dosyaadı)

Değiştirme zamanını ayarlar.

Sözdizimi:

Int touch (string $ dosyaadı [, int $ zaman damgası])

Belirtilen $ dosya adının değişiklik zamanını $ timestamp olarak ayarlar (1 Ocak 1970'den bu yana saniye cinsinden).

İkinci parametre belirtilmezse, geçerli zaman varsayılır. Hata durumunda yanlış döndürür.

Belirtilen isimde bir dosya yoksa boş oluşturulur.

Bir dosyanın veya dizinin erişim modunu değiştirir (PHP3, PHP4, PHP5)

Açıklama:

Bool chmod (dize dosya adı, int modu)

Dosya adı parametresinde iletilen dosyanın veya dizinin erişim modunu mod parametresinde geçirilen modla değiştirmeye çalışır.

Modun otomatik olarak sekizlik biçime dönüştürülmediğini, dolayısıyla dizelerin ("g + w" gibi) beklendiği gibi çalışmayacağını unutmayın. Modun doğru ayarlandığından emin olmak için mod parametresinde geçirilen değerin önüne sıfır (0) koyun:

chmod ("/ somedir / somefile", 755); // ondalık, yanlış yol
chmod ("/ somedir / somefile", "u + rwx, go + rx"); // dize, yanlış yol
chmod ("/ somedir / somefile", 0755); // sekizlik, doğru yol
?>

Mod parametresinin değeri, sırasıyla dosyanın sahibi, ait olduğu grup ve diğer kullanıcılar için erişim düzeyini belirleyen üç sekizlik sayıdan oluşur. Kullanıcı seviyesini tanımlayan sayı, hakları tanımlayan değerlerin toplanmasıyla hesaplanabilir:

1 - yürütme erişimi,
2 - yazma erişimi,
4 - okuma erişimi.

"Man 1 chmod" ve "man 2 chmod" komutları ile Unix sistemlerindeki izinler hakkında daha fazla bilgi edinebilirsiniz.

// Sahip için okuma ve yazma erişimi, diğerleri için erişim yok
chmod ("/ somedir / somefile", 0600);
// Sahip için yazma ve okuma erişimi, diğerleri için okuma erişimi
chmod ("/ somedir / somefile", 0644);
// Sahip için tam erişim, diğerleri için okuma ve yürütme erişimi
chmod ("/ somedir / somefile", 0755);
// Sahip için tam erişim, sahip grubu için okuma ve yürütme erişimi
chmod ("/ somedir / somefile", 0750);
?>

Başarı durumunda TRUE, hata durumunda FALSE döndürür.

Not: Geçerli kullanıcı, PHP'nin çalıştırdığı kullanıcıdır. Bu kullanıcının, adı altında komut kabuğuna veya FTP hesabına eriştiğiniz kullanıcıdan farklı olması olasıdır.

Not: Dosyaya sunucunun dosya sisteminden erişilebilmesi gerektiğinden, bu işlev uzak dosyalarla çalışmak için geçerli değildir.

Not: Güvenli mod etkinleştirildiğinde, PHP, çalıştığınız dosya veya dizinin çalıştırılan komut dosyasıyla aynı UID'ye sahip olup olmadığını kontrol eder. Ayrıca SUID, SGID ve yapışkan bitleri ayarlayamazsınız.

(PHP 3, PHP 4, PHP 5)

stat - Bir dosya hakkında bilgi alır

Açıklama

dizi stat (dize dosya adı)

Dosya adı hakkında istatistiksel bilgiler toplar. Dosya adı sembolik bir bağlantıysa, bağlantı hakkında değil dosyanın kendisi hakkında bilgi toplanır. Fonksiyon lstat () işleve özdeş stat () ancak bu durumda sembolik bağın kendisi hakkında bilgi döndürecektir.

Hata durumunda, stat () dönecek YANLIŞ ... Ayrıca bir uyarı da yapacak.

Dosya hakkında bir dizi istatistiksel bilgi döndürür. Dizi aşağıdaki öğeleri içerir. Endeksleme sıfırdan başlar. Ayrıca, herhangi bir özelliğe erişim, her parametrenin karşısında gösterilen ilişkilendirici anahtar ile elde edilebilir; bu özellik PHP 4.0.6'dan beri ortaya çıkmıştır:

Tablo 1. Fonksiyonun sonucunun formatı stat () ve fstat ()

* - yalnızca st_blksize türünü destekleyen sistemlerde mevcuttur, diğer sistemler (örn. Windows) -1 döndürür.

Komut istemi:PHP 5.0.0'dan itibaren, bu işlev bazı url sarmalayıcılarla da kullanılabilir. İşlev ailesi tarafından desteklenen paketleyicilerin listesi stat (), içine bakmak

16.5K

Aslında, bir php dosyasını açmaktan çok büyük bir sorun değil. Ormanın ortasındayken bir şişe bira açmak daha zor olabilir. Ancak sadece hevesli programcılar böyle düşünüyor. Ve yeni başlayanlar için, dosyalarla çalışmak için size php'nin tüm olasılıklarından bahsedeceğiz:

Php dosyaları

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

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

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

dosya adını dahil et

Bağlantı örneği:

Dahil edilen dosya:


Gerekli yapı kullanılarak bir dosya dahil etmek de mümkündür. İnclude'den farklı olarak, dosyayı kod çalıştırılmadan önce içerir. Kodda zorunlu olarak bu dosyaya yalnızca bir çağrı yapılabilir. Tekrar ararsanız, sistem genel bir hata mesajı verir ve programın yürütülmesini durdurur.

İnclude yapısı, kaynağı yalnızca programın yürütülmesi sırasında 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ütme sonraki satırdan devam edecektir.

Dosyaları açma ve kapatma

Php'de tüm dosya işlemleri birkaç aşamada gerçekleştirilir:

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

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

int fopen (dize dosya adı, dize modu [, int kullanım_include_path])

Kabul edilen argümanlar:

  • string dosya adı - dosya adı veya mutlak yolu. Dosyanın yolu belirtilmezse, mevcut dizinde aranacaktır. Gerekli dosya eksikse, sistem bir hata mesajı görüntüler. Misal:

  • string mode - dosya açma modunu gösterir. Bağımsız değişken tarafından kabul edilen değerler:
  • r - dosya sadece okunmak için açıktır, dosya işaretçisi başlangıçta ayarlanır;
  • r + - dosya okuma ve yazma için açık;
  • w - yeni bir salt yazılabilir dosya oluşturulur. Aynı ada sahip bir dosya zaten mevcutsa, içindeki tüm veriler otomatik olarak silinir;
  • w + - yazmak ve okumak için yeni bir dosya oluşturulur. Böyle bir dosya varsa, verilerinin üzerine yenileri yazılır;
  • a - dosya yazmaya açık. İşaretçi en sona konumlandırılmıştır. Yani php dosyasına yazmak baştan değil, sondan başlayacaktır;
  • a + - bir dosyayı okuma ve yazma modunda açar. Kayıt sondan başlayacak;
  • b - ikili veri içeren bir dosyayla çalışma modu (ikili analiz sisteminde). Bu mod yalnızca Windows işletim sisteminde mevcuttur.

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 dosya bu işlevle kapatılmalıdır. Aksi takdirde, dosya için oluşturulan akış açık kalır. Bu da gereksiz sunucu kapasitesi tüketimine yol açar.

Misal:

Dosyaları okuma ve yazma

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

readfile (dize dosya adı), burada dize dosya adı, dize dosya adıdır (bir tanımlayıcı değil).


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

int fpassthru (int dosyası)

İşlev, bir dosyanın açılmasını ve kapatılmasını gerektirir. Misal:

Sonuç, öncekine benzer.

PHP'deki dosyalarla çalışmak için işlevler, içeriği satır satır ve karakter karakter okumanızı sağlar:

  • string fgets (int dosyası, int uzunluk) - işlev uzunluk uzunluğunda bir dizi okur. Misal:

  • string fread (int dosyası, int uzunluk)- eylem bir öncekiyle aynıdır.

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

  • int fputs (int dosyası, dize dizesi [, int uzunluk])
  • int fwrite (int dosya, dize dizesi [, int uzunluk])

İşlevler int dosyasına, belirtilen uzunlukta int uzunluğunda bir dize dizesi yazar ( isteğe bağlı argüman). Misal:

Dosya oluşturma ve silme

Bir php dosyası oluşturmak için, "w" veya "w +" erişim modunda fopen () işlevini kullanabilirsiniz. Veya dokunma () işlevi. Dosya değiştirme zamanını ayarlar. Gerekli ada sahip herhangi bir öğe yoksa, oluşturulacaktır. Sözdizimi.

Bir görev
İzinler ve sahip adı gibi dosya meta verilerini okumalısınız.

Karar
Bir dizi dosya bilgisi döndüren stat () çağrısı:

$ bilgi \u003d stat ("harpo.php");

Tartışma
Stat () işlevi, hem sayısal hem de dize indisli bir dosya bilgisi dizisi döndürür.

Döndürülen dizinin mod öğesi izinleri temel 10 tamsayı olarak içerir.Bu kafa karıştırıcıdır çünkü izinler genellikle sembolik olarak (yani, ls -rw-r - r-- komutunun çıktısı) veya sekizlik sayılar (ör. 0644). Base_convert () işlevi, izinleri daha anlaşılır bir biçime dönüştürmenize olanak tanır, bu da izinleri sekizlik sayıya dönüştürür:

$ file_info \u003d stat ("/ tmp / session.txt");
$ izinler \u003d base_convert ($ file_info ["mod"], 10,8);

Sonuç, altı basamaklı sekizlik bir sayıdır. Örneğin, ls komutu /tmp/session.txt hakkında şunu gösteriyorsa:

Daha sonra $ file_info ["mode"] öğesinin değeri 33204 ve $ permissions değişkeninin değeri 100664'tür.

Son üç basamak (664) dosyaya erişim haklarını tanımlar: kullanıcı (okuma ve yazma), grup (okuma ve yazma) ve diğer herkes (okuma). Üçüncü rakam 0, dosya için ne setuid bitinin ne de setgid bitinin ayarlanmadığı anlamına gelir. En soldaki 10 rakamı bunun normal bir dosya (soket, sembolik bağlantı veya başka bir özel dosya değil) olduğunu gösterir.

Stat () işlevi hem sayısal hem de dize indisleri olan bir dizi döndürdüğünden, foreach döngüsünün bu dizide çalıştırılmasının bir sonucu olarak, her değerin iki kopyasını elde ederiz. Ve bu yüzden, döndürülen dizinin 0 öğesinden öğe 12'ye kadar olan for döngüsüne başvurmamız gerekir.

Fstat () stat () 'e benzer ve bir dosya tanımlayıcısını (fopen () veya popen () tarafından döndürülen) argüman olarak alır. Fstat () yalnızca yerel dosyalarda kullanılabilir ve fopen () 'e iletilen URL'lerde kullanılamaz.
PHP stat () işlevi pahalı bir temel stat (2) sistem çağrısı yapar.

PHP, ek yükü en aza indirmek için stat (2) çağrısının sonuçlarını önbelleğe alır. Bu nedenle, bir dosya üzerinde stat () 'i çağırırsanız, izinlerini değiştirirseniz ve aynı dosya üzerinde stat ()' i tekrar çağırırsanız, aynı sonuçları alırsınız. PHP'yi dosya meta verilerini aşırı yüklemeye zorlamak için, PHP arabellek bilgilerini temizleyen clearstatcache () işlevini çağırın. PHP, meta verileri döndüren diğer işlevler için de bu önbelleğe ihtiyaç duyar:

File_exists (), fileatime (), filectime (), filegroup (), fileinode (), filemtime (), fileowner (),
fileperms (), dosya boyutu (), filetype (), fstat (), is_dir (), is_executable (), is_file (), is_link (), is_readable (), is_writable () ve lstat ().

Dosyayla çalışmaya başlamadan önce, var olduğundan emin olmanız önerilir. Bu görevi gerçekleştirmek için yaygın olarak iki işlev kullanılır:

file_exists () ve is_file ().

F ilе_exists () işlevi belirtilen dosyanın var olup olmadığını kontrol eder. Dosya varsa, işlev TRUE değerini, aksi takdirde FALSE değerini döndürür. File_exists () işlevinin sözdizimi şöyledir:

bool file_exists (dize dosyası)

Bir dosyanın varlığını kontrol etmeye bir örnek:

eğer (! dosya_var ($ dosyaadı)):

print "Dosya $ dosya adı yok!";

is_file ()

İs_file () işlevi, belirtilen dosyanın var olup olmadığını ve ona okunup / yazılabileceğini kontrol eder. Özünde, is_file (), sadece bir dosyanın var olup olmadığını değil, aynı zamanda veri okuyup yazıp yazamayacağını da kontrol eden daha sağlam bir file_exists () sürümüdür:

bool is_file (dize dosyası)

Aşağıdaki örnek, bir dosyanın var olduğunun ve çalıştırılabileceğinin nasıl doğrulanacağını gösterir:

$ dosya \u003d "somefile.txt";

eğer (is_file ($ dosya)):

print "$ file dosyası geçerli ve var!";

print "$ file dosyası yok veya geçerli bir dosya değil!";

Gerekli dosyanın var olduğundan ve onunla çeşitli okuma / yazma işlemlerini gerçekleştirebileceğinizden emin olduktan sonra, bir sonraki adıma geçebilirsiniz - dosyayı açma.

Filesize () işlevi, verilen ada sahip dosyanın boyutunu (bayt cinsinden) veya hata durumunda FALSE döndürür. Dosya boyutu () işlevinin sözdizimi şöyledir:

int dosya adı (dize dosya adı)

Pastry.txt dosyasının boyutunu belirlemek istediğinizi varsayalım. İstediğiniz bilgileri almak için dosya boyutu () işlevini kullanabilirsiniz:

$ fs \u003d dosya boyutu ("pastry.txt"); print "Pastry.txt $ fs bayttır.";

Aşağıdaki çıktı görüntülenir:

Pastry.txt 179 bayttır.

Bir dosya üzerinde işlem yapmadan önce, dosyayı açmanız ve dosya tanıtıcısı ile ilişkilendirmeniz ve dosyayla çalışmayı bitirdikten sonra kapatmanız gerekir. Bu konular sonraki bölümde tartışılmaktadır.

Dosyaları açma ve kapatma

Bir dosya üzerinde G / Ç işlemlerini gerçekleştirmeden önce, onu fopen () işleviyle açmanız gerekir.

Fopen () işlevi bir dosya açar (eğer varsa) ve bir tamsayı döndürür - sözde dosya manipülatörü (dosya tanıtıcısı). Fopen () işlevinin sözdizimi şöyledir:

int fopen (dize dosyası, dize modu [, int enable_path])

Açılan dosya yerel dosya sisteminde bulunabilir, standart giriş / çıkış akışı olarak var olabilir veya dosyayı HTTP veya FTP tarafından alındığı şekliyle uzak bir sistemde temsil edebilir.

Dosya parametresi, aşağıda listelenen çeşitli şekillerde belirtilebilir:

Parametre yerel bir dosyanın adını içeriyorsa, fopen () o dosyayı açar ve bir tutamaç döndürür.

Parametre php: // stdin, php: // stdout veya php: // stderr olarak belirtilirse, karşılık gelen standart giriş / çıkış akışı açılır.

Parametre http: // önekiyle başlıyorsa işlev, sunucuya bir HTTP bağlantısı açar ve belirtilen dosya için bir tutamaç döndürür.

Parametre ftp: // önekiyle başlıyorsa işlev, sunucuya bir FTP bağlantısı açar ve belirtilen dosya için bir tutamaç döndürür. Bu durumda, iki şeye özellikle dikkat etmelisiniz: sunucu pasif FTP modunu desteklemiyorsa, fopen () çağrısı başarısız olacaktır. Ayrıca, FTP dosyaları okumak veya yazmak için açılır.

Pasif modda çalışırken, YR sunucusu istemci tarafından bir bağlantı için bekler. Etkin modda çalışırken, sunucunun kendisi istemciyle bir bağlantı kurar. Varsayılan, genellikle aktif moddur.

Mode parametresi, dosyaya okuma ve yazma yeteneğini belirler. Tablo 7.1, dosya açma modunu belirleyen bazı değerleri listeler.

Tablo 7.1. Dosya açma modları

Mod Açıklama
Sadece okumak. Mevcut konum işaretçisi dosyanın başlangıcına ayarlanır
r + Okuma ve yazma. Mevcut konum işaretçisi dosyanın başlangıcına ayarlanır
w Yalnızca yazın. Mevcut konum işaretçisi dosyanın başlangıcına ayarlanır ve dosyanın tüm içeriği yok edilir. Dosya yoksa, işlev onu oluşturmaya çalışır
w + Okuma ve yazma. Mevcut konum işaretçisi dosyanın başlangıcına ayarlanır ve dosyanın tüm içeriği yok edilir. Dosya yoksa, işlev onu oluşturmaya çalışır
a Yalnızca yazın. Mevcut konum göstergesi dosyanın sonunda konumlandırılır. Dosya yoksa, işlev onu oluşturmaya çalışır
a + Okuma ve yazma. Mevcut konum göstergesi dosyanın sonunda konumlandırılır. Dosya yoksa, işlev onu oluşturmaya çalışır

İsteğe bağlı üçüncü parametre include_path 1 ise, bu durumda dosya yolu php.ini dosyasında belirtilen include dosyalarının dizinine bağlıdır (bkz. Bölüm 1).

Aşağıda fopen () kullanarak bir dosya açma örneği verilmiştir. Fopen () ile birlikte kullanılan Die (), dosya açılamazsa bir hata mesajı verir:

$ dosya \u003d "userdata.txt"; // Bir dosya

$ fh \u003d fopen ($ dosya, "a +") veya öl ("Dosya ($ dosya) yok!");

Aşağıdaki kod parçası bir PHP sitesine (http://www.php.net) bağlantı açar:

$ site \u003d "http://www.php.net": // HTTP üzerinden erişilebilen sunucu

$ sh \u003d fopen ($ site., "r"); // manipülatörü php.net indeks sayfasına bağlayın

Bittiğinde dosya her zaman fclose () ile kapatılmalıdır.

Fclose () işlevi, dosyayı belirtilen tanıtıcıyla kapatır. Başarılı kapatmada TRUE, başarısızlık durumunda FALSE döndürür. Fclose () işlevinin sözdizimi şöyledir:

int fclose (int manipülatör)

Fclose () işlevi yalnızca daha önce fopen () veya fsockopen () ile açılmış olan dosyaları başarıyla kapatır. Bir dosyayı kapatma örneği:

$ dosya \u003d "userdata.txt";

eğer (file_exists ($ dosya)):

$ fh \u003d fopen ($ dosya, "r");

// Dosya işlemlerini gerçekleştirin

print "Dosya Sfile yok!";

Dosyaya yaz

Açık dosyalarda iki ana işlem vardır - okuma ve yazma.

İs_writeable () işlevi, dosyanın var olduğunu ve yazılabilir olduğunu doğrulamanıza izin verir. Yazılabilirlik hem dosya hem de dizin için kontrol edilir. İs_writeable () işlevinin sözdizimi şöyledir:

bool is_writeable (dize dosyası)

Önemli bir nokta: PHP büyük olasılıkla web sunucusu tarafından kullanılan kullanıcı kimliği altında çalışacaktır (genellikle "kimse"). İs_writeable () kullanımına bir örnek için fwrite () işlevine bakın.

Fwrite () işlevi, bir dize değişkeninin içeriğini dosya tanıtıcısı tarafından belirtilen dosyaya yazar. Fwrite () işlevinin sözdizimi şöyledir:

int fwrite (int manipülatör, dize değişkeni [, int uzunluk])

İşlev çağrısında isteğe bağlı uzunluk parametresi geçilirse, belirtilen sayıda karakter yazıldıktan sonra veya satırın sonuna ulaşıldığında kayıt durur. Bir dosyanın yazılabilirliğinin kontrol edilmesi aşağıdaki örnekte gösterilmektedir:

// Kullanıcının sitesindeki trafik hakkında bilgi

$ veri \u003d "08: 13: 00 | 12: 37: 12 | 208.247.106.187 | Win98";

$ dosyaadı \u003d "somefile.txt";

// Dosya varsa ve yazılabiliyorsa

eğer (is_writeable ($ dosyaadı)):

$ fh \u003d fopen ($ dosya adı, "a +");

// $ data içeriğini bir dosyaya yazın

$ başarı - fwrite ($ fh, $ veri);

// Dosyayı kapat

fclose ($ fh); Başka:

print "Sfilename yazılmak için açılamadı";

Fputs () işlevi, fwrite () için bir takma addır ve fwrite () kullanılan her yerde kullanılabilir.

Fputs () işlevi, fwrite () için bir takma addır ve tamamen aynı sözdizimine sahiptir. Fputs () işlevinin sözdizimi şöyledir:

int fputs (int manipülatör, dize değişkeni [, int uzunluk])

Kişisel olarak fputs () kullanmayı tercih ediyorum. Bunun sadece bir stil meselesi olduğunu ve iki işlev arasındaki herhangi bir farkla ilgisi olmadığını unutmayın.

Bir dosyadan okumak

Okumak şüphesiz dosyalar üzerinde gerçekleştirilen en önemli işlemdir. Bir dosyadan okumayı daha verimli hale getiren özelliklerden bazıları aşağıda açıklanmıştır. Bu işlevlerin sözdizimi, benzer yazma işlevlerinin sözdizimini neredeyse tam olarak kopyalar.

İ s_readable () işlevi dosyanın var olduğundan ve okunabilir olduğundan emin olur. Okunabilirlik hem dosya hem de dizin için kontrol edilir. İs_readable () işlevinin sözdizimi şöyledir:

boo! is_readable (dize dosyası]

PHP büyük olasılıkla web sunucusu tarafından kullanılan kullanıcı kimliği (genellikle "hiç kimse") altında çalışacaktır, bu nedenle is_readable () 'ın TRUE döndürmesi için herkesin dosyadan okumasına izin verilmelidir. Aşağıdaki örnek, bir dosyanın var olduğundan ve okunabilir olduğundan nasıl emin olunacağını gösterir:

eğer (is_readable ($ dosyaadı)):

// Dosyayı açın ve mevcut konumu dosyanın sonuna ayarlayın

$ fh \u003d fopen ($ dosya adı, "r");

print "$ dosya adı okunabilir değil!";

Fread () işlevi, dosya tanıtıcısı tarafından belirtilen dosyadan belirtilen bayt sayısını okur. Fwrite () işlevinin sözdizimi şöyledir:

int fread (int manipülatör, int uzunluk)

Manipülatör açık bir okunabilir dosyaya başvurmalıdır (is_readable () işlev açıklamasına bakın). Belirtilen bayt sayısı okunduğunda veya dosyanın sonuna ulaşıldığında okuma durur. Liste 7.1'de gösterilen pastry.txt metin dosyasını düşünün. Bu dosyanın tarayıcıda okunması ve görüntülenmesi aşağıdaki kod parçacığı ile yapılır:

$ fh \u003d fopen ("pastry.txt", "r") veya öl ("Dosya" açılamıyor! ");

$ dosya \u003d fread ($ fh, dosya boyutu ($ fh));

Pastry.txt'nin bayt cinsinden boyutunu belirlemek için fllesize () işlevini kullanarak, fread () işlevinin dosyanın tüm içeriğini okuduğundan emin olursunuz.

7.1 listesi. Pastry.txt metin dosyası

Tarif: Pasta Hamuru

1 1/4 su bardağı çok amaçlı un

3/4 çubuk (6 yemek kaşığı) tuzsuz tereyağı, doğranmış

2 yemek kaşığı sebze kısaltması 1/4 çay kaşığı tuz

3 yemek kaşığı su

Fgetc () işlevi, geçerli işaretçi konumundaki dosyadan bir karakter içeren bir dizge veya dosyanın sonuna ulaştığında FALSE döndürür. Fgetc () işlevinin sözdizimi şöyledir:

string fgetc (int manipülatör)

Manipülatör açık bir okunabilir dosyaya başvurmalıdır (bu bölümün önceki kısımlarında is_readable () işlevine bakın). Aşağıdaki örnek, fgetc () işlevini kullanarak karakter karakter bir dosya okumayı ve çıktısını almayı gösterir:

$ fh \u003d fopen ("pastry.txt", "r"); while (! feof ($ fh)):

$ karakter \u003d fgetc ($ fh):

$ karakter yazdır; sonunda;

Fgets () işlevi, dosya tanıtıcısı tarafından belirtilen dosyadaki işaretçinin geçerli konumundan okunan dizeyi döndürür. Dosya işaretçisi açık bir okunabilir dosyayı göstermelidir (bu bölümün önceki kısımlarında yer alan is_readable () işlevine bakın). Fgets () işlevinin sözdizimi şöyledir:

string fgets (int manipülatör, int uzunluk)

Aşağıdaki koşullardan biri gerçekleştiğinde okuma durur:

  • dosyadan okunan uzunluk - 1 bayt;
  • dosyadan bir yeni satır karakteri okundu (döndürülen dizeye dahil edildi);
  • dosyadan bir dosya sonu (EOF) işareti okundu.

Dosyanın satır satır okumasını düzenlemek istiyorsanız, ikinci parametreye satırdaki bayt sayısını açıkça aşan bir değer iletin. Bir dosyayı satır satır okuma ve çıktılama örneği:

$ fh \u003d fopen ("pastry.txt", "r");

while (! feof ($ fh));

$ satır \u003d fgets ($ fh, 4096);

$ line yazdır. "
";

Fgetss () işlevi, bir istisna dışında fgets () işlevine tamamen benzer - okunan metinden tüm HTML ve PHP etiketlerini kaldırmaya çalışır:

string fgetss (Int manipulator, int length [, string allow_tags])

Örneklere geçmeden önce, Liste 7.2'nin içeriğini kontrol edin - bu dosya Liste 7.3 ve 7.4'te kullanılmaktadır.

7.2 listesi. Science.html dosyası

Son Dakika Haberleri - Bilim

Uzaylı yaşam formu keşfedildi


20 Ağustos 2000

Bu sabah erken saatlerde, W. J. Gilmore'un eski apartmanındaki buzdolabının dolabında büyüyen tuhaf yeni bir mantar türü bulundu. Kiracının bilgisayar monitöründen yayılan güçlü radyasyonun bu gelişmeye yardımcı olup olmadığı bilinmemektedir.

7.3 listesi. Tarayıcıda görüntülemeden önce HTML dosyasından etiketleri kaldırma

$ fh \u003d fopen ("science.html", "r");

while (! feof ($ fh)):

baskı fget'leri ($ fh, 2048);

Sonuç aşağıda gösterilmiştir. Gördüğünüz gibi, tüm HTML etiketleri science.html dosyasından kaldırıldı ve bu da biçimlendirme kaybına neden oldu:

Bazı durumlarda, bazıları hariç tüm etiketler dosyadan kaldırılır - örneğin, satır sonu etiketleri
... 7.4 listesi bunun nasıl yapıldığını gösterir.

7.4 listesi. HTML dosyasından etiketleri seçerek kaldırın

$ fh \u003d fopenC "science.html", "r");

$ izin verilebilir \u003d "
";

while (! feof ($ fh)):

baskı fget'leri ($ fh. 2048, izin verilen $);

Sonuç:

Son Dakika Haberleri - Bilim Uzaylı yaşam formu 20 Ağustos 2000'de keşfedildi. Bu sabah erken saatlerde, WJ Gilmore'un eski apartman buzdolabının dolabında büyüyen garip bir mantar türü bulundu. Kiracının bilgisayarından güçlü radyasyon yayılıp yayılmadığı bilinmemektedir. Bu evrimde monitör destekli.

Gördüğünüz gibi, fgetss () işlevi, özellikle benzer şekilde biçimlendirilmiş çok sayıda HTML dosyası olduğunda dosya dönüştürmeyi kolaylaştırır.

Bir dosyayı bir diziye okumak

File () işlevi, bir dosyanın tüm içeriğini dizinlenmiş bir diziye yükler. Dizinin her bir öğesi, dosyanın bir satırına karşılık gelir. Filе () işlevinin sözdizimi şöyledir:

dizi dosyası (dize dosyası [, int yol_include])

İsteğe bağlı üçüncü parametre include_path 1 ise, dosya yolu php.ini dosyasında belirtilen include dosyalarının dizinine göredir (bkz. Bölüm 1). Liste 7.5, pastry.txt dosyasını yüklemek için file () işlevini kullanır (bkz. Liste 7.1).

$ file_array \u003d dosya ("pastry.txt");

while (liste ($ satır_sayısı. $ satır) \u003d eacht ($ dosya_dizisi)):

yazdır " Satır $ satır_sayısı: ", htmlspecialchars ($ satır),"
\\ n "

Dizinin her satırı bir sayıyla birlikte görüntülenir:

Satır 0: Tarif: Pasta Hamuru

Satır 1: 1 1/4 su bardağı çok amaçlı un

Satır 2: 3/4 çubuk (6 yemek kaşığı) tuzsuz tereyağı, doğranmış

Satır 3: 2 yemek kaşığı sebze katı yağı

Satır 4: 1/4 çay kaşığı tuz

Satır 5: 3 yemek kaşığı su

Bir dosyayı standart çıktıya yeniden yönlendirme

Readfile () işlevi bir dosyanın içeriğini okur ve onu standart çıktıya (çoğu durumda tarayıcıya) yönlendirir. Readfile () işlevinin sözdizimi şöyledir:

int okuma dosyası (dize dosyası [, int yol_include])

İşlev, okunan bayt sayısını döndürür. Dosya yerel dosya sisteminde bulunabilir, standart G / Ç akışı olarak var olabilir veya HTTP veya FTP yoluyla alınan uzak sistemdeki bir dosyayı temsil edebilir. File parametresi, fopen () işlevindekiyle aynı kurallara göre ayarlanır.

Tarayıcıda görüntülemek istediğiniz bir latorre.txt dosyanız olduğunu varsayalım:

Restoran "La Torre." İtalya'nın Nettuno kentinde bulunan otel, eklektik bir stil karışımı sunmaktadır. tarih ve güzel deniz ürünleri mutfağı. Şehri çevreleyen ortaçağ borgo duvarları içinde, köy butikleri içinde yoldan geçen dükkanları izlerken yemek yiyebilirsiniz. Sadece en taze deniz manzarasıyla birleşen konfor, La Torre'yi İtalya'nın en iyi restoranlarından biri yapar.

Aşağıdaki kod parçası yürütüldüğünde, latorre.txt'nin tüm içeriği standart çıktıya gönderilir:

$ restaurant_file \u003d "latorre.txt";

// Dosyanın tamamını standart çıktıya gönder

okuma dosyası ($ restaurant_file);

Bir işlem dosyası tutamacını açma

Normal dosyaların yanı sıra, sunucudaki işlemlerle etkileşim kurmak için dosya manipülatörlerini açabilirsiniz. Sorun, aşağıdaki sözdizimine sahip poren () işlevi tarafından çözülür:

int popen (dize komutu, dize modu)

Komut parametresi, yürütülecek sistem komutunu tanımlar ve mod parametresi erişim modunu açıklar:

// Yazmak için "baharat.txt" dosyasını açın

$ fh \u003d fopen ("baharat.txt", "w");

// Birden çok metin satırı ekleyin

fputs ($ fh, "Maydanoz, adaçayı, biberiye \\ n");

fputs ($ fh, "Kırmızı biber, tuz, karabiber \\ n");

fputs ($ fh, "Fesleğen, adaçayı, zencefil \\ n");

// manipülatörü kapat

// Basil'i baharat.txt'de bulmak için UNIX grep işlemini açın

$ fh - popen ("grep Basil< spices.txt", "r");

// grep'den çıktı yazdır

Sonuç şuna benzer:

Fesleğen, adaçayı, zencefil

Fpassthru () işlevi, bu bölümün "Harici Programları Çalıştırma" bölümünde tartışılan passthru () işlevine benzer.

Tüm işlemler tamamlandıktan sonra dosya veya işlem kapatılmalıdır. Pclose () işlevi, fclose () işlevinin fopen () işlevi tarafından açılan dosyayı kapatmasına benzer şekilde, manipülatör tarafından belirtilen işlemle olan bağlantıyı kapatır. Pclose () için sözdizimi şöyledir:

int pclose (int manipülatör)

Parametrede manipülatör başarılı bir poren () çağrısından daha önce alınan manipülatör geçilir.

Soket bağlantısı açma

PHP, dosyalar ve işlemlerle etkileşimle sınırlı değildir - ayrıca soketler üzerinden bağlantılar da kurabilirsiniz. Priz (soket), başka bir bilgisayardaki çeşitli servislerle iletişime izin veren bir yazılım soyutlamasıdır.

Fsockopen () işlevi, İnternet üzerindeki bir sunucuya soket bağlantısı kurar

tCP veya UDP aracılığıyla. Fsockopen () işlevinin sözdizimi şöyledir:

int fsockopen (dize düğümü, int bağlantı noktası [, int hata_kodu [, dize hata_metni [, int zaman aşımı]]])

İsteğe bağlı error_code ve error_text parametreleri, sunucuya bağlantı başarısız olursa görüntülenecek bilgileri içerir. Her iki parametre de referans olarak aktarılmalıdır. Üçüncü isteğe bağlı parametre olan zaman aşımı, sunucudan bir yanıtın ne kadar süreyle (saniye cinsinden) bekleneceğini belirtir. 7.6 listesi, bir sunucu hakkında bilgi almak için fsockopen () işlevinin nasıl kullanılacağını gösterir. Bununla birlikte, Liste 7.6'ya bakmadan önce, başka bir işleve, socket_set_blocking () 'e aşina olmanız gerekir.

UDP (Kullanıcı Datagram Protokolü), bağlantısız bir iletişim protokolüdür.

socket_set_blocking ()

Socket_set_b1ocki ng () işlevi, sunucu işlemleri için zaman aşımını kontrol etmenizi sağlar:

socket_set_blocking (int manipülatör, boole modu)

Handle parametresi önceden açılmış bir soketi belirtir ve mod parametresi soketin değiştirildiği modu belirtir (engelleme modu için TRUE, engellemesiz mod için YANLIŞ). Fsockopen () ve socket_set_blocking () işlevlerinin kullanımına bir örnek Liste 7.6'da gösterilmektedir.

7.6. Sunucu Bilgilerini Almak için fsockopen () İşlevini Kullanma

function getthehost ($ host. $ yol) (

// Düğüme bağlantı aç

$ fp - fsockopen ($ host, 80, & $ errno, & $ errstr, 30);

// Engelleme moduna geç

socket_set_blocking ($ fp, 1),

// Başlıkları gönder

fputs ($ fp, "GET $ yol HTTP / 1.1 \\ r \\ n");

fputs ($ fp, "Ana Bilgisayar: $ host \\ r \\ n \\ r \\ n"); $ x \u003d 1;

// Başlıklar alın

süre (x $< 10) :

$ başlıklar \u003d fgets ($ fp, 4096);

// manipülatörü kapat

getthehost ("www. apress.com", "/");

7.6 listesi aşağıdaki çıktıyı üretir:

НТТР / 1.1 200 OK Sunucu: Microsoft-IIS / 4.0 İçerik-konumu:

2000 20:25:06 GMT ETag: "f0a61666dbff1bf1: 34a5" İçerik-Uzunluk: 1311

Pfsockopen () işlevi, fsockopen () işlevinin kalıcı bir sürümüdür. Bu, işlevin çağrıldığı komut dosyası sona erdiğinde bağlantının otomatik olarak sonlandırılmayacağı anlamına gelir. Pfsockopen () işlevinin sözdizimi şöyledir:

int pfsockopen (dize düğümü, int bağlantı noktası [, int hata_kodu [, dize metin_ hatası [, int zaman aşımı]]])

Uygulamanızın özel amacına bağlı olarak, fsockopen () yerine pfsockopen () kullanmak daha uygun olabilir.

Harici programları çalıştırma

PHP betikleri, sunucuda bulunan programları da çalıştırabilir. Bu özellik, özellikle sistemi bir web tarayıcısı aracılığıyla yönetirken ve ayrıca sistem hakkında daha kolay bir şekilde özet bilgi elde etmek için kullanılır.

Exec () işlevi belirtilen programı başlatır ve çıktısının son satırını döndürür. Exec () işlevinin sözdizimi şöyledir:

string exec (dize komutu [, dize dizisi [, int dönüş]])

Lütfen dikkat: exec () işlevi, çalışmasının sonuçlarını görüntülemeden yalnızca komutu yürütür. Tüm komut çıktısı isteğe bağlı parametre dizisinde saklanabilir. Ek olarak, dönüş değişkeni verilen parametre dizisi için de belirtilmişse, ikincisine yürütülen komutun dönüş kodu atanır.

7.7 listesi, UNIX sistem ping işlevini yürütmek için exec () işlevinin nasıl kullanılacağını gösterir.

7.7 listesi. Exec () işlevini kullanarak sunucuyla iletişim kontrol ediliyor

exec ("ping -c 5 www.php.net", $ ping);

// Windows'ta - exec ("ping -n 5 www.php.net. $ Ping);

için ($ i \u003d 0; $ i< count($ping);$i++) :

yazdır "
$ ping [$ i] ";

Sonuç:

PING www.php.net (208.247.106.187): 56 veri baytı

208.247.106.187'den 64 bayt: icmp_seq \u003d 0 ttl \u003d 243 zaman \u003d 66.602 ms

208.247.106.187'den 64 bayt: icmp_seq \u003d 1 ttl \u003d 243 zaman \u003d 55.723 ms

208.247.106.187'den 64 bayt: icmp_seq \u003d 2 ttl \u003d 243 zaman \u003d 70.779 ms

208.247.106.187'den 64 bayt: icmp_seq \u003d 3 ttl \u003d 243 zaman \u003d 55.339 ms

208.247.106.187'den 64 bayt: icmp_seq \u003d 4 ttl \u003d 243 zaman \u003d 69.865 ms

Www.php.net ping istatistikleri -

5 paket iletildi. 5 paket alındı. % 0 paket kaybı

gidiş-dönüş min / ortalama / maks / stddev - 55,339 / 63,662 / 70,779 / 6,783 ms

Backticks

İşlev çağırmayı gerektirmeyen sistem komutlarını yürütmenin başka bir yolu daha vardır - çalıştırılan komut geri işaretler (``) içine alınır ve çalışmasının sonuçları tarayıcıda görüntülenir. Misal:

yazdır "

$ çıktı
";

Bu kod parçası, komut dosyasını içeren dizinin içeriğini tarayıcıya çıkarır.

Dahili parametre ping -c 5 (Windows'ta -n 5) sunucu anketlerinin sayısını belirtir.

Yalnızca bir komutun biçimlendirilmemiş sonuçlarını döndürmek istiyorsanız, aşağıda açıklanan passthru () işlevini kullanın.

Passthru () işlevi, bir istisna dışında exec () ile hemen hemen aynı şekilde çalışır - komutun çıktısını otomatik olarak yazdırır. Passthru () işlevinin sözdizimi şöyledir:

void passthru (dize komutu [, int dönüş])

Passthru () çağrılırken isteğe bağlı bir dönüş parametresi iletilirse, yürütülen komutun dönüş kodu bu değişkene atanır.

escapeshellcmd ()

Escapeshellcmd () işlevi, kullanıcının exec (), passthru (), system () veya popn () komutlarını yürütmek için girebileceği (örneğin bir HTML formunda) potansiyel olarak tehlikeli tüm karakterlerden kaçar. Sözdizimi:

string escapeshellcmd (dize komutu)

Kullanıcı girdisine her zaman biraz dikkatli davranılmalıdır, ancak bu durumda bile kullanıcılar sistem komutu başlatma işlevleri tarafından yürütülecek komutları girebilirler. Aşağıdaki pasajı düşünün:

$ user_input \u003d `rm -rf *`; // Ana dizini ve tüm alt dizinlerini kaldır

exec ($ user_input); // $ user_input komutunu çalıştırın !!!

Herhangi bir önlem almazsanız böyle bir komut felakete yol açacaktır. Bununla birlikte, kullanıcı girdisinden çıkmak için escapeshellcmd () işlevlerini kullanabilirsiniz:

$ user_input \u003d `rm - rf *`; // Ana dizini ve tüm alt dizinlerini kaldır

exec (escapeshellcmd ($ user_input)); // Tehlikeli karakterlerden kaçın

Escapeshellcmd () işlevi, yıkıcı komutun yürütülmesini önlemek için * karakterinden kaçar.

Güvenlik, Web programlamanın en önemli yönlerinden biridir, bu yüzden tüm bir bölümü bu konuya ve onun PHP programlamayla ilişkisine ayırdım. Daha fazla bilgi için 16. Bölüme bakın.

Dosya sistemiyle çalışmak

PHP, sunucudaki dosyalarda çeşitli işlemleri görüntülemek ve gerçekleştirmek için işlevler sağlar. Sunucu dosyalarının öznitelikleri hakkında bilgi (konum, sahip ve ayrıcalıklar) genellikle yararlıdır.

Basename () işlevi, dosya adını geçirilen nitelikli addan çıkarır. Basename () işlevinin sözdizimi şöyledir:

string basename (string full_name)

Temel dosya adının tam adından çıkarılması aşağıdaki gibidir:

$ yol \u003d "/usr/local/phppower/htdocs/index.php"; $ dosya \u003d basename ($ yol); // $ dosya \u003d "index.php"

Aslında, bu işlev yolu tam addan kaldırır ve yalnızca dosya adını bırakır.

Getlastmod () işlevi, işlevin çağrıldığı sayfanın son değişikliğinin tarih ve saatini döndürür. Getlastmod () işlevinin sözdizimi şöyledir:

int getlastmod (geçersiz)

Dönüş değeri UNIX tarih / saat biçimindedir ve date () işlevi kullanılarak biçimlendirilebilir. Aşağıdaki kod parçası, sayfanın en son değiştirildiği tarihi gösterir:

echo "Son değiştirilme:" .date ("H: i: s bir". getlastmod ());

Stat () işlevi, belirtilen ada sahip dosya hakkında ayrıntılı bilgi içeren dizinlenmiş bir dizi döndürür:

dizi durumu (dize dosya adı)

Dizi öğelerinde aşağıdaki bilgiler döndürülür:

0 İnşaat

2 İnode koruma modu

3 Bağlantı sayısı

4 Sahip kullanıcı kimliği

5 Sahibinin grup kimliği

6 İnode cihaz tipi

7 Bayt cinsinden boyut

8 Son erişim zamanı

9 Son değişiklik zamanı

10 Son değişim zamanı

11 Dosya sistemindeki G / Ç için blok boyutu

12 Tahsis edilen blok sayısı

Bu nedenle, son dosya erişiminin zamanını bilmek istiyorsanız, döndürülen dizinin 8. öğesine bakın. Bir örnek ele alalım:

$ dosya - "veri dosyası.txt";

liste ($ dev, $ inode, $ inodep, $ nlink, $ uid, $ gid, $ inodev, $ size, $ atime, $ mtime, $ ctime,

$ bsize) \u003d stat ($ dosya);

print "$ dosya $ boyut bayttır.
";

print "Son erişim zamanı: $ atime
";

print "Son değişiklik zamanı: $ mtime
";

Sonuç:

popen.php 289 bayttır.

Son erişim zamanı: 15 Ağustos 2000 12:00:00

Son değişiklik zamanı: 15 Ağustos 2000 10:07:18

Bu örnekte, her dönüş değerini adlandırmak için list () yapısını kullandım. Tabii ki, bir dizi de döndürebilir, öğeler üzerinde döngü yapabilir ve gerekli tüm bilgileri görüntüleyebilirsiniz. Gördüğünüz gibi, stat () işlevi bir dosya hakkında çeşitli yararlı bilgiler sağlar.

Dosya özelliklerini görüntüleme ve değiştirme

UNIX sistemlerindeki her dosyanın üç önemli özelliği vardır:

  • bir gruba ait olmak;
  • sahip;
  • izinler.

Bu özelliklerin tümü, uygun PHP işlevleri kullanılarak değiştirilebilir. Bu bölümde açıklanan özellikler Windows ailesi sistemlerinde çalışmaz.

UNIX işletim sistemlerinde yeniyseniz, UNIX dosya sistemi belirtimleriyle ilgili bilgiler http://sunsite.auc.dk/linux-newbie/FAQ2.htm adresinden edinilebilir. Grup üyeliği, sahiplik ve izinler bölüm 3.2.6'da ele alınmaktadır.

Chgrp () işlevi, belirtilen dosyanın ait olduğu grubu değiştirmeye çalışır. Chgrp () işlevinin sözdizimi şöyledir:

int chgrp (dize dosya adı, karışık grup)

Filegroup () işlevi, verilen adla dosya sahibinin grup kimliğini veya hata durumunda FALSE döndürür. Filegroup () işlevinin sözdizimi şöyledir:

int dosya grubu (dize dosya adı)

Chmod () işlevi, verilen adla dosyanın izinlerini değiştirir. Chmod () işlevinin sözdizimi şöyledir:

int chmod (dize dosya adı, int izinleri)

İzinler sekizlik tabanda verilmiştir. Chmod () işlevine bir parametre ayarlamanın özellikleri aşağıdaki örnekte gösterilmiştir:

chmod ("data_file.txt", g + r); // çalışmıyor

chmod ("data_file.txt", 766); // Çalışmıyor

chmod ("data_file.txt", 0766); // İşler

Fileperms () işlevi, verilen ada sahip dosyanın izinlerini veya hata durumunda FALSE döndürür. Fileperms () işlevinin sözdizimi şöyledir:

int fileperms (dize dosya adı)

Chown () işlevi bir dosyanın sahibini değiştirmeye çalışır. Yalnızca ayrıcalıklı kullanıcı bir dosyanın sahibini değiştirme hakkına sahiptir. Chown () işlevinin sözdizimi şöyledir:

int chown (dize dosya adı, karma kullanıcı)

Fileowner () işlevi, belirtilen adla dosyanın sahibinin kullanıcı kimliğini döndürür. Fileowner () işlevinin sözdizimi şöyledir:

int dosya sahibi (dize dosya adı)

Dosyaları kopyalama ve yeniden adlandırma

PHP betiklerinin gerçekleştirebileceği diğer kullanışlı sistem işlevleri arasında, sunucudaki dosyaların kopyalanması ve yeniden adlandırılması yer alır. Bu işlemler iki işlev tarafından gerçekleştirilir: litter () ve rename ().

Bir PHP betiğindeki bir dosyayı kopyalamak, UNIX cf komutunu kullanmaktan daha zor değildir. Görev, PHP işlevi sopu () tarafından çözülür. Copu () işlevinin sözdizimi şöyledir:

int copy (dize kaynağı, dize hedefi)

Copu () işlevi, kaynak dosyayı hedef dosyaya kopyalamaya çalışır; başarı durumunda TRUE, başarısızlık durumunda FALSE döndürür. Hedef dosya yoksa, onu litter () işlevi oluşturur. Aşağıdaki örnek, copu () işlevi kullanılarak bir dosyanın nasıl yedekleneceğini gösterir:

$ data_file \u003d "datal.txt";

copy ($ data_file. $ data_file ".bak") veya die ("$ data_file kopyalanamadı");

Rename () işlevi bir dosyayı yeniden adlandırır. Başarı durumunda TRUE, başarısızlık durumunda FALSE döndürür. Rename () işlevinin sözdizimi şöyledir:

bool yeniden adlandır (dize eski_adı, dize yeni_adı)

Rename () işleviyle bir dosyayı yeniden adlandırmanın bir örneği:

$ data_file \u003d "datal.txt";

rename ($ data file, $ datafile ".old") veya die ("$ data dosyası yeniden adlandırılamadı");

Dosyaları silme

Unlink () işlevi, verilen ada sahip dosyayı kaldırır. Sözdizimi:

int unlink (dize dosyası)

PHP'yi bir Windows sisteminde kullanıyorsanız, bazen bu işlevi kullanırken sorunlar ortaya çıkabilir. Bu durumda, yukarıda açıklanan system () işlevini kullanabilir ve dosyayı DOS del komutuyla silebilirsiniz:

system ("del dosyaadı.txt");

Dizinlerle çalışmak

PHP işlevleri, dizinlerin içeriğini görüntülemenize ve içinde gezinmenize izin verir. Liste 7.8, tipik bir UNIX dizin yapısını gösterir.

Liste 7.8. Tipik dizin yapısı

Dirname () işlevi, yolu tam nitelikli dosya adından çıkararak basename () işlevini tamamlar. Dirname () işlevinin sözdizimi şöyledir:

dize dizin adı (dize yolu)

Tam nitelikli bir addan bir yol çıkarmak için dirname () kullanımına bir örnek:

$ yol \u003d "/usr/locla/phppower/htdocs/index.php";

$ dosya \u003d dizin adı ($ yol); // $ dosya \u003d "usr / local / phppower / htdocs"

Dirname () işlevi bazen komutun yürütüldüğü komut dosyasının tam yolunu almak için $ SCRIPT_FILENAME değişkeni ile birlikte kullanılır:

$ dir - dizin adı ($ SCRIPT_FILENAME);

İs_dir () işlevi, belirtilen ada sahip dosyanın bir dizin olup olmadığını kontrol eder:

bool is_dir (dize dosya adı)

Aşağıdaki örnek, Liste 7.8'deki dizin yapısını kullanır:

$ isdir \u003d is_dir ("index.html"); // YANLIŞ döndürür

$ isdir \u003d is_dir ("kitap"); // DOĞRU döndürür

Mkdir () işlevi, aynı ada sahip UNIX komutuyla aynı şeyi yapar - yeni bir dizin oluşturur. Mkdir () işlevinin sözdizimi şöyledir:

int mkdir (dize yolu, int modu)

Path parametresi, yeni bir dizin oluşturmak için yolu tanımlar. Parametreyi yeni dizinin adıyla sonlandırmayı unutmayın! Mode parametresi, oluşturulan dizine atanan izinleri belirler.

Fopen () işlevinin belirtilen dosyayı işlemek için bir tutamaç açması gibi, opendir () işlevi de bir dizini işlemek için bir işleyici açar. Opendir () işlevinin sözdizimi şöyledir:

int opendir (dize yolu)

Closedir () işlevi, parametre olarak iletilen dizin tutamacını kapatır. Closedir () işlevinin sözdizimi şöyledir:

void closedir (int dir_manipulator)

Readdir () işlevi belirtilen dizindeki sonraki girişi döndürür. Sözdizimi:

string readdir (int dir_manipulator)

Bu işlevle, mevcut dizindeki tüm dosyaları ve alt dizinleri kolayca listeleyebilirsiniz:

$ dh \u003d opendir (".);

while ($ dosya \u003d readdir ($ dh)):

"$ dosya yazdır
";

Chdir () işlevi, UNIX cd komutuyla aynı şekilde çalışır - parametre ile belirtilen dizine gider. Chdir () işlevinin sözdizimi şöyledir:

int chdir (dize dizini)

Aşağıdaki örnekte, kitap / alt dizine gidip içeriğini görüntülüyoruz:

$ newdir \u003d "kitap";

chdir ($ newdir) veya die ("Dizine ($ newdir) değiştirilemedi"); $ dh \u003d opendir (".");

while ($ dosya \u003d readdir ($ dh));

"$ dosya yazdır
";

Rewlnddir () işlevi, geçerli konumu opendir () ile açılan dizinin başına taşır. Rewinddir () işlevinin sözdizimi şöyledir:

void rewinddir (int dir_nip)

Proje 1: Basit bir isabet sayacı

Bu bölümde sunulan komut dosyası, bulunduğu sayfadaki isabet sayısını sayar. Liste 7.9'daki koda geçmeden önce sözde kod algoritmasını gözden geçirin:

  1. $ Access değişkenini, sayaç değerinin depolanacağı dosyanın adına ayarlayın.
  2. $ Access içeriğini $ visit dizisine okumak için filе () kullanın. İşlev adının önündeki @ öneki, olası hataları (örneğin, verilen ada sahip bir dosyanın olmaması) bastırır.
  3. $ Current_visitors değişkenini $ visit dizisindeki ilk (ve tek) öğeye ayarlayın.
  4. $ Current_visitors'ın değerini 1 artırın.
  5. Yazmak için $ access dosyasını açın ve mevcut konum işaretçisini dosyanın başlangıcına ayarlayın.
  6. $ Current_visitors değerini $ access dosyasına yazın.
  7. $ Access'e referans veren tanıtıcıyı kapatın.

7.9 listesi. Basit isabet sayacı

// Senaryo: basit isabet sayacı

// Amaç: dosyadaki isabet sayısını kaydetme

$ erişim \u003d "hits.txt"; // Dosya adı rastgele seçilir

$ current_visitors \u003d $ ziyaret; // İlk (ve tek) öğeyi geri al

++ $ current_visitors; // İsabet sayacını artırın

$ fh \u003d fopen ($ erişim. "w"); // hits.txt dosyasını açın ve kurun

// dosyanın başlangıcına mevcut konumun göstericisi

@fwrite ($ fh, $ current_visitors); // Yeni sayaç değeri yaz

// "hits.txt" dosyasına

fclose ($ fh); // "hits.txt" dosya tutamacını kapatın

Proje 2: Site haritası oluşturma

Liste 7-10'daki komut dosyası, belirli bir dizinden başlayarak sunucudaki tüm klasörlerin ve dosyaların hiyerarşik bir görüntüsü olan bir site haritası oluşturur. Site haritasını oluşturan elemanların girintisi hesaplanırken bu ve önceki bölümlerde tanımlanan fonksiyonlar kullanılır. Programa geçmeden önce, sözde kodda yazılan algoritmayı gözden geçirin:

  1. Ana dizini, grafik dosyasının adını klasör görüntüsü, sayfa adı ve sunucu işletim sistemi bayrağını (Windows veya başka bir sistem) depolamak için servis değişkenlerini bildirin.
  2. Dizinin içeriğini okuyan ve tarayıcıda görüntülenmek üzere biçimlendiren display_directory () işlevini bildirin.
  3. $ Dir1 değişkeninde iletilen adı $ dir ile birleştirerek dizin yolunu oluşturun.
  4. Dizini açın ve içeriğini okuyun. Dizini ve dosya adlarını biçimlendirin ve bunları tarayıcıda görüntüleyin.
  5. Mevcut dosya bir dizinse, display_di rectory () 'yi özyinelemeli olarak çağırın ve görüntülenecek yeni dizinin adını iletin. Çıktı formatlanırken kullanılan girintiyi hesaplayın.

Dosya bir dizin değilse, köprü olarak görüntülenecek şekilde biçimlendirilir (ve biçimlendirme için kullanılan girinti de hesaplanır).

7.10 listesi. Sitemap.php programı

// Dosya: sitemap.php

// Amaç: bir site haritası oluşturmak

// Haritayı oluşturmaya başlamak için kullanılacak dizin

$ beg_path \u003d "C: \\ Program Dosyaları VApache Grubu \\ Apache \\ htdocs \\ phprecipes";

// Klasörün grafik görüntüsü ile dosya.

// Yol, Apache sunucusunun kök dizinine * Göre olarak ayarlanmalıdır

$ folder_location \u003d "C: \\ Belgelerim \\ Programcılar için PHP \\ FINAL CHPS \\ graphics \\ folder.gif";

// Pencere başlığındaki metin $ page_name \u003d "PHPRecipes Site Haritası";

// Komut dosyası Linux'ta mı yoksa Windows'ta mı kullanılacak?

// (0 - Windows; 1 - Linux)

$ usingjinux \u003d 0;

// İşlev: display_directory

// Amaç: parametre tarafından belirtilen dizinin içeriğini okumak

// $ dir1, ardından dizin ve dosya hiyerarşisinin biçimlendirilmesi.

// İşlev özyinelemeli çağrılabilir.

function display_directory ($ dir1, $ klasör_konumu, $ using_linux, $ init_depth) (

// Yolu güncelle

Sdh \u003d opendir ($ dir);

while ($ dosya \u003d readdir ($ dh)):

// Dizin öğeleri "." ve ".." görüntülenmez.

eğer (($ dosya! \u003d ".") && ($ dosya! \u003d "..")):

eğer ($ using_linux \u003d\u003d 0):

$ derinlik \u003d patlat ("\\\\", $ dir): başka:

$ derinlik \u003d patlat ("/", $ dir); endif; $ Curtis_depth \u003d sizeof ($ derinlik);

// Kullanılan işletim sisteminin kurallarına göre yolu oluşturun. eğer ($ using_linux \u003d\u003d 0):

$ tab_depth \u003d $ geçerli_deptn - $ init_depth;

$ dosya \u003d $ dir. "\\\\", $ dosya; Başka:

$ dosya \u003d $ dir. "/", $ dosya; endif;

// $ file değişkeni bir dizin içeriyor mu? eğer (dir ($ dosya)):

// Girintiyi hesapla

süre (x $< ($tab_depth * 2)) :

$ x ++; sonunda;

yazdır "

".basename ($ dosya)."
";

// Sayacı artır

// Özyinelemeli olarak display_directory () çağırın

display_directory ($ dosya, $ klasör_konumu, $ using_linux, $ init_depth);

// He dizini

// Kullanılan kurallara göre yolu oluşturun

// işletim sistemi.

eğer ($ using_linux \u003d\u003d 0):

$ tab_depth \u003d ($ geçerli_ derinlik - $ init_depth) - 2; $ x \u003d 0;

// Girintiyi hesapla

süre (x $< (($tab_depth * 2) + 5)) :

yazdır " ".basename ($ dosya)."
";

yazdır " ".basename ($ dosya)."
";

endif; // Is_dir (dosya) endif: // If! "." veya ".."

// Dizini kapat closedir ($ dh);

<? print "$page_name"; ?>

// Başlangıç \u200b\u200bdolgusunu hesaplayın

eğer ($ using_linux \u003d\u003d 0):

$ derinlik \u003d patlat ("\\\\", $ beg_path);

$ derinlik \u003d patlat ("/", $ beg_path);

$ init_depth \u003d sizeof ($ derinlik);

display_directory ($ beg_path, $ klasör_konumu, $ using_linux, $ init_depth);

İncirde. 7.1, bu kitaptaki birkaç bölümden oluşan bir dizin için komut dosyasının çıktısını gösterir.

Şekil: 7.1. Sitemap.php komut dosyasını kullanarak sunucu üzerindeki dizin yapısını görüntüleme

Sonuç

Bu bölüm, dosyalarla çalışmak için birçok PHP aracını tanıttı. Özellikle aşağıdaki konulara baktık:

  • dosyaların varlığını kontrol etmek;
  • dosyaları ve G / Ç akışlarını açma ve kapatma;
  • bir dosyaya yazma ve dosyadan okuma;
  • bir dosyanın bir çıktı akışına yeniden yönlendirilmesi;
  • harici programları başlatmak;
  • dosya sistemi işlemleri.

Bu bölüm bir sonraki bölüm olan "Dizeler ve Normal İfadeler" için zemin hazırladı, çünkü web uygulamaları geliştirirken dizi işleme ve G / Ç çok sıkı bir şekilde birleştirildi.