符号链接和文件上传问题

时间:2009-12-19 03:28:49

标签: zend-framework file-upload symlink

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

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

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

3 个答案:

答案 0 :(得分:1)

只要您的UMASK0022,权限就不是问题,但问题是您是如何上传的? FTP不会尊重符号链接(虽然我相信sftp会这样做),而scp或rsync会。{/ p>

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

答案 1 :(得分:0)

这有帮助吗?

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

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

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

侨!

答案 2 :(得分:0)

使用“传输FTP”应用程序,当您同步“遵循符号链接”时似乎会有一个复选框。