2009-12-19 34 views
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')); 
+0

我在你的目錄樹描述中看不到'/ current/public' ... – 2009-12-19 04:38:10

回答

1

的權限不應該是一個問題,只要你UMASK0022但問題是你怎麼上傳? FTP不會遵守符號鏈接(雖然我相信sftp會),而scp或rsync會。

惠特說雖然它絕對你的目錄結構嵌套。符號鏈接應該是相對的,它的父母的真實位置,所以在你的情況下,這將是ln -s ../../../../shared_uploads。我認爲這裏最簡單的解決方案是在releases內建立一個符號鏈接來指代真實的shared_uploads

+0

我在發行版中添加了符號鏈接,並且做了詭計!謝謝! – Andrew 2009-12-19 05:26:14

0

這有幫助嗎?

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

我用兩個dirname()小號取出..,我跑realpath()早些時候從路徑中刪除符號鏈接。

雖然我懷疑你根本不需要realpath()

Ciao!