RegEx - Dosya Uzantısı önce dize ekleme nasıl

5 Cevap php

Nasıl dyanmically üretiliyor dosyalarının içine "_thumb" eklersiniz.

Örneğin, kullanıcılar bir resim yüklemek için izin veren bir site var. Komut, görüntü alır onu iyileştirir ve dosyaya kaydeder. Onu nasıl optimize görüntü için dize "_thumb" eklemek yapmak istiyorsunuz?

I'm currently saving 1 version of the otpimized file. ch-1268312613-photo.jpg

I want to save the original as the above string, but want to append, "_thumb" like the following string ch-1268312613-photo_thumb.jpg

5 Cevap

Regex kullanmaya gerek yok. Bu onu yapacağım:

$extension_pos = strrpos($filename, '.'); // find position of the last dot, so where the extension starts
$thumb = substr($filename, 0, $extension_pos) . '_thumb' . substr($filename, $extension_pos);

Yani pathinfo (dosya uzantısı almak için) ve İşlevi (dosya adı uzantısını eksi almak için): düzenli ifade rotayı (ya da diğer ham dize manipülasyon) almak yerine belki de bazı dosya ile ilgili fonksiyonlar ile yaşamak daha kolay olabilir.

$ext   = pathinfo($filename, PATHINFO_EXTENSION);
$thumb = basename($filename, ".$ext") . '_thumb.' . $ext;

Edit: çok benzer cevap için @ tanascius üzgünüm, ben (bu süre, dikkatim dağıldı aldı) bu yazılı iken küçük pop-up kontrol ettik sanırım.

Neden bir RegEx kullanmak istiyor musunuz? Uzantısı her zaman .jpg ve sadece bir uzatma var mı? Belki _thumb.jpg ile değiştirebilirsiniz?

O kadar basit değil ise, temel isme + uzantısı ayıklamak ve bir yerine orada yapmak için pathinfo gibi bir işlevi kullanabilirsiniz. Bu overkill burada olabilir ki, çok, bir regex olmadan çalışıyor:

$info = pathinfo( $file );
$no_extension =  basename( $file, '.'.$info['extension'] );
echo $no_extension.'_thumb.'.$info['extension']
 preg_replace("/(\w+)\.(\w+)/","'\\1_thumb.\\2'","test.jpg"); 

I think that using a regexp is far more speed effective AND really better for flexibility.

Ama Chad çözümü zarif ve etkili olduğunu itiraf