dosya içinde bulunan bir dosyanın file_exists () (&)

5 Cevap php
$filename = "Sara & I.mp3";
if (file_exists($filename)) {
 ...
}

Dosya varsa bir "&" PHP için doğru dönmez file_exists

Nasıl "&" için $ dosya file_exists çalışır kaçabilir?

Zaten urlecode(), urlrawencode(), htmlentities() çalıştı ve '&' kaçan bir ters eğik çizgi (\ &) ile ... hayır gitmek

ps. Bu RedHat5 çalıştıran bir Linux sistemi üzerinde

şimdiden teşekkürler

5 Cevap

Komut benim için iş gibi görünüyor.

Eğer kontrol ediyoruz dosya komut çalıştırılır dizinde olduğundan emin olun.

script çalışıyor nerede olduğunu görmek için () getcwd kullanın.

e.g. if your script is in my/scripts/script.php but if it's included and invoked by another script at my/other/scripts/index.php then your script would actually be running in the my/other/scripts directory, NOT in the my/scripts directory as you might expect

Bu dosyalar kullanıcılar tarafından yüklenir? Artı özel charachters sorunlarını önlemek için pdf gibi dosya uzantısı -. Ben normalde sadece harfler AZ, 0-9 ve _ veya kullanmak için herhangi yüklenen dosyayı yeniden adlandırın. Spaces _ dönüştürülür.

Typo3 Örneğin CMS tabanlı bir büyük PHP bir dosya temizlemek için bu regex kullanır:

$fileName = preg_replace('/[^.[:alnum:]_-]/','_',trim($fileName));  // converting all on alphanumeric chars to _
$fileName = preg_replace('/\.*$/','',$fileName); // removing dot . after file extension

Bu yüzden foo&.pdf. foo.pdf dönüştürülecektir bir girdi

Bir dosya ise dosya sistemi olmasını beklediği gibi, kaçmak olmamalı? O \ & çizgisinde bir şey olmamalı ya da belki ;-) kaçar Beni şu anda unicode tabanlı çıkış sırası (?

i gibi GET istekleri gibi parametreleri geçirerek varsayalım script.php?file=this & that.mp3

kullanıcıların istedikleri dosyaları silemiyor yüzden ilk, gerçekten de sizin girişini kontrol ediniz. İkinci: urlencode when creating the link. the encoded char for & olan %26 ile dosya adlarını kodlamak.

script böyle denilen olacağını sonra: script.php?file=this%20%26%20that.mp3 (%20 bir boşluk olmak)

aksi takdirde yani that.mp3, atanmamış olması, başka bir GET değişken olacaktır. & GET isteği ayrı ayrı tek tek parametreler kullanılır

edit
a question from my side: how do you delete your files? using php’s unlink function? or using exec and calling rm on your system? (which is generally very unsafe). if you’re doing it the second way you could use escapeshellarg. if you don’t escape your shell input, your shell will interpret your command as two commands (afaik, don’t take my word for it)

Nerede Ampersan geliyor - kullanıcı girişi veya sizin komut dosyası içinde gerçekten? Orada kodlamaları bir mix-up olabilir.

Eğer dizinde bir topak () yaptığınızda da, ne sonuç alabilirim? Orada işareti ile dosya mı? Kopyalamak ve ne olur Bunun üzerine topak () çıkışı ve çalışma file_exists () yapıştırmak?