2011-08-07 30 views
1

我在我的Mac上的本地AMP堆棧上運行第三方PHP應用程序。我最近用Lion購買了一臺新的Mac Mini,並試圖設置它。我以前的電腦是MAMP的MB空氣。現在我使用內置的apache/php和一個安裝了MySQL的自制軟件。is_dir在Apache中的符號鏈接返回false

這是我的問題:我有一個帶有符號鏈接的目錄。這些符號鏈接指向目錄,PHP應用程序正在使用is_dir()來檢查這些符號。

在我的Lion AMP安裝程序中,此is_dir()失敗。我的Snow Leopard MAMP is_dir()上的相同設置適用於我的符號鏈接。

這裏是它變得更好奇的地方。如果我做了php -a(php交互式命令行模式),並在同一目錄上執行is_dir(),則返回true。它只在apache請求的上下文中返回false。這使我認爲它與apache用戶(即_www)無法訪問符號鏈接有關。排除故障不屬於我的專業知識。

其他說明:

  1. 是的,我已經在FollowSymLinks我的Apache配置開啓,並在 事實上,如有關的符號鏈接所在的目錄是一個符號鏈接 本身。 Apache沒有問題。直到使用PHP is_dir()爲 。
  2. 不,我不能編輯PHP應用程序,只是後退is_link()readlink()
  3. 這個完全相同的設置工作在我的Snow Leopard/MAMP設置上。

任何想法?

+0

符號鏈接是否仍然被認爲是文件,直到你真的重新進入它們? – RSully

回答

1

啊看到您的意見,將其更改爲777,但仍然想知道爲什麼它不起作用。 以下我的解決方案可能無法幫助您。

編輯:

如果你有機會獲得/etc/apache2/httpd.conf
通過sudo vi /etc/apache2/httpd.conf編輯它。
然後改變這些線的這1或兩者

User _www 
Group _www 

的這裏是我的目錄列表的一個例子。現在

ace:remote-app ace (git::master)$ ls -al 
total 72 
drwxr-xr-x 24 ace staff 816 7 Aug 00:24 . 
drwxr-xr-x 11 ace staff 374 4 Aug 13:46 .. 
drwxr-xr-x 3 ace staff 102 12 Jul 17:06 .bundle 
drwxr-xr-x 14 ace staff 476 7 Aug 02:29 .git 
-rw-r--r-- 1 ace staff 100 1 Aug 19:20 .gitignore 
-rw-r--r-- 1 ace staff  9 1 Aug 19:20 .rspec 
drwxrwxr-x 10 ace staff 340 14 Jul 15:58 public 

我的公開目錄有775權限,這意味着ownergroup有充分的權限,而其他用戶只能讀取和執行。
這取決於您是否希望apache用戶從缺省_www變爲ace,或者apache組變爲默認_wwwstaff

一旦您決定要更改哪個設備,請重新啓動apache。

/usr/sbin/apachectl graceful 

而你的頁面現在應該可以訪問目錄/文件。
需要注意的一件事是,您必須更改您的網頁已經寫入的文件的所有權,因爲這些文件的所有權爲_www:_www,您將無法在重新啓動後訪問它們。
你可以通過這個來改變他們的新所有權,-R就是讓它遞歸。

sudo chown -R newapacheuser:newapachegroup <path> 
+0

謝謝,這有幫助。我將httpd.conf中的用戶和組更改爲我的用戶名和組。不完全理想,但它只是爲了我的本地發展,所以我可以忍受它。我仍然不確定爲什麼將設置設置爲777並沒有讓_www用戶有權訪問,但我只是繼續前進並退出。謝謝你的幫助。 – Rob

1

您是否檢查權限/所有者?

從PHP手冊:注意:此函數的結果被緩存。

+0

我將這些符號鏈接及其關聯的dirs的權限更改爲777.這應該夠了,不是嗎? – Rob

+0

也試過clearstatcache(),它沒有效果 – Rob

+0

也許在CGI和命令行設置中php.ini有所不同。在CGI上面也有Apache。如果從CLI工作,並從CGI不,那麼我認爲有配置問題。 – robert

0

我有類似的問題。我創建了以下鏈接:

cd /home/mike/uploads 
ln -s ./data /sites/www.test.com/docroot/data 

然後,我創建了一個test.php的文件中/sites/www.test.com/docroot,只是做了以下內容:

$dir = "/sites/www.test.com/docroot/data"; 
"is_dir\t\t" .is_dir($dir) ."\n"; 

當我跑測試。 PHP從命令行,它會顯示爲is_dir爲True,但是當我通過apache從瀏覽器加載test.php時,它是False。

我去/sites/www.test.com/docroot/data,做了

chmod -R 755 . 

這並沒有改變任何東西。然後我意識到,到實際符號鏈接的目錄需要適當的權限設置(/ home/mike/uploads)。我在那個目錄上做了一個chmod,並且一切正常!

相關問題