copy file bij het uploaden
Het volgende probleem stelt zich bij het uploaden van een file. Ik sla de filepath op in de database en niet de file zelf. Het bestand wordt gekopieerd naar een folder. Wanneer ik een bestand voor de tweede keer wil uploaden dan zou hij het volgende moeten doen. Dus eerst is er een controle, dan ziet hij ok het is hetzelfde bestand en nu zou hij moeten (2) achter het bestand zetten. Dit is geen probleem om dit op te slaan in de database. Maar het originele bestand moet worden gekopieerd naar de folder met de nieuwe bestandsnaam. Weet iemand hoe je dit kan oplossen?
Die (2) heb ik vervangen door het toevoegen van een _ .
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
if ( !empty($_FILES) )
{
$target_path = "uploads/"; // zorg dat deze map bestaat en de juiste rechten heeft.
$newName = moveFileAndRename($target_path, $_FILES['foto']); // die foto pas je zelf aan, naargelang de name van de file input
// deze $newName kan je dus gebruiken als waarde voor de databank
echo '<div>download <a href="'. $target_path . $newName .'">'. $newName .'</a></div>';
}
function moveFileAndRename($target_path, $file)
{
if ( substr($target_path, 0, -1) != '/')
$target_path = $target_path . '/'; //
$returnName = $file['name'];
while ( file_exists($target_path . $returnName ) )
{
$returnName = renameFile($returnName);
if ( empty($returnName) )
return false;
}
if( move_uploaded_file($file['tmp_name'], $target_path . $returnName) )
{
return $returnName;
}
return false;
}
function renameFile($fileName)
{
// Deze functie kijkt of een file bestaat. Indien de file bestaat wordt een '_' toegevoegd aan de file naam.
// Voel je vrij om deze functie aan te passen, zodat er bv. '(2)' wordt toegevoegd.
$ext = explode('.', $fileName);
$ext = $ext[ ( count($ext) - 1 )];
// eventueel controleer je op extensie en laat je slechts een aantal extensies toe. Bv. exe of php bestanden wil je meestal niet zomaar laten uploaden.
$name = basename( $fileName, '.'.$ext);
$name = $name . '_';
$fileName = $name .'.'. $ext;
return $fileName;
}
?>
if ( !empty($_FILES) )
{
$target_path = "uploads/"; // zorg dat deze map bestaat en de juiste rechten heeft.
$newName = moveFileAndRename($target_path, $_FILES['foto']); // die foto pas je zelf aan, naargelang de name van de file input
// deze $newName kan je dus gebruiken als waarde voor de databank
echo '<div>download <a href="'. $target_path . $newName .'">'. $newName .'</a></div>';
}
function moveFileAndRename($target_path, $file)
{
if ( substr($target_path, 0, -1) != '/')
$target_path = $target_path . '/'; //
$returnName = $file['name'];
while ( file_exists($target_path . $returnName ) )
{
$returnName = renameFile($returnName);
if ( empty($returnName) )
return false;
}
if( move_uploaded_file($file['tmp_name'], $target_path . $returnName) )
{
return $returnName;
}
return false;
}
function renameFile($fileName)
{
// Deze functie kijkt of een file bestaat. Indien de file bestaat wordt een '_' toegevoegd aan de file naam.
// Voel je vrij om deze functie aan te passen, zodat er bv. '(2)' wordt toegevoegd.
$ext = explode('.', $fileName);
$ext = $ext[ ( count($ext) - 1 )];
// eventueel controleer je op extensie en laat je slechts een aantal extensies toe. Bv. exe of php bestanden wil je meestal niet zomaar laten uploaden.
$name = basename( $fileName, '.'.$ext);
$name = $name . '_';
$fileName = $name .'.'. $ext;
return $fileName;
}
?>
Indien het trouwens enkel gaat om afbeeldingen, kan je beter dit gebruiken:
http://www.verot.net/php_class_upload.htm
Wat je trouwens ook kan doen, is de file altijd hernoemen. Geef de nieuwe file bv. een naam met de datetime van nu + een random getal van 4 cijfers.
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay