1

同じフォルダーにあるファイルにphpファイルを書き込もうとしています。PHPファイルとファイルの両方が、アクセス許可を777(Linuxサーバー)に設定するために書き込もうとしているファイルと、それらが存在するフォルダーです。「w」または「w +」モードでfopen()を呼び出すたびに、関数は false を返すだけです。私の学校のWebサーバー上にあるため、ルートアクセスを取得してファイルの所有者をApacheと同じユーザーに変更する方法はありません。誰が何が悪いのか知っていますか?

更新:テストとして、私はこのコードを使用していました:

$handle = fopen("test.txt", 'w');
if($handle === FALSE)
    echo "\nfailed";
else
    echo "\nsuccess";
fclose($handle);

エラー報告が有効になっている出力は次のとおりです。

Warning: fopen(test.txt) [function.fopen]: failed to open stream: Permission denied in /<snip>/public_html/test.php on line 58
failed
Warning: fclose(): supplied argument is not a valid stream resource in /<snip>/public_html/test.php on line 63

その上に、テキスト ファイルのアクセス許可をチェックする fileperms() 関数とそのレポート -rwxrwxrwx の PHP Web サイトからコピーしたコードがあります。

関連ファイルの ls -al 出力は次のとおりです。

ls -al *test*
-rwxrwxrwx   1 mag5     30          1475 Dec  9 00:02 test.php*
-rwxrwxrwx   1 mag5     30             8 Dec  8 14:54 test.txt*

また、これが問題かどうかはわかりませんが、私の学校では Andrew File System ( http://en.wikipedia.org/wiki/Andrew_File_System ) と呼ばれるものを使用しています。

4

5 に答える 5

5

Telanor、AFS は非常に大きな手がかりです。

AFS (Andrew File System) には、従来の UNIX ファイルシステムを超えるレベルのディレクトリ許可があります。ディレクトリーの AFS 許可を調べて、ディレクトリー内のファイルにアクセスできることを確認してください。また、重要なのはあなたのアクセス許可ではなく、Web サーバーのアクセス許可 (または、それが実行されているユーザー ID) である可能性があります。AFS を使用してから長い時間が経過したため、ディレクトリのアクセス許可を確認するためのコマンドがオフハンドでわかりません。

于 2009-12-09T06:33:55.413 に答える
3

代わりにこれを行ってください:

$fh = fopen($filename, "a");

問題は、ディレクトリに対する適切な権限がないことだと思います。ファイルを削除しようとすると、ディレクトリへの書き込み権限が必要になり、「w」がそれを行います。

または、ファイルを切り捨て/削除する必要がある場合は、ディレクトリのアクセス許可を変更して、書き込みアクセス許可を取得します。

于 2009-12-09T00:41:40.553 に答える
0

これが失敗する理由はいくつかあります。周りの情報に基づくと、ファイルのアクセス許可に問題はありません。最初の、そしておそらく最も可能性の高いのは、Webサーバーがファイルシステム全体への読み取り専用アクセス権を持つ構成で実行されていることです。これは、NFSが読み取り専用でマウントされているか、PHPまたはサーバーが書き込みを防止するように構成されていることが原因である可能性があります。

また、ファイルを777に設定しないでください。666でも十分に危険です。これは、学校のサーバーのような共有環境で特に当てはまります。

この時点で、サーバー環境の制御が制限されていると仮定して、管理者に詳細を問い合わせる必要があります。

于 2009-12-09T05:28:39.453 に答える
0

おそらく、phpはファイルの所有者と同じユーザーとして実行されていません。phpを使用してディレクトリに新しいファイルを作成しようとしましたか(同じディレクトリにランダムな名前のファイルを作成するだけです)?

于 2009-12-09T03:42:24.837 に答える
0

MadCoder sais のようなものです。AFS ドキュメントから: 「AFS ACL は、標準の Unix の「所有者」許可と連携して機能します。所有者の許可のみが AFS ファイル アクセスに影響します。「グループ」および「その他」の Unix 許可は、AFS ファイル アクセスに影響しません。

これらの規則が適用されます。適切な AFS 許可を持つユーザーは、次のことができます。

UNIX の「所有者読み取り」モードが設定されている場合にのみ、ファイルを読み取ります。UNIX 所有者の「読み取り」モードと「書き込み」モードが設定されている場合にのみ、ファイルに書き込みます。UNIX 所有者の「読み取り」モードと「実行」モードが設定されている場合にのみ、ファイルを実行します。

AFS パーミッションを設定するには、「fs setacl」コマンドを使用する必要があります。

于 2012-01-20T09:42:26.310 に答える