[PHP] Probleem bij verwijderen geuploade bestanden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • babbaloerie
  • Registratie: April 2003
  • Laatst online: 25-09-2023

babbaloerie

¯¯¯¯¯¯¯

Topicstarter
Ik heb een script gemaakt die foto's kan uploaden en verwijderen. Dit script werkt perfect op mijn PC (Windows 2000 met Apache en PHP 5.0.3). Maar zodra ik het upload naar de server (FreeBSD met Apache en PHP 4.3.11) en ik verwijder iets en ik upload het weer, gaat hij andere bestanden overschrijven en hutselt ie alles door elkaar :/

Deze code gebruik ik om te uploaden
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
<form enctype="multipart/form-data" name="portfolio" method="post" action="upload.php">
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style="font-size:12px;">Afbeelding:</td>
</tr>
<tr>
<td><input type="file" name="img" class="textinput" size="40"></td>
</tr>
<tr>
<td style="font-size : 12px;"><br><input type="hidden" name="p" value="<?php echo $_REQUEST['p']; ?>"><input type="submit" value="Uploaden" class="button" style="font-size:11px;font-family:Tahoma;font-weight:bold;">&nbsp;<input type="reset" value="Reset" class="button" style="font-size:11px;font-family:Tahoma;font-weight:bold;"></td>
</tr>
</table>
</form>

in samenwerking met dit PHP script (resized ook de plaatjes).

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
45
46
47
48
49
50
51
<?
if ($handle = opendir('../gfx/fotos/')) {
while (false !== ($file = readdir($handle))) {
if (eregi("(^$_POST[p]_)([0-9]{1,3})(.jpg$)",$file,$regs)) {
if (eregi(".*\.jpg$", $file) OR eregi(".*\.jpeg$", $file)) {

}
}
}
$nummer = $regs[2]+1;
closedir($handle); 
}

if (!isset($_POST['p'])) {
$_POST['p'] = "0";
}
if (!isset($HTTP_POST_FILES['img']['name'])) {
$HTTP_POST_FILES['img']['name'] = "0";
}
if (!isset($HTTP_POST_FILES['img']['type'])) {
$HTTP_POST_FILES['img']['type'] = "0";
}

$thumb_naam = $_POST['p']."_thumb_".$nummer.".jpg";
$naam = $_POST['p']."_".$nummer.".jpg";

$img = $HTTP_POST_FILES['img']['name'];

$type = $HTTP_POST_FILES['img']['type'];
if ($type == "image/pjpeg" OR $type == "image/jpeg") {
$image = imagecreatefromjpeg($HTTP_POST_FILES['img']['tmp_name']);

$breedte = imagesx($image);
$hoogte = imagesy($image);
$create_thumb = imagecreatetruecolor(100, 100);
imagecopyresampled($create_thumb,$image,0,0,0,0,100,100,$breedte,$hoogte);
ImageJpeg($create_thumb,"../gfx/fotos/$thumb_naam",90);

if (!@move_uploaded_file($HTTP_POST_FILES['img']['tmp_name'],'../gfx/fotos/'.$naam)) {
echo "Er is iets misgegaan.";
}
else {
echo "Uploaden geslaagd.";
}

}
else {
$image = "0";
echo "U heeft geen JPEG-bestand opgegeven.";
}
?>

Met deze code laat ik de plaatjes zien,

PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
$handle = opendir('../gfx/fotos/');
while (false != ($file = readdir($handle))) {
if (eregi("^".$_REQUEST['p']."_thumb_",$file)) {
$output = "<a href=\"verwijder.php?file=".$file."\" target=\"_self\">[img]\"../gfx/fotos/".$file."\"[/img]</a>&nbsp;";
$output = str_replace("href=\"gfx/fotos/".$_REQUEST['p']."_thumb_", "href=\"gfx/fotos/".$_REQUEST['p']."_", $output);
echo $output;
}
}
closedir($handle);
?>

waarna ik ze met deze code verwijder.

PHP:
1
2
3
4
5
6
7
8
9
<?php
}
elseif ($_REQUEST['c']=="ja") {
unlink("../gfx/fotos/".$_REQUEST['file']);
$file = str_replace("thumb_", "", $_REQUEST['file']);
unlink("../gfx/fotos/".$file);
echo "Afbeelding verwijderd.";
}
?>


Ik ben het spoor in ieder geval bijster :'( Iemand enig idee waardoor dit zou kunnen :?

Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 17-09 20:52

ripexx

bibs

Het probleem zit in het feit dat het nummer niet uniek wordt aangemaakt en je dus files zou kunnen overschrijven. De waarde $_POST['p'] is altijd hetzelfde omdat het een hidden form element is. De code loopt nu door de directory heen en bekijkt de bestandsnamen. Als je nu een file verwijderd bestaad de mogelijkheid dat de filenaam wordt overschreven. Handiger in dit geval s deze waarde gewoon uit een text file te halen en die iedere keer op te hogen of timestamps gebruiken.

Verder maak jegebruik van zaken als $HTTP_POST_FILES, gebruik hiervoor $_FILES. Daarnaast vind ik je methode niet echt handig. Verder is het gewoon een kwestie van debuggen, je file wordt overschreven. Dus ten eerst een check inbouwen als de file al bestaand niets meer doen. Daarna uitzoeken waarom wordt de file overschreven, dus waarom wordt de naam hetzelfde. enz enz. :)

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Wat heb je zelf al geprobeerd? Waar denk je dat de fout zou kunnen zitten? Kortom, lees P&W FAQ - De "quickstart" door en post eens wat meer informatie, want zoals je topic hier nu staat is het gewoon een debugrequest, en debuggen is iets wat je zelf mag doen. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

ik had hier een tijd geleden ook een soort gelijke topic over geopent.
ik gebruik het in combinatie met mysql + fysiek op server die map structuur.

Bij uploade checked die al als bestand bestaat, zoja zet een volg nummer voor de naam. In jouw geval wil je dat die nummer uniek is?. Dan kan je steeds het nummer indien je niet met mysql wil of kan werken het wegschrijven naar een text bestandje.

< dit stukje webruimte is te huur >