Varsayılan web dizini dışındaki görüntü dosyasına php link

6 Cevap php

İşte dizin yapısı

/domain.com
 /public_html
  /functions
  /image
  /mobile
  /www

the /domain.com/public_html/www folder has a file index.php the default web directory is /user/public_html/www in the index file is an include that includes the functions with include"../functions/function.inc" this works without problem when I want to link to a picture in the image folder I don't get any results for example

<img src="../image/graphic/logo.gif" alt="alt text"/>

Herkes görüntüye bağlantı görüntü dosyasına doğru bağlamak için nasıl çalışmak ve yok neden herhangi bir fikir var mı?

Ben denedim <img src="<?php echo $_SERVER['PHP_SELF']; ?>../image/graphic/logo.gif" alt="alt text"/>

but that gives me the same result when I build a link around the image to get to the properties I get this as path http://domain.com/image/pc/tattoo_small/small_2008_10_22_001.JPG the path should be http://domain.com/public_html/image/pc/tattoo_small/small_2008_10_22_001.JPG when I try to browse directly to this url http://domain.com/public_html/image/pc/tattoo_small/small_2008_10_22_001.JPG I get an 404 file not found error because the default web directory is /domain.com/public_html/www I tried http://domain.com/../image/pc/tattoo_small/small_2008_10_22_001.JPG to get to the image folder but that does not help neither.

Herkes herhangi bir fikir veya varsayılan web dizini dışındaki grafik dosyaları için linki html imkansız mı?

Bu kadar okuma için teşekkürler

Thanks for the answers so far. I will try to solve my problem with one of the recommended solutions and report my working solution back here. I wanted to have the image folder at the same level as the www and mobile folder because some of the images used for the pc (www) version and the mobile version are the same. Of course it is easier to just get an image folder in the www and in the mobile folder and I think that is what I am going to do.

Size tavsiye için herkese teşekkür ederim. Ben bir komut ile işe gitmiyorum neden ana nedeni ben gerçekten bir css sınıfta görüntü sarın ve nasıl alt sağlamak için nasıl görmüyorum, çünkü bir komut dosyası da kolay bir sorun ve zor bir çözüm olacak olması bir görüntü için bir metin.

6 Cevap

Doğrudan webroot dışındaki dosyalara erişmek mümkün değildir; Bu iyi bir neden için var olduğu bir yerleşik güvenlik kısıtlama olduğunu.

Bu sizin için bu görüntüleri hizmet için bir PHP-komut dosyası kullanmak ancak mümkündür. Eğer böyle bir görüntü arayabilirsiniz Bu şekilde:

/image.php?file=myfile.jpg

ve file_get_contents() dosya içeriğini almak ve tarayıcınıza bunları yazdırmak için kullanın. Ayrıca PHP'nin header() fonksiyonunu kullanarak bu durumda, müşteriye başlıklarını göndermesi gerekmektedir. Kısa bir örnek:

<?php

    $file = basename(urldecode($_GET['file']));
    $fileDir = '/path/to/files/';

    if (file_exists($fileDir . $file))
    {
        // Note: You should probably do some more checks 
        // on the filetype, size, etc.
        $contents = file_get_contents($fileDir . $file);

        // Note: You should probably implement some kind 
        // of check on filetype
        header('Content-type: image/jpeg');

        echo $contents;
    }

?>

Bu bir komut dosyası kullanarak biraz daha fazla avantajları vardır:

  • Örneğin, bir sayaç indirmeleri izlemek ve uygulamak
  • Sen doğrulanmış kullanıcılara dosya kısıtlayabilirsiniz
  • Vb ...

Eğer sunucusu olarak Apache kullanıyorsanız, size httpd.conf bir dizin diğer ad ayarlayabilirsiniz ...

<IfModule mod_alias.c>

    Alias /images/ "/User/Public_html/Image/"

    <Directory "/User/Public_html/Image">
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

</IfModule>

IIRC, başka ad klasör webroot içinde olması gerekmez.

Sen yol yani http://mydomain.com/../page.html sadece ulaşılmaz bir konuma gelir, çalışmıyor çünkü dışarıda web dizini olan bir sayfa hizmet edemez.

Eğer gerçekten webroot dışında (statik) dosyalarını hizmet etmek istiyorsanız, onları ve çıkış onları okumak için küçük bir PHP komut dosyası yazabilirsiniz. Böylece PHP komut dosyası istekleri yönlendirme olur, ve PHP diskten uygun dosyayı okumak ve geri dönecekti.

Istediğiniz dizine işaret eden web kök içinde sembolik bağ oluşturun.

cd public_html
ln -s ../images

Apache bu iş için Options +FollowSymlinks yapılandırma yönergesi (web kök .htaccess yerleştirmek olabilir) gerekmektedir.

Dışında web kök dosyaları sunmaktadır Yazma PHP script, web kök amacı yendi. Sen web tüm diski maruz kalmasını önlemek için çok dikkatli yolları doğrulamak gerekiyor.

Bu web sunucusunun web erişilebilir alanının dışında bir dosyaya doğrudan bağlantı imkansız.

Ancak, sizin için olacak proxy görüntüleri bir PHP komut dosyası yazabilirsiniz

<img src="my_php_proxy.php">

PHP resim verilerinin yanı sıra HTML göndermek çünkü. Bu PHP "görüntü" web erişilebilir malzeme olarak aynı klasöre sınırlı değildir, bu sunucu üzerinde herhangi bir dosyanın erişebilirsiniz. http://www.electrictoolbox.com/image-headers-php/ daha fazla bilgi için bkz:

Sen, public___html içindeki görüntü dizine bir bağlantı yapmak için public_html görüntü dizini taşımak veya, sen kıvrık çözümlere yönelik belirli bir sevme varsa, Of (görüntü dosyası ve kullanıcıya çıkışlarını okur bir komut dosyası yazabilirsiniz ya Tüm görüntülerin bir beyaz liste yapmak sürece Tabii ki,) senin elinde olası bir güvenlik sorunu olabilir.