关于符号链接和文件上传的问题

问题描述 投票:0回答:3

我遇到了这个奇怪的事情。我一直在本地开发的Zend Framework (PHP)Web应用程序在我的电脑上运行良好,但是一旦上传到服务器上,它就认为uploads目录不存在。

我的应用程序有一个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 来为应用程序服务。会不会是由于它实际上是在发布目录下,所以它的层次更深?或者可能是权限错误,因为我在本地计算机上创建了uploads符号链接,而不是在服务器上?

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

// Define path to uploads directory
defined('APPLICATION_UPLOADS_DIR')
    || define('APPLICATION_UPLOADS_DIR', realpath(dirname(__FILE__) . '/../data/uploads'));
zend-framework file-upload symlink
3个回答
1
投票

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

虽然如此,但这绝对是你的目录结构嵌套的问题。符号链接应该是相对于它的父目录的真实位置,所以在你的情况下,这将是 ln -s ../../../../shared_uploads.我想最简单的解决办法是在下面做一个符号链接。releases 指实 shared_uploads.


0
投票

这有帮助吗?

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

我删除了 .. 连用 dirname()的和我跑 realpath() 来删除路径中的符号链接。

虽然我怀疑你不需要 realpath() 一点也不

Ciao!


0
投票

使用Transmit FTP应用程序,当你同步时有一个复选框 "跟随符号链接",似乎对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.