php dosyasının var olup olmadığını kontrol edin. PHP'de bir dosyanın olup olmadığı nasıl kontrol edilir

  • 08.05.2019

Bu işlev için gerekli parametre, oluşturulacak dizinin yolunu belirten pathname'dir.

mkdir( "yeni dosya" );

Bu şekilde bir klasör belirtirseniz, php betiğinin başlatıldığı dizinde oluşturulacaktır. Farklı bir konumda bir dizin oluşturmak istiyorsanız, belirtebilirsiniz. göreceli yol oluşturulan klasöre gidin veya sitenin kök dizininden tam yolu belirtin.

mkdir( "../yeni dosya" ); // bir seviye aşağı

mkdir("/klasör1/klasör2/yeniklasör"); // tam yol

AT son örnek ön koşul"klasör1" ve "klasör2" alt dizinlerinin varlığı olacaktır. Orada değillerse, bu formdaki işlev bir klasör oluşturamaz ve bir hata döndürür:

Uyarı: mkdir() : İçinde böyle bir dosya veya dizin yok…

Başarı durumunda, işlev True değerini döndürür. Paket oluşturulmamışsa False döndürülür.

if (mkdir("yeni klasör"))
Eko "Klasör başarıyla oluşturuldu";
başka
Eko "Klasör oluşturulmadı";

Ancak bu işlevi bir klasörün olup olmadığını kontrol etmeden kullanmamalısınız, çünkü sunucu yine de klasörün oluşturulamadığına dair bir hata gösterecektir.

Klasör oluştururken hakların atanması

Hakların atanması için oluşturulacak klasör mkdir işlevinin ikinci isteğe bağlı parametresine yanıt verir. Varsayılan olarak, atanan maksimum ayrıcalık 0777'dir.

İzinler, ilk etapta zorunlu sıfır ile sekizlik bir değer olarak atanır. İlk sıfırı saymayan sayılar, sahip için, sahibinin grubu için ve diğer herkes için erişim düzeylerini gösterir.

0 – erişim reddedildi;

1 – okuma erişimi;

2 – yazma erişimi;

4 – yürütme erişimi.

Çoğu zaman haklar birleşik bir miktar olarak belirtilir, örneğin:

7 – tam erişim (1+2+4);

5 - okuma ve yürütme (1 + 4).

mkdir( "yeni klasör", 0777); // herkes için tam erişim

Birden Çok İç İçe Alt Dizin Oluşturma

Sadece bir tane daha isteğe bağlı boole parametresi - özyinelemeli - ayarlayarak aynı anda birkaç alt klasör oluşturabilirsiniz.

mkdir("klasör1/klasör2/yeniklasör", 0777, Doğru); // herkes için tam erişim

Bu durumda, "klasör1" ve "klasör2" klasörleri mevcut değilse, işlev onları ve "yeni klasör" klasörünü oluşturacaktır. Hata mesajları, başka bir sorun yoksa görüntülenmeyecek ve işlev True değerini döndürecektir.

Bir klasörü silme

PHP'de boş bir klasör rmdir işleviyle kaldırılabilir. dirname parametresi ayrıca silinecek dizinin tam veya göreli yolunu da belirtir:

rmdir( "klasörüm");

rmdir("klasör1/klasör2/klasörüm");

Bu durumların her birinde yalnızca "klasörüm" klasörü silinir. Klasör yoksa veya yol yanlış ayarlanmışsa bir hata görüntülenecektir:

Uyarı: rmdir(myfolder) : İçinde böyle bir dosya veya dizin yok…

Boş olmayan bir klasörü silme

Boş olmayan bir dizini silmek, bağlantı kaldırma işlevine sahip klasördeki iç içe dosyaları sırayla silerek ve ardından silinerek yapılır. boş klasör rmdir işlevi. Bunu yapmak için şöyle bir işlev kullanabilirsiniz:

function my_delete_dir($mypath)(
$dir = opendir($yolum);
while (($dosya = readdir($dir)))(
if (is_file($mypath."/" .$file))
bağlantıyı kaldır($yolum. "/" .$dosya);
elseif (is_dir($mypath."/" .$file) && ($file != "." ) && ($file != ".." ))
my_delete_dir ($mypath."/" .$file);
}
kapatdir($dir);
rmdir($yolum);
}

my_delete_dir("klasörüm"); // fonksiyon çağrısı

Bir Dizinin Var Olup Olmadığını Kontrol Etme

Çoğu dizin işleminden önce, var olup olmadıklarını kontrol etmeye değer. Bunun için file_exists işlevi kullanılır.

Ek olarak, belirtilen nesnenin bir dosya değil bir klasör olduğundan emin olmanız gerekir - is_dir işlevi. İşaretli klasör, göreli veya tam bir yolla belirtilir.

if (file_exists("klasörüm"))
Eko "Belirtilen klasör var";
başka
Eko "Belirtilen klasör mevcut değil";

if (is_dir("klasörüm"))
Eko "Belirtilen klasör nesnesi";
başka
Eko "Belirtilen nesne bir klasör değil";

olup olmadığını kontrol etmeniz gereken zamanlar vardır. belirtilen dosya veya değil, örneğin daha sonra dosyayla bazı eylemler gerçekleştirmek için.

Modülü geliştirirken de bu sorunla karşılaştım. Ve soruna iki çözüm buldum.

URL'ye göre bir dosyanın varlığını kontrol etme

PHP'de bir işlev var " fopen”, belirtilen URL'yi açabilir.

Biz ne yapıyoruz? Dosyayı açmaya çalışıyoruz ve başarılı olursak dosya var, yoksa dosya yok.

Uygulama:

Ama ya bir dosyamız değil, tabiri caizse birkaç bağlantımız varsa? Bu tam olarak başlangıçta önümde olan görevdi. Ve bu sorunun çözümü şudur:

Bu durumda, yalnızca var olan dosyaların bir listesini alırız.

Yerel Dosya Varlığını Kontrol Etme

"Yerel" kelimesi, komut dosyasının ve kontrol edilecek dosyaların aynı sunucuda bulunduğu anlamına gelir. yeterliysen büyük dizi bağlantılar - bu seçenek, bir talepte bulunmadığımız için sorunu çözmek için en iyisidir. üçüncü taraf sunucusu ve belirtilen dizinleri tarama.

Bu yöntem "file_exists" işlevini kullanır ve önceki sürüme benzer şekilde komut dosyasının bir kısmını değiştirir:

Ve bağlantı dizisi için aynı:

değeri nedir Not? Bu yöntemin, içimizdeki dosyaları çalıştırmak için uygun olması dosya sistemi. Bu nedenle, tüm bağlantıların göreceli olarak belirtilmesi arzu edilir.

Bu arada, siparişlerden birini verirken sadece birkaç saniyede yaklaşık 135.000 dosyayı taramayı başardım.

Veritabanlarının yaygın kullanımı, geleneksel dosya sistemini önemsiz hale getirmedi. Dosyaları yazmak ve okumak hala önemli yer programlamada.

Bir dosyanın varlığını kontrol etmek için kullanılan algoritmalar, kodu yürütürken hatalardan kaçınmanıza izin verir. PHP file_exists işlevi, bir dosya veya dizinin varlığını kontrol etmek için basit bir çözüm sunar.

file_exists işlevinin sözdizimi ve kullanımı

İşlevin sonucu doğru veya yanlıştır. Tek parametre dosya adı ve ona giden yoldur. İşlevin sonucu önbelleğe alınır, çünkü PHP'nin file_exists çalışmıyorsa, ancak dosya gerçekten varsa, bu bir algoritma hatasıdır.

clearstatcache() işlevini kullanarak, kullanılabilir bir dosya sisteminin durumunu incelerken birçok hatadan kaçınılabilir. Ancak, var olmayan bir PHP dosyasında file_exists'in söz konusu dosya oluşturulana kadar false döndüreceğini ve daha sonra silinmiş olsa bile true döndüreceğini unutmayın.

clearstatcache() işlevi ve dosya sistemiyle ilgili işlevlerin (örneğin, is_writable(), is_readable(), is_executable(), is_file(), is_dir() ve diğerleri) doğru birleşimi, "gizli" komut dosyası yürütmesini önlemenize olanak tanır hatalar.

Önbelleğe alma, sistem performansını büyük ölçüde artırır, ancak bazı durumlarda önemli dosyalar gerçekten güvenilmez bir sonuç oluşturabilir ve ciddi, bulunması zor bir yürütme hatasına neden olabilir.

PHP file_exists işlev parametresi

PHP farklı bilgi işlem platformlarına kurulabilir ve bu nedenle yol ve dosya adları farklı olabilir.

Belgeler şunu beyan eder: PHP doğrulaması etkili tanımlayıcılara değil, UID/GID'ye odaklanır. Algoritma geliştirmek PHP kullanımı file_exists, yalnızca doğru eğik çizgilere (ileri veya geri), dosya yolunun kodlamasına ve dosyanın adına değil, aynı zamanda doğru vakayı, doğru karakterleri, erişim haklarını ve diğer koşulları kontrol etmeye de dikkat etmelisiniz. .

Negatif sonuç script dosyasının kodlanmasından etkilenebilir, veritabanından alınan karakter dizisini dönüştürmek gerekebilir.

Fonksiyonun pratikte uygulanması

Kullanım alanları PHP betikleriÖnemli ölçüde farklı. Bu, PHP file_exists'in yalnızca depolama için kullanıldığını söylemek değildir. sistem bilgisi, veri dosyaları, nesneler veya dinamik görüntüler.

Veritabanına hemen yerleştirmek için verimli olmayan büyük miktarda geçici bilginin akış oluşumunu kullanmanın sık olduğu durumlar vardır. Farklı ziyaretçilerden gelen bilgiler siteye akın edebilir ve ancak ön tedavi belirli bir süre için gerekli bilgi veritabanı tablolarına yerleştirilmelidir.

Okuma sistem dosyalarıönbelleğe almaya neden olabilir çoklu güncelleme sayfa veya yanlış eylemler ziyaretçi. Gerçekte pek çok durum vardır, ancak doğru kullanım fonksiyonları, güvenli ve güvenilir kod yazmanıza olanak tanır.

Örneğin, dosyayla daha sonra bazı eylemler gerçekleştirmek için belirtilen dosyanın var olup olmadığını kontrol etmeniz gereken durumlar vardır.

Modülü geliştirirken de bu sorunla karşılaştım. Ve soruna iki çözüm buldum.

URL'ye göre bir dosyanın varlığını kontrol etme

PHP'de bir işlev var " fopen”, belirtilen URL'yi açabilir.

Biz ne yapıyoruz? Dosyayı açmaya çalışıyoruz ve başarılı olursak dosya var, yoksa dosya yok.

Uygulama:

Ama ya bir dosyamız değil, tabiri caizse birkaç bağlantımız varsa? Bu tam olarak başlangıçta önümde olan görevdi. Ve bu sorunun çözümü şudur:

Bu durumda, yalnızca var olan dosyaların bir listesini alırız.

Yerel Dosya Varlığını Kontrol Etme

"Yerel" kelimesi, komut dosyasının ve kontrol edilecek dosyaların aynı sunucuda bulunduğu anlamına gelir. Oldukça geniş bir bağlantı diziniz varsa, bu seçenek sorunu çözmek için en iyisidir, çünkü üçüncü taraf bir sunucuya istekte bulunmayız, ancak belirtilen dizinleri tararız.

Bu yöntem "file_exists" işlevini kullanır ve önceki sürüme benzer şekilde komut dosyasının bir kısmını değiştirir:

Ve bağlantı dizisi için aynı:

değeri nedir Not? Bu yöntemin dosya sistemimizdeki dosyaları çalıştırmak için uygun olduğunu. Bu nedenle, tüm bağlantıların göreceli olarak belirtilmesi arzu edilir.

Bu arada, siparişlerden birini verirken sadece birkaç saniyede yaklaşık 135.000 dosyayı taramayı başardım.