Uygulama klasörü dışında bulunan Erişim ve Ekran Görüntüleri / İstemi Dosya İndirme

4 Cevap php

Erişmek ve uygulama klasörü dışında bulunan görüntüleri nasıl? Diyelim ki tüm resim ve diğer dosya türlerini barındıran bir dosya dizin var ve bu dosya dizin farklı bir sürücüye sonra benim uygulama klasöründe yer almaktadır diyelim. Belirli dosya türleri için (örneğin. Pdf,. Doc gibi, ben bu dosyaları indirmek için kullanıcıdan isteyebilirsiniz).

Bildiğim kadarıyla, bu niteliklerini <img src, yani img src="D:\\file directory"> çalışmıyor mutlak yolunu koymak mümkün değildir. Ayrıca I want to restrict the access to login user only.

Benim sunucu tarafı dili olarak PHP kullanıyorum.

Note: <img src="file:/// .../> won't work in Firefox. comments için buraya bakınız.

Edit: Since only authenticated user can access those images, and since I have an index.php that checks for all the incoming requests, filters off non-authenticated users, I don't think creating an Apache Alias will work.

İşte benim conf dosyasında bir örnek:

  NameVirtualHost *:80
  <VirtualHost *:80 >
    ServerName pmmenu.businessjob.net
    DocumentRoot "D:\web"
    DirectoryIndex index.html index.php
    <Directory  "D:\web">
       AddDefaultCharset UTF-8
       Order Deny,Allow
       Allow from all
       RewriteEngine on
       RewriteBase /
       RewriteRule ^$ index.html [QSA]
       RewriteRule ^([^.]+)$ $1.html [QSA]
       RewriteCond %{REQUEST_FILENAME} !-f

       # no, so we redirect to our front web controller
       RewriteRule ^(.*)$ index.php [QSA,L]
    </Directory>
  </VirtualHost>

4 Cevap

Burada temel bir kavram eksik düşünüyorum. Tüm HTML istemci tarafında yorumlanır. Her resim ziyaretçinin tarayıcı tarafından ayrı ayrı indirilir. Ziyaretçilerinizin yalnızca kamu, bu dosyalara erişmek gibi bu istenen bulmak bloke ya olacak ya yerel (onların) dosya sistemine erişmek için kendi tarayıcısı sorar, çünkü, "file :/ / / bir şey", onlar için çalışmaz onların diskte saklanan değil gibi görüntü.

Yani o resimleri yayınlamak ve ziyaretçilerin onları görmek için izin http üzerinden onları erişilebilir yapmak zorunda kalacaktır. Bir etki alanı veya bir sanal dizin oluşturarak bu yapamadı.

Yalnızca kimliği doğrulanmış kullanıcıların onları görmek mümkün istiyorum yana, aynı zamanda, örneğin, kullanıcının kimliği doğrulanmış olup olmadığını denetleyen bir php dosyası oluşturabilirsiniz gibi bu:

if(user_is_authenticated()){
    $pathToFile = "d:\images\myimage.jpg";
    $handle = @fopen($pathToFile, "rb");
    $contents = @fread($handle, filesize($pathToFile));
    @fclose($handle);
    //sent appropriate header
    header('Content-type: image/jpeg');
    echo $contents;
}

Ama bu script her zaman tüm görüntü okumak ve büyük bir havai olduğu, sonradan yazdırmak farkında olmak zorunda.

görüntüleri tutan klasörü sanal dizin oluşturmayı deneyin ve gibi uzak klasöre bağlama kullanan. (Sanal konak) apache, IIS (sanal dizin) kullanıyorsanız. Google birçok dersler vardır

Bu php dosyaları sunmak için her zaman kötü bir fikirdir. Eğer apache kullanmadan önce nginx kurabilirsiniz Eğer http://kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/lang/en/

Aksi taktirde apache modülü: http://john.guen.in/past/2007/4/17/send%5Ffiles%5Ffaster%5Fwith%5Fxsendfile/

Başka bir çözüm - bireysel sembolik oluşturmak (bonus olarak cron sembolik temizleyerek, randevum sınırlı link vermek mümkün olacak).

Ben şu anda bu teorilerden birini test edemez, ama bunu bir php komut dosyası img src bağlantı olabilir eminim ya:

  • Görüntünün dinamik versiyonunu yapmak için GD kullanır, ya da
  • Bir dosyayı zorla indirmek istiyorum aynı şekilde tarayıcıya indirir.