4

次のアップロードフォームを使用すると、ファイルのアクセス許可に問題が発生しました。テキストファイルは、グローバルユーザーによってupload/dirに渡されます。

mysite$ ls -l
drwxrwxrwx 2 user user 4096 2010-09-24 13:07 upload

しかし、私はrootとしてログインしていないため、ドメインにアップロードされた新しいファイルは、権限を制限してupload / dirに保存され、変更できません。例えば。

upload$ ls -l
-rw-r--r-- 1 www-data www-data 3067 2010-09-24 13:07 Readme.txt

この問題は、グローバルユーザーによってアップロードフォルダーに追加されたすべてのファイルで明らかに同じです。ファイルがアップロードされたら、ドメインで実行されているphpスクリプトにrootパスワードを埋め込まずに、ファイルの権利を変更する方法が必要です。助けてください!

新しいファイルが追加されたときに、含まれているフォルダーと同じ権限をファイルに関連付ける方法はありますか?

フォームの送信:

<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>

upload_file.php:

<?php
if ($_FILES["file"]["type"] == "text/plain")
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

    if (file_exists("/home/user/mysite/upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "/home/user/mysite/upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>
4

3 に答える 3

5

最初にファイルを「/upload」ディレクトリに書き込むユーザーは、PHPモジュールを実行するApacheインスタンスを開始したユーザーです。

つまり、PHPはアップロードされたすべてのファイルの「所有者」であり、PHPスクリプトを使用して、資格情報をまったく提供せずに、関連するすべてのアップロードされたファイルのアクセス許可を変更できます。

PHPのchmod関数

アップロードされたファイルをすべてのユーザーが書き込み可能にするための迅速で汚いハックは

else 
      {
      move_uploaded_file($_FILES["file"]["tmp_name"], 
      $f="/home/user/mysite/upload/" . $_FILES["file"]["name"]); 
      chmod($f, 0777);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 
      }
于 2010-09-24T14:03:27.990 に答える
3

move_uploaded_fileはumask(600)を使用します。copy($source, $dest)移動する代わりに使用します。

于 2010-09-24T14:05:52.760 に答える
1

を使用chmodして、ファイルのアクセス許可を変更できます。

ファイルのアクセス許可を取得するには、を使用しますfileperms

于 2010-09-24T13:51:58.623 に答える