Kullanıcı sayfa bırakır her bir dosyayı silmek nasıl?

11 Cevap php

I have a form with action set to a php-file (verify.php). In the form, I have made a pretty nice picture upload section. After submitting the form, the verify.php is opened to verify the form filled in by the user.

The form values are all placed inside another form on the verify.php page. Only the image is uploaded to a folder on the server, and this is my problem. I want the image to be deleted if the user regrets (doesn't verify) putting in an ad, or if the user goes back to change the ad again.

Bunu nasıl yaparım?

Tek yönlü sayfa 'kaldırır' (kullanıcı düğme geri vurur) her dosya silmek olabilir. Kullanıcı verify.php sayfasında tarayıcıyı kapatır eğer bir 'boşaltma' olarak sayılmaz çünkü Ama bu alışkanlık, o sorunu çözmek nedir?

Çözümler?

Eğer daha fazla girdi ihtiyacınız varsa, bana ve ben bu yazı güncellenir!

Teşekkürler

11 Cevap

Ne yazık ki bunu yapmak için oldukça zor bir şeydir, kolay çözüm dosyaları eski olduğunu görmek ve onlara birisi sayfasına eriştiğinde dahaki silmek için kontrol etmek olacaktır. Bu PHP ile tamamen yapılabilir ve çok güvenilir olacaktır.

Belki ben yanlış anlamış, ama süreç bu olabilir:

1 Kullanıcı yüklenenler dosya (buna * nix / tmp klasörü normal gider)

2 İkinci bir geçici klasöre dosya taşımak / upload_unconfirmed

3 When the user ACTUALLY does confirm the action, you then a) move it to your folder to keep it permanently, say, /clientfolder/theirusername.jpg b) then delete theirusername.jpg in /upload_unconfirmed

Arka planda, 1 saat demek daha everyfile eski rm bir cron çalıştırmak / upload_unconfirmed / * de

Her istemci sadece hiç bir görüntü varsa, o zaman sonraki yüklenenler eski dosyanın üzerine yazılır.

Kur, zaman damgası ile her dosya için bir veritabanı giriş. Süreç tamamlandıktan sonra, bu girdiyi kaldırın. Sonra, günde bir kez, masaya geçmesi hala orada tüm dosyaları silmek ve tablodan bu kayıtları kaldırmak ... Bu güvenli bahistir.

Tarayıcı kapanış gibi "terk" algılanıyor esasen mümkün değildir. Gerçek zamanlı olarak sunucu tarafında onu izlemek için güvenilir bir yolu yoktur. Bu görüntüleri silmek için kolay yolu terk singups ile ilgili görüntüleri kaldırır çalışan bir süreci kurmak için.

Normalde, sunucu tarafı komut dosyası kullanıcı sayfa bırakır biliyor veya tarayıcıyı kapatın, sadece oturum zaman aşımı süresini kontrol edebilirsiniz, ama normalde 30 dakika veya daha fazla ayarına bağlıdır yok.

Yani gerçekten bunu gerçek zamanlı yapmak isterseniz, sayfalarında ajax zamanlayıcı koymak, ve sunucuya hello isteği her 30 saniye ya da bunun gibi bir şey göndermek ve hiçbir varsa o zaman görüntü dosyasını silebilir 1 dakika ya da bunun gibi bir şey daha yanıtı.

Bunu birçok kullanıcı varsa Ama sunucuya her 30'lu veya daha az ajax isteği gönderme, sunucu performansını etkileyebilir.

Kullanıcı açıkça doğrular kadar kalıcı konuma dosya taşımak etmeyin. PHP alan gereklidir otomatik olarak fifo amacıyla temizlendi alır (* nix kurulumlarında), belirli bir yerde, genellikle / tmp dizine yüklenen dosyaları koyar. Eğer bu özel dizinin üzerinden dosya taşımak istemiyorsanız Yani, o zaman gelecekte belirsiz bir zamanda daha fazla müdahale olmadan özdevinimli edilecektir.

1258560055.jpg gibi daha sonra gider ve her bir saat görüntü, iki saat veya daha sonra ne olursa olsun siler bir cron işi oluşturmak I (time () işlevini kullanarak) çağ zaman görüntüyü isim olacaktır.

Bu bunu nasıl olduğunu:

jQuery:

$(window).bind('beforeunload',function(){
    if(check){ //whatever check you wish to do
        return 'Are you sure you want to leave?';
    }
});
$(window).unload(function(){
    $.ajax({
        type: 'POST',
        url: 'file.php',
        data: 'value=unload',
        async: false // this will not work if set to 'true'
    });
    alert('done');
});

PHP:

if(isset($_POST['value'])){

    if($_POST['value']=='unload'){

        foreach(glob($targetFolder.'*.*') as $file){
            unlink($file); // remove every file
        }
        rmdir($targetFolder); // remove directory
    }
}

Note: Ben de bir cron iş sadece durumda, haftada bir kez çalıştırmak. Kullanıcı o vermeden bırakırsa, bir spesifik tmp klasör ve yüklemeler dosyaları (yani CV, motivasyon mektubu ...) alır, dosya ve klasör kaldırılır nerede php durumdur.

Bir kullanıcı reklam ilanı onaylamak için ne kadar uzun bir zaman sınırı koymak istiyorsunuz. Sonra, önceden saptanmış zaman ateş ve reklam teyit edilmemiş ise, sunucudan resmi silecektir bir izleme iş var.

Ben bir kullanıcı gerçekten bir sayfa ayrıldığında algılamak çok kolay olduğunu sanmıyorum. Ne zaman oturum zaman aşımına görüyorum çoğu çözümler genellikle (örneğin geçici dosyaları silmek gibi) bazı eylemleri gerçekleştirmek.

Eğer sadece basit gönderilen verileri doğruladıktan sonra resim yüklemek değil misiniz?