Web varlıklarını referenceing Mutlak Bağıl yol sorunları - yardıma ihtiyaç - php ile ilgili

3 Cevap php

Merhaba çocuklar ben şimdi burada bir turşu biraz yaşıyorum. Ben dizin yapısı bu gibi bir admin panelinde PHP ile basit bir CMS inşa iyi başlamak için:

root/
    ->admin/
    ->images/

Ancak olduğu gibi müşteri gereksinimleri değişti ve onlar istediğini iyi çalıştı yerine bir web alt etki alanı olarak erişilebilir kökü içinde bir klasör olarak yönetici klasöre erişmek zorunda. yani www.site.com / admin olur admin.site.com

Ancak bu korkunç berbat ve pratik olarak ben yapmış olduğu bütün referanslama yok. Sanki CMS resim yüklemek - ancak şimdi yükleyerek .. / images bir alt altında artık çalışmıyor ve ben tüm nispeten de oradan görüntüleri başvurmak için çalışırken berbat ediyorum. Ben hafta boyunca benim config dosyasına uzak hack çalışıyor ettik ve bu sorunu gidermek için alınamıyor: (- lütfen yardım - ön sitesi Tamam ama benim yönetici bölümü, tüm berbat sonunda: (

PHP ve MySQL kullanıyorum.

3 Cevap

Eğer zehirli göreli yolları nasıl olabilir öğrendim gibi geliyor.

Olası Hızlı düzeltme: kopyalamak ne olur / sembolik / alias admin.domain.com / ön-uç sitede yaşıyor aynı görüntüler klasörüne işaret görüntüleri? Ben ekstra ".. /" es temelde göz ardı olacağını düşünüyorum.

Daha kalıcı ve genel olarak, göreli yolları kullanmayın. Onlar acıdan başka bir şey neden olur. Stratejilerinin bir çift:

1) görüntüler için doğru yerde, css işaret bazı sabit, vb tanımlayın:

define('IMG_DIR','/images');
define('CSS_DIR','/images');
// ... some time later
echo '<img src="' . IMG_DIR . '/myimage.jpg'"/>';

2) Çok daha iyi: sadece uygulama nerede yaşadığını söyler biri sabit tutmak.

define('APP_ROOT','/myapp'); //could be chanted to just '/' if it doesn't live in some folder on the server
// ... later that day ...
echo '<img src=\"' . APP_ROOT . '/images/myimage.jpg"/>';
// ... or maybe you need to link to a logout script?
echo '<a href="'. APP_ROOT . '/auth/logout.php">Log Out</a>';

Bu size uygulama vb root ("/") veya sunucu üzerinde bir dizine, çalıştırmak gerekebilir varsaymak önemlidir

Aynı sunucu tarafında sadece yapmak olabilecek herhangi bir dosya sistemi işlemleri için de geçerli. Mutlak dosya sistemi yolları kullanın. Ana uygulama "config / config.php" gibi bir komut varsa, üstündeki bu sopa:

define('APP_FS_ROOT',realpath(dirname(__FILE__) . '/..'));

Önyüz ve yönetici hem de aynı dosya sistemi üzerinde varsayarsak, yönetici her şey için mutlak yolları kullanmak gerekir. Admin config oluşturmak frontend'i fiziksel yükleme / görüntü klasörü için bu haritalar tanımlar. Örneğin, fontend sizi yüklenenler göreli yolu ile. / Yükleme klasörü erişebilirsiniz ancak admin.example.com sitesinden Eğer mutlak yol / user / example.com / yükleme kullanmak gerekecektir.

Fontend config (www.site.com / config.php) gibi görünecektir:

define("UPLOAD_FOLDER", "./uploads");
define("WEB_UPLOAD_FOLDER", "/uploads");

Admin config (admin.site.com / config.php) gibi görünecektir:

define("UPLOAD_FOLDER", "/user/site.com/upload");
define("WEB_UPLOAD_FOLDER", "http://www.site.com/uploads");

Sonra önyüz ve yönetici hem fiziksel klasörü başvurur:

$filename = UPLOAD_FOLDER . "/myupload.mp3";

Ve bu kullanmak istiyorsunuz yükleme köprüleri oluşturmak için:

<a href="<?php echo WEB_UPLOAD_FOLDER . "/myupload.mp3" ?>">My Upload</a>

Başka bir olası çözüm hareket ettik dizinleri için apache bir dizin diğer adı tanımlamak olacaktır.

Lets say your sub domain root is /subdomains/images

<VirtualHost>
...
Alias /images "/subdomains/images"
...
</VirtualHost>

Www.yourDomain.com / images ve images.yourDomain.com hem de aynı dosyaları yüklemek istiyorum.

Linux kullanıyorsanız Veya, bir sembolik aynı şeyi başarmak olabilir.