5

Linux SSH

を使用してphpでファイルを作成します

if (!is_dir(DIR_FILE))
    mkdir(DIR_FILE, 0777);

$filename = DIR_FILE . $id . '.txt';

$handle_cf = fopen($filename, 'a');
fwrite($handle_cf, $data . "\n");
fclose($handle_cf);

chmod($filename, 0777);

chown($filename, "usr111");  //  usr111 = username
chgrp($filename, "usr111");  //  usr111 = group that is also attached to apache

ファイルは次の権限を取得します。

-rwxrwxrwx 1 apache       apache       1447 Apr  4 12:48 D.txt
-rwxrwxrwx 1 apache       apache       1447 Apr  4 12:48 E.txt

ただし、通常のユーザーアカウント(usr111)でファイルを削除しようとすると。次のエラーが表示されます

[usr111@host session]$ rm D.txt 
rm: cannot remove `D.txt': Permission denied

注: root の下にあるファイルを削除できます。

修正が見つかりました! PHPのmkdirでモード設定を使用していたにもかかわらず。何らかの理由で、これは機能しませんでした。以下を追加しました。

    if (!is_dir($dir)) {
        mkdir($dir, 0777);

        chmod($dir, 0777);
    }
4

1 に答える 1

2

mkdirはうまく機能していますが、2 番目の引数はパーミッションではありません。これは、設定するパーミッションを計算するためにシステムが現在のumaskと一緒に使用するモードです。マニュアルから:

モードは、umask() を使用して変更できる現在の umask によっても変更されます。

ファイルシステムを 2 回呼び出さずにアクセス許可を設定するには、スクリプトを変更する必要があります。

$oldUmask = umask(0); // disable umask
mkdir($path, 0777);
umask($oldUmask);  // reset the umask
于 2012-04-05T12:37:30.273 に答える