2

ファイルのアップロード用の PHP スクリプトを作成し、テスト用にアップロード ディレクトリに 777 のアクセス許可を与えました。スクリプトは正常に動作します。

明らかな理由で実行権限を削除したいのですが、それを行うと、次のエラーが発生します。

move_uploaded_file([filepath]) [function.move-uploaded-file]: ストリームを開けませんでした: 許可が拒否されました

アクセス許可を 777 から 776 に下げるだけで、ファイルをアップロードしようとするとこのエラーが表示されます。なぜ実行権限を持つことがこれと関係があるのか​​ 理解できません-誰かが光を当てることができますか?

ありがとうございました!

4

3 に答える 3

3

Unix および Linux でアクセスできるようにするには、ディレクトリに実行権限が必要です。

ここから引用:

ディレクトリでは、実行権限 (「検索ビット」とも呼ばれます) を使用すると、ディレクトリ内のファイルにアクセスして、たとえば cd コマンドを使用してファイルに入ることができます。ただし、実行ビットを使用するとディレクトリに入ることができますが、そのディレクトリへの読み取り権限も持っていない限り、その内容を一覧表示することはできません。

O(3桁目)のディレクトリに対する実行権限を取り消すと問題が発生するというlserniに同意します。これは、Webサーバーが所有者としてもグループのメンバーとしてもディレクトリにアクセスしていないことを示しているためです。あなたはそれを修正する必要があります。

于 2012-10-21T22:52:52.840 に答える
0

アクセス許可を 777 から 776 に下げるだけで、このエラーが表示されます

これは起こるべきではありません。770 パーミッションで実行できる必要があります。つまり、ディレクトリは Web サーバーのグループを持つ Web サイトのユーザー ID によって所有されている必要があります。

このようにして、所有者と Web サーバーの両方がディレクトリとデータを操作できます。理想的には、Web サイトにサービスを提供する Web サーバーは、Web サイトの所有者と同じユーザー ID を想定する必要があります。そうすれば、ディレクトリ モード 700 を維持して、自分だけが読み書き可能で一覧表示できるようにすることができます。

パーミッションの最後の桁がわかりにくい場合は、サーバーが「全員」のパーミッションで実行されていることを意味します。これは、開発サイトでは問題ないかもしれませんが、共有サイトではあまり良くありません (パスワードがマシン内の他の Web サイト所有者)。

ただし、テスト マシンで実行している場合は、777 のアクセス許可で問題ありません。ディレクトリ実行可能ビットは、実行可能 (ディレクトリはとにかく実行できない) という意味ではなく、単に「リスト可能」という意味です。そのビットがなければ、ファイルを作成および削除できますが、それらが本当にそこにあるかどうかを知ることができず、move_uploaded_filesこの状況に反対しています.

他の解決策があります (たとえば、Apache の各仮想ホストを chroot する)。Apache 書き込み可能ディレクトリに対するアクセス許可のベスト プラクティスは何ですか?も参照してください。

于 2012-10-21T23:02:22.223 に答える