4
    Warning: move_uploaded_file(activities.png): 
failed to open stream:
 Permission denied in /var/www/vhosts/default/htdocs/backoffice/db/changelogo.php on line 17
Warning: move_uploaded_file():
 Unable to move '/tmp/phpTNQXEi' to 'activities.png' in /var/www/vhosts/default/htdocs/backoffice/db/changelogo.php on line 17

そのため、この.phpスクリプトのファイル権限が正しくないため、権限が拒否されました。

画像のアップロードを許可するためにSSH(またはSFTP)を使用してファイルのアップロードを許可し、許可を拒否しないようにするにはどうすればよいですか。

参照用のphpスクリプトは次のとおりです。

    <?php
include 'realtydevkit.php';
session_start();

umask(0077);

$name = $_FILES['yourlogo']['name'];
$tmpname = $_FILES['yourlogo']['tmp_name'];
$error = $_FILES['yourlogo']['error'];

ini_set("display_errors", 1);

echo $error;

if ($name) {
    $directory = $name;
    $userid = $_SESSION['userid'];
    $type = "logo";

    $file = move_uploaded_file($tmpname, $directory);

    if ($file) {    
    mysql_query("INSERT INTO usercontent
    (`userid`, `type`, `url`) VALUES
    ('$userid', '$type', '$directory')");
    echo 'Uploaded';
    echo "<img src='".$directory."'/>";
    } else {
    echo 'There was an error moving the file.';
    }

    chmod($directory, 0644);
}


?>
4

2 に答える 2

1

ここでの本当の問題は、ファイルがそもそも適切な権限で書き込まれていないことです。umask事前にアプリケーションに設定していないと思われます。

アップロードされた任意のファイルにグローバルな読み取り/書き込みを設定することでセキュリティの問題を簡単に作成できるため、この設定には注意が必要です。通常のセキュリティ対策を講じ、おそらく読み取り/書き込みをWebユーザーのみに設定し、パブリックディレクトリには設定しないでください。おそらく、セキュリティの脅威を減らすために、オンデマンドまたは分単位で実行されるジョブを設定して、これらを移動することもできます。

ドキュメントのコメントから、これに関する簡単なハウツー:

<?php
// files will create as -rw-------
umask(0077);

// create a file, eg fopen()

// give access: -rw-r--r--
chmod('/path/to/file', 0644);
?>

ドキュメントの詳細情報:

http://php.net/manual/en/function.umask.php

于 2012-04-16T17:37:21.907 に答える
-1

PHPの組み込み chmod()関数 を使用できる可能性があります。

これにより、ファイルの転送先のフォルダーのアクセス許可を変更できます。ファイルが移動されたら、いつでもchmodで戻すことができます。

または、誰かがサイトにアクセスする前に、フォルダを手動でchmodすることもできます。

サーバー内にあるファイルやフォルダーのアクセス許可を扱うときは注意してください。これらのファイルには外部からアクセスできる可能性があり、非常にオープンなアクセス許可(たとえば、0777)を設定すると、スクリプトまたは誰でもそのフォルダー内のファイルを作成、削除、および変更できます。

于 2012-04-16T17:37:34.913 に答える