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

3 回答 3

1

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

话虽如此,但它绝对是您的目录结构嵌套。符号链接应该是相对于其父级的真实位置的,所以在你的情况下就是这样ln -s ../../../../shared_uploads。我认为这里最简单的解决方案是在其中创建一个符号链接releases以引用真实的shared_uploads.

于 2009-12-19T03:51:10.513 回答
0

这有帮助吗?

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

..使用两个dirname()s 删除了 s 并且我realpath()之前运行以从路径中删除符号链接。

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

再见!

于 2009-12-19T04:37:27.287 回答
0

Using Transmit FTP app there is a checkbox when you sync "Follow symbolic link" that seems to work for me.

于 2020-05-22T16:05:51.810 回答