2009-12-19 43 views
0

我正在发生这种奇怪的事情。我一直在本地开发的Zend Framework(PHP)Web应用程序在我的计算机上工作正常,但一旦将其上载到服务器,它认为上传目录不存在。符号链接和文件上传问题

我的应用程序有一个上传目录是一个符号链接到一个目录下的应用程序之外:

#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就可以提供应用程序。难道这是因为它实际上在发布目录中是更深一层?或者它可能是一个权限错误,因为我在本地计算机上而不是在服务器上创建了上传符号链接?

更新:在我/public/index.php文件,我定义这样我的上传目录:

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

我在你的目录树描述中看不到'/ current/public' ... – 2009-12-19 04:38:10

回答

1

的权限不应该是一个问题,只要你UMASK0022但问题是你怎么上传? FTP不会遵守符号链接(虽然我相信sftp会),而scp或rsync会。

惠特说虽然它绝对你的目录结构嵌套。符号链接应该是相对的,它的父母的真实位置,所以在你的情况下,这将是ln -s ../../../../shared_uploads。我认为这里最简单的解决方案是在releases内建立一个符号链接来指代真实的shared_uploads

+0

我在发行版中添加了符号链接,并且做了诡计!谢谢! – Andrew 2009-12-19 05:26:14

0

这有帮助吗?

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

我用两个dirname()小号取出..,我跑realpath()早些时候从路径中删除符号链接。

虽然我怀疑你根本不需要realpath()

Ciao!