php mysql-5.0.1.tar.gz gibi karmaşık bir dosya uzantısı elde

3 Cevap php

Ben burada tipik bir sorun haline çalıştırmak. Bugüne kadar ben yapıyordum

strstr($filename,".");

$filename is the file i got from $_FILE i.e uploaded file.It was running fine until i hit a filename of the type i mentioned. Even doing

pathinfo($filename);

bana verir

.gz 

Ben TAM olup olmadığını görmek gerekir

.tar.gz

3 Cevap

En basit yolu, dosya adının son 7 karakterleri kontrol etmek olacaktır - bu, her bir dosya .tar.gz ile biter sağlar:

if (substr($filename, -7) == '.tar.gz') {
    // continue
}

Teknik olarak, pathinfo doğru: bu dosya için ve tek uzantısıdır .gz. O adı .tar olduğu gerçeği 5.0.1 içinde olduğu gerçeği kadar rastlantısaldır.

İşte .tar.gz geçersiz dosyaları kontrol sizin ilgi yapmaz, ama bu soruyu yapar: ne özel bulmak istiyorsun?

Özel soruya en doğrudan çözüm: ilk ve olmak olur sonra .gz bakmak (pathinfo veya strpos fonksiyonu ile) uzantısı için bakmak (aynı tekniği ile) kalan dosya adı "uzantısı" için.

$parts = pathinfo($filename);
$extension = $parts['extension'];
if ($extension == '.gz') {
    $parts = pathinfo($parts['filename']);
    $extension = $parts['extension'] . $extension;
}

Eğer 'this.is.a.very.long.file.name.with.lots.of.full.stops' ayrıştırmak için gerekirse ve o hangi parçası dosya uzantısı nedir? Dosyanın içeriği hakkında semantik, makine tarafından okunabilir bilgiyi iletmek için bir dosya belirli bir parçası dayanarak, en iyi tehlikelidir.

Eğer çalıştığınız sorunun ne olduğunu net değil - neden uzantısı ne olduğunu bilmek gerekiyor?

C.