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


181

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

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

代わりに、ファイルを別のフォルダに移動するだけです。これは、最初にファイルをアップロードした後、アカウントにログインするたびに実行できる必要があります。ユーザーの画像を保存するメインフォルダーがある場合:

user/

そして、その中に、不要な画像を配置する宛先であるdelというフォルダーがあります。

user/del/

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

user/image1.jpg

に移動する/なる

user/del/image1.jpg

回答:


420

renameこの関数はこれを行います

docs rename

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

既存のファイルを同じ場所に保持したい場合は、 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");
    }
}

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


rename()とcopy()の1つの問題は、たとえば作成日や変更日など、すべてのメタデータが失われることです。
Musikdoktor


17

元のファイル名を保持したまま、新しいパスにファイルを移動する場合。これを使って:

$source_file = 'foo/image.jpg';
$destination_path = 'bar/';
rename($source_file, $destination_path . pathinfo($source_file, PATHINFO_BASENAME));

魅力のように働いた。
ucMedia

1

解決策としては、最初にファイルを(上記のように)copy()し、宛先ファイルが存在する場合、以前のローカライズからファイルをunlink()します。さらに、確実にリンクを解除する前にMD5チェックサムを検証できます


1

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

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

1

シェルを使用してすべてのデータファイルを読み取り、配列に割り当てます。次に、ファイルを最上位に移動します。

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

さらに説明してください-これはPHPを使用してどのように機能しますか?
Nico Haase


-4

shell_exec( 'mv filename dest_filename');


2
Stack Overflowへようこそ!このコードスニペットは質問を解決する可能性がありますが、説明を含めると、投稿の品質を向上させるのに役立ちます。あなたは将来の読者のための質問に答えていることを覚えておいてください、そしてそれらの人々はあなたのコード提案の理由を知らないかもしれません。また、コードを説明コメントで混雑させないようにしてください。これにより、コードと説明の両方が読みにくくなります。
Filnor、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.