2011-08-07 2 views
1

내 Mac의 로컬 AMP 스택에서 타사 PHP 응용 프로그램을 실행합니다. 최근에 라이온스와 함께 새로운 Mac Mini를 구입했으며 설치하려고합니다. 내 이전 컴퓨터는 MAMP를 장착 한 MB 에어였습니다. 이제 내장 된 아파치/PHP와 homebrew가 MySQL을 사용하고 있습니다.is_dir은 아파치의 심볼릭 링크에서 false를 반환합니다.

여기 내 문제가있다 : 나는 심볼릭 링크가있는 디렉토리가있다. 이러한 심볼릭 링크는 디렉토리에 있으며, PHP 응용 프로그램은 is_dir()을 사용하여이를 확인합니다.

내 라이온 AMP 설정에서이 is_dir()이 실패합니다. 내 Snow Leopard MAMP is_dir()에서 동일한 설정이 내 심볼릭 링크와 잘 작동합니다.

여기가 더 흥미로워집니다. php -a (php 대화 형 명령 줄 모드)을 수행하고 동일한 디렉토리에 is_dir()을 수행하면 true를 반환합니다. 아파치 요청과 관련하여 false를 리턴합니다. 이것은 내가 symlink에 액세스 할 수없는 아파치 사용자 (즉, _www)와 관련이 있다고 생각하게 만든다. 이 문제를 해결하려면 내 전문 지식 밖에 있어야합니다.

기타 참고 사항 :

  1. 네, FollowSymLinks 내 아파치 설정에서 켜져 있고, 사실, 문제의 심볼릭 링크가있는 디렉토리는 심볼릭 링크 자체입니다. 아파치는 아무런 문제가 없다. PHP is_dir()까지는 이 사용됩니다.
  2. 아니요, PHP 응용 프로그램을 편집 할 수없고 is_link()readlink()으로 돌아갈 수 있습니다.
  3. Snow Leopard/MAMP 설정에서 이와 똑같은 설정이 이루어졌습니다.

아이디어가 있으십니까?

+0

심볼릭 링크는 실제로 파일로 재귀 될 때까지 계속 파일로 간주되지 않습니까? – RSully

답변

1

아,으로 변경하는 것에 대한 귀하의 의견을 보았지만 왜 여전히 작동하지 않는지 궁금합니다. 아래 내 솔루션이 도움이되지 않을 수 있습니다.

편집 : sudo vi /etc/apache2/httpd.conf를 통해

당신이 /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 

이제 내 공개 디렉토리는 다른 사용자가 읽기 전용 실행할 수 있습니다 동안 ownergroup 전체 권한이 의미 775 권한이 있습니다.
apache 사용자가 기본값 인 _www 또는 apache 그룹이 staff 기본값 인 _www이되도록 설정해야하는지에 따라 다릅니다.

변경 사항을 결정했으면 apache를 다시 시작하십시오.

/usr/sbin/apachectl graceful 

이제 페이지가 디렉토리/파일에 액세스 할 수 있습니다.
소유권이 _www:_www 인 웹 페이지에서 이미 작성된 파일의 소유권을 변경해야하며 다시 시작한 후에도 액세스 할 수 없다는 점에 유의해야합니다.
-R을 사용하여 새 소유권을 재귀 적으로 변경할 수 있습니다.

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

감사합니다. 도움이되었습니다. httpd.conf의 사용자와 그룹을 내 사용자 이름과 그룹으로 변경했습니다. 완전히 이상적은 아니지만 단지 내 지역 개발을위한 것이므로 함께 살 수 있습니다. 나는 777로 설정하는 것이 왜 그렇게 만들지 않았는지 여전히 확신 할 수 없다. 사용자가 접근 할 수있게되었지만, 나는 계속 나아가면서 이것으로 부지기를 그만 둘 것이다. 당신의 도움을 주셔서 감사합니다. – Rob

1

권한/소유자를 확인 했습니까?

PHP 매뉴얼에서 : 참고 :이 함수의 결과는 캐시됩니다.

+0

나는 심볼릭 링크와 관련 dirs에 대한 권한을 777로 변경했다. – Rob

+0

clearstatcache()도 아무 효과가 없었습니다 – Rob

+0

CGI 및 명령 줄 설정에 php.ini에 차이가있을 수 있습니다. CGI 위에는 아파치도있다. CLI에서 작동하고 CGI에서 발생하지 않으면 구성 문제가 있다고 가정합니다. – robert

0

나는 비슷한 문제가있었습니다. 내가 테스트를 실행하면

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

:

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

그럼 내가 test.php 파일을 만든 /sites/www.test.com/docroot에서 바로 다음 않았다 : 나는 다음과 같은 링크를 만들었습니다. php를 명령 행에서 보면, is_dir이 True로 나타나지만 브라우저에서 apache를 통해 test.php를로드하면 False입니다.

나는 /sites/www.test.com/docroot/data에 가서 아무것도 변경하지 않은

chmod -R 755 . 

했다. 그런 다음 실제 심볼릭 링크 된 디렉토리에 부모이 있어야하고 적절한 권한 집합 (/ home/mike/uploads)이 필요하다는 것을 깨달았습니다. 나는 그 dir에 chmod를했고, 모든 것이 잘되었다!

관련 문제