14

Windows Server 2008 上の IIS 7 で実行されている PHP Web サイトで問題が発生しています。

エラーが発生している mkdir を呼び出すコード行が 1 行あり、エラー ログには次のように表示されます。

"... アクセス拒否 ..."

フォルダーのアクセス許可に関係することは何も除外しました(複数のグループを試しました:全員、ユーザー、IUSR、ネットワークサービスなど、運がありません)。

mkdir の仕組みを知りたいのですが、親フォルダーの読み取り専用属性をチェックしますか?

もしそうなら、Windows Server 2008 のすべてのフォルダが「読み取り専用」としてマークされ、チェックボックスがグレー表示されているため、これが問題の根本である可能性があります - Microsoft は「設計による」と言っていますが、私はそれが本当に「悪い」デザイン"。

助けてください。

PSここでエラーが見つかるコード行https://github.com/LimeSurvey/LimeSurvey/blob/070d255ba381d7abcd231d7c9e0c7d11f5578c97/admin/templates.php#L1182 1182行目です。

解決:

  • 結局、それは許可の問題でした!
  • 間違ったフォルダーにアクセス許可を適用していました (手を額に叩きつける)
  • /Templates と /Uploads/Templates の 2 つの「テンプレート」フォルダーがあります。
  • /Template はデフォルトのテンプレート用で、/Uploads/Templates はユーザーが作成したテンプレート用です
  • "Users" グループに /Uploads/Templates フォルダーへの r/w/execute/modify 権限を付与しました
  • 以前は /Templates にアクセス許可を適用していましたが、
  • これをデバッグするために、値echoを出力していました$target

教訓:

  • 常にエラーメッセージを読んでください-「許可が拒否されました」と書かれていて、信じられませんでした
  • 明らかなことを真実だと思い込まないでください - /Templates は適切なフォルダーではありませんでした
  • コードにエラーがある場合は、コードをデバッグし、問題を推測しようとしないでください。
  • 変数値の出力などの単純な手法を使用してコードをデバッグします - 例: echo
  • 大多数の意見に耳を傾けてください。ここにいるほとんどの人は、IT は許可の問題だと言っています。
  • ほとんどのエラーは簡単に修正できます - 複雑なものを探す必要はありません

@BOMEz に賞金が授与されたのはmkdir()、許可について再考する必要があることを示すドキュメントからの有用な引用のためです。@BOMEz もカスタマイズされた回答を提供し、コメントを介して私とやり取りしてくれました。

4

4 に答える 4

7
  • テストとして(できれば開発環境で)、IISユーザーに親フォルダーへのフルアクセスを許可します。これでうまくいく場合は、ゆっくりと特権を取り除いて、必要な特権を確認してください。

  • 変更してみてください:

    if(mkdir($target,0777))

に:

if(mkdir($target))

Windowsはモードオプションを無視します。失敗の原因となる奇妙なバグの可能性があります。

さらに、$ target変数について、Windowsのフルパスにリンクするように強制してみてください。そのようなC:\Program Files\ IIS\...

以前、相対パスを使用しようとしてアクセスが拒否されるというウィンドウの状況に遭遇しましたが、フルパスは問題なく機能します。

編集: mkdir()のドキュメントのコメントを見ると、あるコメント投稿者は、ユーザーに実行権限を追加する必要があるかもしれないと述べています。

権限拒否エラーが発生したが、ディレクトリを作成しようとしている権限と所有権が正しいことを確認した場合は、もう一度確認してください。

ディレクトリを作成しようとしている場所には、フォルダが読み取り可能か書き込み可能かに関係なく、ディレクトリを作成しようとしている所有者の実行権限が必要です。

これは一部の人には明らかかもしれませんが、最初は私にはわかりませんでした。うまくいけば、これは私が経験したトラブルをあなたに救うでしょう。

于 2012-06-22T18:04:42.370 に答える
4

どのような種類のコントロール パネルについても言及していないので、物理デスクトップまたはリモート デスクトップのいずれかでサーバーにアクセスできると仮定します。また、php.ini の設定を確認したと仮定します。

そうは言っても、これらの許可の問題のいくつかには回避策があります。

このサイトで管理者の資格情報を使用するか、単に使用するには、管理者アカウントを作成 (および管理者グループに追加) する必要があります。

  1. IIS マネージャーを開く
  2. サイトを展開
  3. 問題のサイトを強調表示する
  4. 画面の右側にある [基本設定] をクリックすると、ダイアログ ボックスが表示されます。
  5. 下部にある [Connect as...] というボタンをクリックします。
  6. [特定のユーザー] を選択し、[設定...] ボタンをクリックします。
  7. 自分のアカウントまたは作成したアカウントのユーザー名とパスワードを入力します。
  8. 「OK」ボタンを 3 回押します。

これは、スクリプトからファイル システムへの完全な無制限のアクセスを許可するため、大がかりな修正です。

新しいユーザーを作成し、ある程度のスクリプト セキュリティを維持したい場合は、そのユーザーを管理者グループから引き出して、次のようにそのサイトでのみ完全なアクセス許可を与えることができます。

  1. ハイライトサイト
  2. 右クリック、権限の編集
  3. セキュリティタブ
  4. 「編集」ボタンをクリック
  5. 「追加」ボタンをクリック
  6. [詳細設定] をクリックしてから [今すぐ検索] をクリックします。
  7. 作成したユーザーをダブルクリック
  8. 「OK」をクリック
  9. ユーザーを強調表示し、フル コントロールの横にある許可の下のボックスにチェックを入れます
  10. [OK] を 2 回クリックします

求められたら、すべてのディレクトリとファイルに適用することを選択します。

それでも問題が解決しない場合は、php の設定が正しくないか破損している可能性があります。(セーフモードがオンになっているのでしょうか?)

于 2012-06-26T20:40:26.443 に答える
1

次に権限について説明します。

  • 読んだ

    • ファイル上: これは、ファイルの内容を読み取ることを意味します
    • ディレクトリ上: ディレクトリの内容を表示することを意味しますlsdir
  • 書く

    • ファイル上: これは、ファイルの内容を編集できることを意味します
    • ディレクトリ上: ディレクトリのコンテンツを作成/変更できること、つまり、そのディレクトリに新しいファイルまたはフォルダーを作成できることを意味します。
  • 実行する

    • ファイル上: これは、ファイルからコードを実行することを意味します (スクリプト/実行可能ファイル用)。
    • ディレクトリ上: ディレクトリに入ることを意味します。cdこの権限がないと、そのディレクトリに入ることができません。

--

新しいディレクトリを作成したり、新しいファイルをディレクトリに書き込んだりするには、そのディレクトリに対する書き込み権限が必要です。したがって、フォルダーをC:/your_folder/必要に応じwriteて作成executeし、そのフォルダーに対するアクセス許可を設定します。(はい、mkdir最初にフォルダー内に移動する必要があるように、実行する必要もあります。)

于 2012-06-21T14:27:34.060 に答える
1

私たちが頻繁に遭遇する問題の 1 つは、ファイルが任意の場所から Web サイトの場所に移動され、Web サイトで使用されているプールのアプリケーション プール ユーザーが必要とするアクセス許可を継承するのではなく、元のアクセス許可を維持することです。

したがって、ドキュメント ルート フォルダを右クリックし、[プロパティ] に移動してから [セキュリティ] タブに移動することをお勧めします。高度なボタンを押して、「すべての子オブジェクトのアクセス許可エントリを、子オブジェクトに適用されるここに表示されているエントリに置き換える」チェックボックスをオンにします。そうすれば、少なくともすべての権限がすべてのサブフォルダーとファイルに設定されていることを確認できます。

すべてのフォルダーで読み取り専用属性がチェックされているにもかかわらず、読み取り専用属性に問題はありませんでした。(グレーアウト/チェック済み)。だから私はそれがあなたの問題だとは思わない。

于 2012-06-21T14:35:20.400 に答える