我遇到了这个奇怪的事情。我一直在本地开发的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'));
权限不应该是个问题,只要你的 UMASK
是 0022
但问题是你是如何上传的?FTP 不会尊重符号链接(虽然我相信 sftp 会),而 scp 或 rsync 会。
虽然如此,但这绝对是你的目录结构嵌套的问题。符号链接应该是相对于它的父目录的真实位置,所以在你的情况下,这将是 ln -s ../../../../shared_uploads
.我想最简单的解决办法是在下面做一个符号链接。releases
指实 shared_uploads
.
这有帮助吗?
defined('APPLICATION_UPLOADS_DIR') || define('APPLICATION_UPLOADS_DIR', dirname(dirname(realpath(__FILE__))) . '/data/uploads');
我删除了 ..
连用 dirname()
的和我跑 realpath()
来删除路径中的符号链接。
虽然我怀疑你不需要 realpath()
一点也不
Ciao!
使用Transmit FTP应用程序,当你同步时有一个复选框 "跟随符号链接",似乎对我有用。