1

私は現在、次のものを持っています:

    if (in_array($_FILES['userfile']['type'], $mimeTypes))
      {

$target_path = "./uploads/{$_SESSION['email']}";

$target_path = $target_path . basename( $_FILES['userfile']['name']);

if(move_uploaded_file($_FILES['userfile']['tmp_name'], $target_path)) {
    echo "The file ".  basename( $_FILES['userfile']['name']).
    " has been uploaded";

} else{
    echo "There was an error uploading the file, please try again!";
}

誰かがログインを作成すると、電子メール 0666 パーミッションを使用して、ユーザーのディレクトリが作成されます。

現在、move_uploaded_file() は、ファイルをユーザーのディレクトリのすぐ外側、uploads ディレクトリ内に配置します。エラーがスローされています。相対パスが正しいことを何度も確認しました。

私は Ubuntu を使用しており、アップロードされたファイルにはロック記号が付いていますが、ユーザーのフォルダーにドラッグ アンド ドロップできます。

4

2 に答える 2

2

の出力に$target_pathは./basename()/

// Append trailing slash
$target_path = "./uploads/{$_SESSION['email']}/";
$target_path = $target_path . basename( $_FILES['userfile']['name']);

ディレクトリには、ファイルシステムによってトラバースされる実行権限が必要であるため、ディレクトリの正しい権限は0755(誰でも書き込み可能にしたくない!) 必要があります。グループ書き込み可能 ( 0775) にして、アップロード ディレクトリのグループが Apache Web サーバー ユーザーに設定されていることを確認します。これは、uploads/ ディレクトリに setgid を設定し、そのグループを apache ユーザーに設定して、その下に作成されたディレクトリを使用して、誰でも書き込み可能にせずに正しい書き込み権限を継承することによって行うのが最適です。

于 2012-08-01T01:36:22.520 に答える
1

$target_pathそれの後に必要があるように見えます/。または、次の行と結合すると、メールアドレスが先頭に追加されたファイルが作成されます。

$target_path = "./uploads/{$_SESSION['email']}/";

$target_path = $target_path . basename( $_FILES['userfile']['name']);

まだuploads/ディレクトリに配置されている場合は、$_SESSION['email']正しく設定されていることを確認してください。

于 2012-08-01T01:37:46.137 に答える