Indirmeden önce basit bir form dosyaları yönlendir

5 Cevap php

Merhaba ben onlar / pdf görüntülemek indirmek için devam etmeden önce kullanıcı bilgi toplar içinde bir form ile bir sayfa benim sitedeki herhangi bir pdf dosyası için tüm bağlantıları yönlendirmek için çalışıyorum.

Örn

Ben request.php web sitesinde *. Pdf dosyalarını yönlendirmek istiyor? File = name_of_pdf_being_redirected

Request.php o geçmeden önce birkaç ayrıntı için soruyorum formu ile sayfa olduğu.

Sitedeki tüm pdf en / pdf klasörünün içinde tutulur.

Herhangi bir fikir?

EDIT: Ben sunucuda Apache kullanıyorum üzgünüm.

OK I'M GETTING THERE: I have it working now using:

RewriteEngine on RewriteRule ^pdf/(.+.pdf)$ request.php?file=/$1 [R]

I kişi aslında benim yeni kural geri forma download linki tükürme dosyasını indirmek izin istediğiniz zaman indirme sayfasına gittiğinde Ama şimdi:-P haha ​​çok formu vardır kez dosyayı indirmek izin zaten var sunulan ve download.php konum mu?

5 Cevap

Bu deneyebilirsiniz:

  • Hiç kimse bir tarayıcı aracılığıyla erişebilirsiniz böylece web root "dışarıdan" bir klasöre dosyaları taşıyın
  • Bir kişi formunu dolduran ya da olup olmadığını tespit etmek için oturumları kullanın
  • Bir php destekli dosya indirme komut dosyasını kullanın. Onun naivest formda, bu gibi görünebilir:
    if ( isset( $_SESSION[ 'OK_TO_DOWNLOAD' ] ) == false )
    {
        header( "Location: must_fill_this_first.php" );
        exit( 0 );
    }

    header( "Content-type: application/pdf" );
    // double check the above, google it as i am not sure

    echo file_get_contents( 'some_directory_inaccessible_thru_www/' . $_GET[ 'pdf_name' ] );
    // ideally a binary-safe function needs to be used above

Bu benim bir web sitesinde kullanılan denenmiş ve test edilmiş bir tekniktir. Kod örneği bir taslak taslak olduğunu ve arıtma ihtiyacı vardır.

Fikirler? Siz :-) yardımcı olabilir, kullanmakta olduğunuz web / app server bize anlatarak başlayabilirsiniz

Apache, farklı bir forma isteği morph bir RewriteRule kullanmak gerekir. Örneğin, /pub/docs/x.pdf dönüşüyor request.php?file=/pub/docs/x.pdf gibi bir şey ile yapılabilir:

RewriteRule ^/pdf/(.*)\.pdf/  request.php?file=/$1.pdf

Ben Apache ve hala temiz :-) dokundu beri bu (bellekten altı yıl akılda tutmak, biçimi biraz farklı olabilir.

Update:

Şimdi sıralanmış, burada seçenekleri bir çift sonraki sorunun olduğunu var.

1 / onlar yeniden yazma kuralı tarafından yakalandı değiliz ki, farklı bir uzantısı olması PDF'leri yeniden adlandırın. Onlar izleyicinin müşteri seçiminde açın böylece müşteriye aynı MIME türünü dışarı itmek için yapılandırılmalıdır.

2 / yanı senaryonun parçası olarak indirme etmeyin PDF doğrudan erişim gibi. Formun sunulması bir HTTP isteği olduğundan, PDF içeriği ile hemen cevap ziyade indirme sayfasına again bunları yeniden yönlendirilmesi gerekir.

Bu ikinci seçenek bu yana benim seçim olacaktır:

  • insanlar sadece xx.pdfx talep yerine xx.pdf ile PDF'leri alabilirsiniz bulmaktan durur.
  • daha hızlı kişi (tekrar linke tıklamanız gerekmez) PDF almak için yapar.

Not cevabım. NET web sitesi ile ilgili, ama aynı yapıları yerde PHP var eminim.

Ben sadece request.php bir Response.Redirect yapar *. Pdf bir yol ile bir httpModule olurdu? ... Vb (benim durumumda request.aspx içinde) Ve sonra o sayfadaki bir butona tıklama için olay işleyicisi, hangi pdf görüntülemek için biliyor ve o zaman yetkili konum, basit bir Response.ContentType = [pdf MIME türünü] yapmak ve sonra Response.WriteFile (pdfFile), ve nihayet Response.End ().

Bu tür dosya boyutu gibi bunu daha iyi hale getirmek için ekleyebileceğiniz diğer şeyler, vb vardır Ama minimal durumda, bu işe olur. C # bunun için kodu istiyorsanız ben yaklaşık 3 dakika içinde bir şey gelebilir, ama PHP oldukça kayboldum. Ben httpModules arıyor dışarı başlamak istiyorum ve PHP bunları yazmak nasıl.

"PHP HTTPModule" için google'da bu yol: http://stackoverflow.com/questions/570833/equivalent-of-asp-net-httpmodules-in-php yani, ben biraz yanlış olabilir, ama umarım bu bir başlangıç ​​noktası.

Bir Apache web sunucusu kullanarak eğer bir. Htaccess dosyası kullanın. Eğer etkinleştirilmiş mod_rewrite'ın var emin olmak gerekir, ama bunu bir kez bu iki basit çizgileri kullanarak tüm dosyaları yeniden yazabilirsiniz:

RewriteEngine On RewriteRule ^.pdf$ /rewrite.php [NC,L]

IIS kullanıyorsanız, size ISAPI_Rewrite kullanarak benzer bir şey başarabilirsiniz.

Sizin diğer alternatif sonra bir pdf kaynak için yapılmış herhangi bir istek bir erişim engellendi hata dönecekti ve dosyaları yalnızca uygun yükleme komut dosyası üzerinden erişilebilir olabilir kamuya açık değildir ve bir dizinin PDF en içini yerleştirmektir.

if($user==authenticated){
 //set pdf headers
 echo file_get_contents('actual.pdf');

hiçbir mod yeniden yazıyor, gerçek kaynağını gizler ve ben normalde ne olduğunu - bu yardımcı olur umarım