2010-04-21 8 views
6

Özel karakterler kullanıyorum (isveççe åäö harfleri)."file_exists" sorusundaki özel karakterler (php)

Artık, klasörler için resimler içeren bazı klasörlerim var. Klasörler, kategoriye göre adlandırılır.

for ($i=1; $i<=5; $i++){ 
    if (file_exists($big_images.$i.'.jpg')){ echo "Inne"; 
     unlink($big_images.$i.'.jpg'); 
    } 
    if (file_exists($thumb_images.$i.'.jpg')){ 
     unlink($thumb_images.$i.'.jpg'); 
     } 
    } 

Sitemde 5 taneye kadar görüntüye izin veriyorum, her biri 1-5 nr ile biter. Ancak, benim sorunum, klasör adı özel bir karaktere sahip olduğunda, file_exists false değerini döndürür, yani dosyayı bulamaz. Orada olsa bile.

Tüm belgeler utf-8 biçimindedir.

Bu, klasör adlarında özel karakterler olmadığında çalışır.

daha girdi gerekiyorsa bana

+0

Hangi İşletim Sistemini kullanıyorsunuz? – zaf

+0

wampserver, yerel makinede, pencereler –

cevap

22

sunucu işletim sistemi nedir bildirin?

Windows ise, PHP tarafından kullanılan C IO kitaplıklarının Windows uygulaması yalnızca sistem varsayılan kod sayfasında konuşacağından, dosyalara UTF-8 kodlu bir dosya adıyla erişemezsiniz.

$winfilename= iconv('utf-8', 'cp1252', $utffilename); 

(utf8_decode da kullanılabilir, ancak harita Windows'un uzatma karakterler için yanlış sonuçlar verecektir: Batı Avrupa yüklemeler için, bu Sen iconv kullanarak CP1252 için UTF-8 dizesi dönüştürebilirsiniz kod sayfası 1252 var cp1252'deki 0x80-0x9F aralığına.)

Adları sistem kod sayfasının repertuarının dışındaki karakterleri (örneğin, Batı kutucukta Yunanca) içeren dosyaları, PHP ve stdio kullanan diğer programlar tarafından erişilemez. Win32 API'ları aracılığıyla native-Unicode dosya adlarını kullanabilen betik dilleri vardır, ancak PHP5 bunlardan biri değildir.

Ve tabiki yukarıdaki adım, dosya sisteminin UTF-8 kodlu olduğu farklı bir işletim sisteminde konuşlandırıldığında kullanılmamalıdır. (yani, modern Linux.)

PHP ile sorunsuz bir şekilde çapraz uyumlu sunucuya ihtiyacınız varsa, dosya adlarında ASCII olmayan karakterleri kullanmaktan kaçınmalısınız. Afedersiniz.

+0

Bu sorunla karşılaştığım bir sistemde, kullanım gereksinimlerine bağlı olarak, * bir Windows makinesinde barındırılmalıdır * ve * 1252 kod sayfasının dışındaki karakterlere sahip dosyaların bulunması gerekir . "DirectoryIterator" ve "SplFileInfo" kitaplıklarının bu dosyalarla etkileşimde bulunabildiğini buldum. 'iconv' geçersiz karakterler hakkında uyarı atar ve 'file_exists' pek çok durumda başarısız olur. Yarım parça çözümümüze yol açan pistte beni almaktan benden +1 ve tekrar “SplFileInfo” nun daha evrensel bir çözüm olduğuna dikkat edin. –

+0

alternatif olarak, dosya adlarınızdaki özel karakterleri değiştiren url karakteri iyi bir çözüm olabilir. – user544262772

+0

Yeterince vurgu yapamazsınız: "** ... PHP ile sorunsuzca çapraz-sunucu uyumlu olmanız gerekiyorsa, dosya adlarında ASCII olmayan karakterleri kullanmaktan kaçınmalısınız… **" –