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 rename
Functie doet dit
rename('image1.jpg', 'del/image1.jpg');
Als u het bestaande bestand op dezelfde plaats wilt behouden, moet u copy
gebruiken
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 rename
deze 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
$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’);