PHP – Verplaats een bestand naar een andere map op de server

Ik moet gebruikers op mijn website toestaan ​​om hun afbeeldingen van de server te verwijderen nadat ze ze hebben geüpload als ze ze niet langer willen. Ik gebruikte eerder de unlink-functie in PHP, maar sindsdien is gezegd dat dit behoorlijk riskant en een beveiligingsprobleem kan zijn. (Vorige code hieronder 🙂

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

In plaats daarvan wil ik nu eenvoudig het bestand naar een andere map verplaatsen. Dit moet een lange tijd kunnen worden gedaan nadat ze het bestand eerst hebben geüpload, dus op elk gewenst moment waarin ze zich aanmelden bij hun account. Als ik de hoofdmap heb die de afbeeldingen (en) van de gebruikers opslaat:

user/

En dan binnen dat een map genaamd DEL, die de bestemming is om hun ongewenste afbeeldingen te plaatsen:

user/del/

Is er een opdracht om een ​​bestand naar een andere map te verplaatsen? Dus dat zegt:

user/image1.jpg

Verplaatst naar / wordt

user/del/image1.jpg

Antwoord 1, Autoriteit 100%

De renameFunctie doet dit

DOCS hernoemen

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

Als u het bestaande bestand op dezelfde plaats wilt behouden, moet u copy

gebruiken

documenten kopiëren

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

Als je een geüpload bestand wilt verplaatsen, gebruik dan de move_uploaded_file, hoewel dit bijna hetzelfde is als renamedeze functie controleert ook of het gegeven bestand een bestand is dat geüpload via de POST, dit voorkomt bijvoorbeeld dat een lokaal bestand wordt verplaatst

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");
    }
}

codefragment uit documenten


Antwoord 2, autoriteit 23%

Gebruik de functie rename().

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

Antwoord 3, autoriteit 4%

Als u het bestand naar een nieuw pad wilt verplaatsen met behoud van de originele bestandsnaam. gebruik dit:

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

Antwoord 4

Ik gebruik shell om alle gegevensbestanden te lezen en vervolgens toe te wijzen aan array.
Dan verplaats ik het bestand naar de bovenste positie.

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

Antwoord 5

Een oplossing is om eerst het bestand te kopiëren() (zoals hierboven vermeld) en als het doelbestand bestaat – ontkoppel het ()-bestand van de vorige lokalisatie. Bovendien kunt u de MD5-controlesom valideren voordat u deze voor de zekerheid ontkoppelt


Antwoord 6

Maak een functie om deze te verplaatsen:

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

Antwoord 7

gebruik de functie copy()en unlink()

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

Antwoord 8

Gebruik deze code als bestand

function move_file($path,$to){
   if(copy($path, $to)){
      unlink($path);
      return true;
   } else {
     return false;
   }
 }

Antwoord 9

shell_exec(‘mv bestandsnaam dest_filename’);

Other episodes