2009-12-19 7 views
0

Je suis en train de faire une chose étrange. Mon application Web Zend Framework (PHP) que j'ai développée localement fonctionne correctement sur mon ordinateur, mais une fois qu'elle est téléchargée sur le serveur, elle pense que le répertoire des téléchargements n'existe pas.Problème avec les liens symboliques et les téléchargements de fichiers

Mon application a un répertoire de téléchargements qui est un lien symbolique vers un répertoire en dehors de l'application:

#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 

Les points de serveur à /current/public/index.php pour servir l'application. Serait-ce parce que c'est en fait dans le répertoire des versions que c'est un niveau plus profond? Ou pourrait-il être une erreur d'autorisations depuis que j'ai créé le lien symbolique uploads sur mon ordinateur local au lieu de sur le serveur?

Mise à jour: Dans mon dossier /public/index.php que je suis en train de définir mon téléchargement dir comme ceci:

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

Je ne vois pas '/ current/public' dans la description de votre arborescence de répertoires ... –

Répondre

1

Les autorisations ne devrait pas être un problème aussi longtemps que votre UMASK est 0022 mais la question est de savoir comment vous le téléchargement ? FTP ne va pas respecter un lien symbolique (même si je crois que sftp le fait) alors que scp ou rsync le fera. Cela dit, bien que ce soit définitivement votre structure de répertoire d'imbrication. le lien symbolique doit être relatif à partir de l'emplacement réel de son parent donc dans votre cas ce sera ln -s ../../../../shared_uploads. Je pense que la solution la plus simple ici serait de créer un lien symbolique à releases pour faire référence au vrai shared_uploads.

+0

J'ai ajouté le lien symbolique dans les versions, et cela a fait l'affaire! Merci! – Andrew

0

Est-ce que cela aide?

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

J'ai enlevé le .. en utilisant deux dirname() s et j'ai couru realpath() plus tôt pour supprimer le lien symbolique du chemin.

Bien que je soupçonne que vous n'avez pas besoin du realpath() du tout.

Ciao!