2012-05-08 40 views
7

Birinin bana yardım edip edemeyeceğini merak ediyorum.Sunucudan Resim Dosyaları Sil

Kullanıcıların yüklenen görüntüleri bir galeri biçiminde görüntülemelerine olanak tanıyan this sayfasını bir araya getirdim.

Artık her görüntü için silme işlevini eklemek istiyorum. Düğmeyi ve arkasındaki Javascript'i oluşturdum, ancak gerçekten 'düğme tıklaması' ile dosyanın gerçek olarak silinmesini nasıl sağlayacağımı bilmiyorum. Ben PHP nispeten yeni

UploadedFiles/username/locationid/imagename ve

UploadedFiles/username/locationid/Thumbnails/imagename

:

görüntüleri izleyen yapısında, bir veritabanında saklanır ama benim sunucuda iki klasör yerlerde bulunmaktadır değildir ve şimdi bilgimin sınırlarına ulaşıyorum, ama kesinlikle öğrenmeye istekli. Okudum belgelerinden, unlink yönteminin doğru komut olduğunu söyleyerek doğru olduğunu düşünüyorum?

Ama gerçekten zor buluyorum güncel username ve locationid maç ve ardından $source adı değişkeni eşleşen dosyaları silmek username ve locationid klasörlerle klasörleri bulmak için kod anlatıyor.

Sadece birilerinin bu konuda nasıl gidebileceğime dair biraz rehberlik yapıp yapamayacağını merak ettim.

Çok teşekkürler ve saygılarımızla

cevap

4

Eğer komut adı, LocationID ve imagename değişkenleri geçebilir varsa, silebilir dosyaları kullanılarak unlink():

$path = 'UploadedFiles/' . $username . '/' . $locationid . '/'; 

unlink($path . $imagename); 
unlink($path . 'Thumbnails/' . $imagename); 

Etkileşim Çünkü senin dosya sistemi, değişkenler emin ve dezenfekte etmek isteyeceksiniz (birisi, dosya sisteminizin istenmeyen kısımlarına ulaşmak için ../../../ kullanma engelleyin). Açıkçası

$username = str_replace(array('..', '/', '\\', ':'), '', $username); 
$imagename = str_replace(array('..', '/', '\\', ':'), '', $imagename); 
$locationid= str_replace(array('..', '/', '\\', ':'), '', $locationid); 
+1

dosya karakterler aksi yaparsın "../../../public/index.php" gibi bir şey –

+1

1, komik düşündüğümüz sadece bahsetmeden giderse bilmiyorum –

+1

:) düzenleme, bu yüzden söz edecek hem: değişken sanitization hatları $ yolunun önce çalıştırmak böylece kod yapılandırılmalıdır = ve bağlantıyı kaldırmak () çizgiler. –

0

sizin javascript (istemci tarafında) kullanıcının seçtiği resmi silmek için bir URL (sunucu tarafı) aramak zorunda kalacaktır. Şu an için bunu statik olarak yaptığınızı öneriyorum (eğer daha sonra daha dinamik bir şeye geçmek istiyorsanız, ajax'e küçük bir adımda dönüşme adımı)

Set Sail Media'nın söylediği gibi, kullanıcı adı ve konum kimliğini geçmek zorundasınız. silme butonuna tıkladığınızda sunucunuza:

Galerinizi HTML/javascript halinde oluştururken, her bir resim için, gereken bilgileri içerecek şekilde bir alt kısma sahip olursunuz. silme komut dosyasını sunucunuzdan çağırmanız yeterlidir: Yapabildiğiniz bir form örneği:

<form name="deleteImageX" method="GET" target="your.server.org/deleteImage.php"> 
     <input type="hidden" name="userName" value="theUserNameAssociatedWithThePicture" /> 
     <input type="hidden" name="locationId" value="locationOfThePicture" /> 
     <input type="submit" value="delete"/> 
    </form> 

form, web sayfasında görüntülenmeyecek gizli alanlarda gerekli değeri saklar, ancak gönder düğmesine basıldığında yine de sunucuya gönderilir.

(Küçük öykü için, burada kullanılan yöntem GET çünkü AFAIK HTML DELETE yöntemini desteklemez (bizim durumumuzda uygun olurdu)).

GET yöntemi senaryoyu "your.server.org/deleteImage.php" arayacak. Bu betikte, ihtiyacınız olan tüm bilgileri (username/locationId), $ _GET ['username'] ve $ _GET ['locationId'] değişkenlerini kullanarak görüntüyü sileceksiniz. Daha sonra bahsettiğiniz gibi, aslında dosyayı sunucudan silmek için bağlantı kesme yöntemini kullanmanız gerekecektir.

Bu yapıldığında Nihayet kez imajın silinmesine sonra (örneğin) tekrar galeriyi görüntülemek böylece php script yönlendirmesi gerekir. Bu, bir çeşit şablon altyapınız varsa veya php'nin "başlık" işlevini çağırarak bir komut dosyasını çağırarak yapılabilir.

Bu akış beklediğiniz oldu umut ve ben yardımcı olmuştur umarım.

Saygılarımızla,

Ayı

ayrıca .. kaçmak emin olmak isteyebilirsiniz
+0

Merhaba, tüm bunları açıklamak için zaman ayırdığınız için çok teşekkür ederim, çok takdir edilmektedir. Orijinal yazımda söylediğim gibi, bu konuya gerçekten çok yeniyim, bu yüzden bana verdiğiniz teknik ayrıntıları sindirmek beni biraz zaman alabilir. Bu yüzden biraz sonra biraz sorularım olabilir. Saygılarımızla – IRHM

+1

Sorun değil. Zaman ayır, PHP'nin tadını çıkar ve tabiki aptalca soru diye bir şey yok. Eğer php.net'de (oldukça iyi bir php incili) veya Google'da doğru bir cevap bulamıyorsanız, sormaya çekinmeyin. BR, Bear –

+0

Çok teşekkürler @bear foot, ben sadece php.net'e bakıyordum. Saygılarımla – IRHM