Абсолютные проблемы относительного пути в ссылках на веб-ресурсы - нужна помощь - php related - PullRequest
0 голосов
/ 07 октября 2009

Привет, ребята, я сейчас немного рассол. Ну, для начала я построил простую CMS на PHP с панелью администратора, структура каталогов выглядит так:

root/
    ->admin/
    ->images/

Это работало нормально, однако требования к клиенту изменились, и они хотели, чтобы вместо того, чтобы обращаться к папке администратора как к папке внутри корня, к ней обращались как к веб-поддомену. поэтому www.site.com/admin становится admin.site.com

Однако это ужасно испортило и уничтожило практически все ссылки, которые я делал. Как я загружаю изображения в CMS - однако теперь загрузка на ../images не работает, так как теперь она находится под поддоменом, и я все испорчен, пытаясь ссылаться на изображения оттуда тоже. Я уже несколько недель пытаюсь взломать мой конфигурационный файл и не могу это исправить :( - помогите, пожалуйста - на внешнем интерфейсе сайт o.k., но мой админский раздел все испорчен: (*

Я использую PHP и MySQL.

Ответы [ 3 ]

3 голосов
/ 07 октября 2009

Похоже, вы узнали, насколько токсичными могут быть относительные пути.

Возможное быстрое решение: что произойдет, если вы скопируете / symlink / alias admin.domain.com/images, чтобы указать на ту же папку с изображениями, которая находится на вашем сайте переднего плана? Я думаю, что лишние "../"es будут в основном игнорироваться.

Более постоянно и вообще не используйте относительные пути. Они не причинят вам ничего, кроме боли. Пара стратегий:

1) Определите некоторую константу, которая указывает на правильное местоположение для изображений, CSS и т. Д .:

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

2) Намного лучше: просто сохраните одну константу, которая сообщает вам, где находится ваше приложение.

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>';

Важно предположить, что вашему приложению может потребоваться запустить из корня ("/") или из какого-либо каталога на сервере и т. Д.

То же самое касается операций с файловой системой, которые вы можете выполнять исключительно на стороне сервера. Используйте абсолютные пути файловой системы. Если у вашего основного приложения есть скрипт типа «config / config.php», вы можете поместить его вверху:

define('APP_FS_ROOT',realpath(dirname(__FILE__) . '/..'));
2 голосов
/ 07 октября 2009

Предполагая, что и интерфейс, и администратор находятся в одной файловой системе, вам нужно будет использовать абсолютные пути для всего в администраторе. В конфигурации администратора создайте определение, которое отображается на физическую папку загрузки / изображения внешнего интерфейса. Например, из интерфейса вы можете получить доступ к папке загрузки с относительным путем ./upload, но с сайта admin.example.com вам потребуется использовать абсолютный путь /user/example.com/upload.

Конфигурация шрифта будет выглядеть (www.site.com/config.php):

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

Конфигурация администратора будет выглядеть (admin.site.com/config.php):

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

Тогда и интерфейс, и администратор будут ссылаться на физическую папку с помощью:

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

И для создания гиперссылок на загрузку вы должны использовать это:

<a href="<?php echo WEB_UPLOAD_FOLDER . "/myupload.mp3" ?>">My Upload</a>
1 голос
/ 07 октября 2009

Другое возможное решение - определить псевдоним каталога в apache для перемещенных каталогов.

Допустим, корень вашего субдомена / Субдоменов / изображения

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

Как www.yourDomain.com/images, так и images.yourDomain.com будут загружать одни и те же файлы.

Или, если вы используете linux, символическая ссылка может выполнить то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...