2011-08-07 13 views
1

MacのローカルAMPスタックでサードパーティのPHPアプリケーションを実行しています。私は最近ライオンと共に新しいMac Miniを購入し、それをセットアップしようとしています。私の以前のコンピュータはMAMPを搭載したMBエアでした。今私は組み込みのApache/PHPと自作のMySQLをインストールして使用しています。is_dirがApacheのシンボリックリンクでfalseを返す

私の問題は次のとおりです。シンボリックリンクのあるディレクトリがあります。これらのシンボリックリンクはディレクトリにあり、PHPアプリケーションはこれらをis_dir()でチェックしています。

私のライオンAMPセットアップでは、このis_dir()は失敗しています。私のSnow Leopard MAMP is_dir()の同じ設定がシンボリックリンクでうまく動作します。

ここではもっと興味があります。 php -a(php対話型コマンドラインモード)を実行し、同じディレクトリにis_dir()を実行すると、trueを返します。これは、Apacheの要求のコンテキストでのみfalseを返します。これは私に、symlinkにアクセスできないApacheユーザ(これは_www)と関係があると思います。この問題を解決するには、私の専門知識の範囲外です。

その他の注意事項:

  1. はい、私はFollowSymLinksは私のApacheの設定でオンになっている、と 実際には、問題のシンボリックリンクが存在するディレクトリは シンボリックリンクそのものです。 Apacheには問題ありません。 PHP is_dir()までは が使用されます。
  2. いいえ、PHPアプリケーションを編集することはできません。is_link()readlink()に戻ってください。
  3. 私のSnow Leopard/MAMPセットアップではまったく同じ設定が行われました。

+0

シンボリックリンクは実際にファイルに再帰されるまではファイルとはみなされませんか? – RSully

答えて

1

ああ、あなたのコメントは777に変更されましたが、まだ動作していないのは不思議です。 私の以下の解決策が役に立たないかもしれません。

EDIT: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権限を持っています。
デフォルトの_wwwからapacheのユーザをaceにするか、デフォルトの_wwwからstaffになるapacheグループにするかによって異なります。

変更するものを決めたら、apacheを再起動してください。

/usr/sbin/apachectl graceful 

これで、あなたのページはディレクトリ/ファイルにアクセスできるようになります。
あなたのウェブページによってすでに書き込まれたファイルの所有権を_www:_wwwのものとして変更しなければならないことに注意してください。再起動後にそのファイルにアクセスすることはできません。
これを使用して新しい所有権を変更することができます。-Rは、それを再帰的にすることです。

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

ありがとうございました。これが助けになりました。私は、httpd.confのユーザーとグループを自分のユーザー名とグループに変更しました。全く理想的ではありませんが、それは私の地域開発のためだけであり、私はそれと一緒に暮らすことができます。私はまだ777に物事を設定していないので、ユーザーがアクセスできるようになっていないのかどうかは分かりませんが、私はこれをやり直すつもりです。ご協力いただきありがとうございます。 – Rob

1

権限/所有者を確認しましたか?

PHPマニュアル:注:この関数の結果はキャッシュされます。

+0

私はこれらのシンボリックリンクとそれに関連するdirのパーミッションを777に変更しました。 – Rob

+0

clearstatcache()も無効です。 – Rob

+0

CGIやコマンドラインの設定にphp.iniに違いがあるかもしれません。 CGIの上にはApacheもあります。 CLIからのもので、CGIからのものでなければ、設定に問題があると推測されます。 – robert

0

私は同様の問題がありました。私は、テストを実行したとき

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

:その後、私はちょうど次のことをやった/sites/www.test.com/docrootでtest.phpをファイルを作成し

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

:私は、次のリンクを作成しました。 phpをコマンドラインから実行すると、is_dirがTrueであると表示されますが、ブラウザからtest.phpをApache経由で読み込んだときはFalseです。

私は何も変更していない

chmod -R 755 . 

を/sites/www.test.com/docroot/dataに行っていました。それから実際のシンボリックリンクされたdirへの親のは、適切なアクセス権セット(/ home/mike/uploads)が必要であることを認識しました。私はそのディレクトリにchmodをして、すべてがうまくいった!

関連する問題