web-dev-qa-db-ja.com

PHP - ファイルをサーバー上の別のフォルダーに移動する

自分のウェブサイト上のユーザーがアップロードした後に、それらが不要になった場合は、サーバーから自分の画像を削除できるようにする必要があります。私は以前PHPでunlink関数を使用していましたが、これはかなり危険でセキュリティ上の問題になる可能性があると言われてきました。 (下記の前のコード:)

if(unlink($path.'image1.jpg')){ 
     // deleted
}

代わりに、ファイルを別のフォルダに移動したいと思います。彼らが最初にファイルをアップロードした後、これは長い間行われることができなければならないので彼らが彼らのアカウントにログインする時はいつでも。私はユーザーの画像を格納するメインフォルダを持っている場合:

user/

そしてその中にdelと呼ばれるフォルダがあり、それが彼らの不要な画像を置く先です。

user/del/

ファイルを別のフォルダに移動するコマンドはありますか?だからそれは言う:

user/image1.jpg

/になる

user/del/image1.jpg
153
odd_duck

rename関数はこれを行います

ドキュメントの名前変更

rename('image1.jpg', 'del/image1.jpg');

既存のファイルを同じ場所に保存したい場合はcopyを使用してください。

docs copy

copy('image1.jpg', 'del/image1.jpg');

アップロードされたファイルを移動したい場合はmove_uploaded_fileを使用します。これはrenameとほぼ同じですが、この関数は与えられたファイルがPOSTを介してアップロードされたファイルであることも確認します。

docs move_uploaded_file

$uploads_dir = '/uploads';
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
        $name = $_FILES["pictures"]["name"][$key];
        move_uploaded_file($tmp_name, "$uploads_dir/$name");
    }
}

ドキュメントからのコードスニペット

366
MKroeders

rename() 関数を使用してください。

rename("user/image1.jpg", "user/del/image1.jpg");
81
Ben Fortune

元のファイル名を付けて新しいパスにファイルを移動したい場合。これを使って:

$source_file = 'foo/image.jpg';
$destination_path = 'bar/';
rename($source_file, $destination_path . pathinfo($source_file, PATHINFO_BASENAME));
9
Nabi K.A.Z.

私はシェルを使用してすべてのデータファイルを読み取り、それから配列に割り当てます。それから私は一番上の位置にファイルを移動します。

i=0 
for file in /home/*.gz; do
    $file
    arr[i]=$file
    i=$((i+1)) 
done 
mv -f "${arr[0]}" /var/www/html/
1
To Quoc Diep

それを移動するための関数を作成します。

function move_file($file, $to){
    $path_parts = pathinfo($file);
    $newplace   = "$to/{$path_parts['basename']}";
    if(rename($file, $newplace))
        return $newplace;
    return null;
}
0
Marcelo

いくつかの解決策は、最初にファイルをcopy()し(先に述べたように)そして宛先ファイルが存在するとき - 以前のローカライズからのunlink()ファイルです。また、リンクを解除する前にMD5チェックサムを検証して確認することもできます。

0
quardas

copy() および unlink() functionを使用

$moveFile="path/filename";
if (copy($csvFile,$moveFile)) 
{
  unlink($csvFile);
}
0