Zend framework 符号链接和文件上载问题

Zend framework 符号链接和文件上载问题,zend-framework,file-upload,symlink,Zend Framework,File Upload,Symlink,我正在经历一件奇怪的事情。我一直在本地开发的Zend Framework(PHP)web应用程序在我的计算机上运行良好,但一旦上传到服务器上,它就会认为uploads目录不存在 我的应用程序有一个上载目录,它是指向应用程序外部目录的符号链接: #local /myapp.local /application /data /uploads (symlink, points to ./../../shared_uploads) /public/index.ph

我正在经历一件奇怪的事情。我一直在本地开发的Zend Framework(PHP)web应用程序在我的计算机上运行良好,但一旦上传到服务器上,它就会认为uploads目录不存在

我的应用程序有一个上载目录,它是指向应用程序外部目录的符号链接:

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

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

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

只要您的
UMASK
0022
,权限就不应该是问题,但问题是您如何上传?FTP不会尊重符号链接(尽管我认为sftp会尊重),而scp或rsync会尊重符号链接

虽然它肯定是您的目录结构嵌套。符号链接应该是相对于其父对象的真实位置的,因此在您的情况下,它将是
ln-s../../../../../shared\u uploads
。我认为这里最简单的解决方案是在
发行版
中创建一个符号链接,以引用真正的
共享上传

这有帮助吗

defined('APPLICATION_UPLOADS_DIR') || define('APPLICATION_UPLOADS_DIR', dirname(dirname(realpath(__FILE__))) . '/data/uploads');
我通过使用两个
dirname()
s删除了
,并在前面运行了
realpath()
从路径中删除符号链接

尽管我怀疑您根本不需要
realpath()


再见

使用Transmit FTP app同步“跟随符号链接”时,有一个复选框似乎对我有效。

我在目录树描述中没有看到
/current/public
。我在发行版中添加了符号链接,这就成功了!谢谢