2009-12-19 2 views
0

У меня такая странная вещь. Мое веб-приложение Zend Framework (PHP), которое я разрабатывал локально, отлично работает на моем компьютере, но после его загрузки на сервер он считает, что каталог загрузок не существует.Проблема с символическими ссылками и добавлениями файлов

Мое приложение имеет каталог дату загрузки, которая является символической ссылкой на каталог за пределами приложения:

#local 
/myapp.local 
    /application 
    /data 
     /uploads (symlink, points to ./../../shared_uploads) 
    /public/index.php 
/shared_uploads 

#remote 
/shared_uploads 
/current (symlink, points to ./releases/myapp-2009-12-18) 
/releases 
    /myapp-2009-12-18 
     /application 
     /data 
      /uploads 
     /public/index.php 

Сервера точки на /current/public/index.php обслуживать до применения. Может быть, так как на самом деле в каталоге выпусков он на один уровень глубже? Или это может быть ошибка разрешений, так как я создал ссылку на ссылки на моем локальном компьютере, а не на сервере?

Update: В моем /public/index.php файле я определяю мою загрузку реж так:

// Define path to uploads directory 
defined('APPLICATION_UPLOADS_DIR') 
    || define('APPLICATION_UPLOADS_DIR', realpath(dirname(__FILE__) . '/../data/uploads')); 
+0

Я не вижу '/ current/public' в вашем описании дерева дерева ... –

ответ

1

Разрешение не должна быть проблемой, пока ваш UMASK является 0022, но вопрос в том, как вы загрузке ? FTP не будет уважать символическую ссылку (хотя я верю sftp), в то время как scp или rsync будут.

Whit, который сказал, что определенно ваша структура структуры каталогов. символическая ссылка должна относиться к истинному местоположению его родителя, поэтому в вашем случае это будет ln -s ../../../../shared_uploads. Я думаю, что самым простым решением здесь было бы сделать символическую ссылку в пределах releases, чтобы обратиться к реальному shared_uploads.

+0

Я добавил символическую ссылку в выпусках, и это сделало трюк! благодаря! – Andrew

0

Помогает ли это?

defined('APPLICATION_UPLOADS_DIR') || define('APPLICATION_UPLOADS_DIR', dirname(dirname(realpath(__FILE__))) . '/data/uploads'); 

Я удалил .. с помощью двух dirname() с и я побежал realpath() раньше, чтобы удалить символическую ссылку с пути.

Хотя я подозреваю, что вам не нужен realpath().

Ciao!

Смежные вопросы