web-dev-qa-db-ja.com

PHPスクリプトは777権限でディレクトリを作成できません

ディレクトリが存在しない場合に自動的に作成し、アクセス許可を777に設定するスクリプトがあります。問題は、アクセス許可を755にのみ設定していることです。

if (!file_exists($this->get_upload_dir()))
    mkdir($this->get_upload_dir(), 0777);

作成したディレクトリの所有者を確認すると、www-data [33]と表示されます。 33の意味がわかりません。 www-dataは、サーバーがディレクトリの作成に使用するユーザーですか?もしそうなら、どうすれば777許可でディレクトリを作成することを許可できますか?

また、私はすでに次のコマンドを設定しています。

Sudo chown -R www-data:www-data /var/www/html
1
user321524

www-dataは、UbuntuでApache2 Webサーバーを実行するユーザーです。 (通常、そのユーザーのUIDは33で、これが表示されます。)したがって、Webサーバーを使用して作成されたファイルは、そのファイルが所有します。このようにファイルをcreateすると、サーバーの mask が作用し、設定したパーミッションはumaskによって制御されます。

これを回避するには、次の3つの方法があります。

  1. chmod PHP関数を使用して、作成後に権限を設定します。
  2. umask PHP関数を使用して、作成前にumaskを設定します。注意してください、これはマルチスレッドサーバーのすべてのスレッドにumaskを設定し、意図しない結果をもたらす可能性があります。
  3. Webサーバー自体のumaskを設定します。これは、サーバーで構成されたすべてのプロセスとすべてのサイトが影響を受けるという点で、(2)より悪いです。

最適なオプションは(1)を使用することです。 (1)の例については this SO answer を、(2の説明については this SO question をご覧ください)および このSFの質問 (3)の例.

4
muru