[PHP] Upload image script

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • noot101
  • Registratie: Februari 2002
  • Laatst online: 14-09 21:43
Ik heb een probleem met een php-script om bestanden te uploaden naar mijn webserver.
Als ik het script (zie onderstaand) upload naar de webserver van mijn hosting provider (LAMP) dan werkt het goed. upload ik het script naar mijn eigen webserver (WAMP), dan stopt de parsing van het script op het moment dat er een > in het script voorkomt.

De uitvoer van het script is dan:
$max_size) { echo"Bestand is te groot: ".$_FILES['image']['size'][$i]." / ".$max_size."
\n"; } elseif(!empty($max_thumb) && $_FILES['image']['width'][$i] > $max_size) { echo"Bestand is te groot: ".$_FILES['image']['size'][$i]." / ".$max_size."
\n"; } elseif(!isset($extfout)){ } else { if(move_uploaded_file($_FILES['image']['tmp_name'][$i], "./img/".$foto_name.".".$bestand3)) { echo "
".$_FILES['image']['name'][$i]." is succesvol geupload.
\n"; //echo $_FILES['image']['size'][$i]; //echo "
\n"; echo "
Je kan het plaatje in een topic laten zien door de volgende code erin te zettten:
"; echo "[img=img/".$foto_name.".".$bestand3."]
"; } else { echo $_FILES['image']['name'][$i]." kon niet geupload worden.
\n"; } } } else { echo "Ongeldig bestandstype: ".$type."
\n"; } } else { echo "Geen file geselecteerd.
\n"; } } } else { if($user==TRUE){ ?>
Aantal:
"; echo ""; } ?> 


De uitvoer van de code begint dus vanaf regel 55 na de > in onderstaand script.
Het zal waarschijnlijk een instelling zijn van m'n webserver, maar ik kan er niet achter komen wat het is. Ik heb o.a. de gd2 extensie in php.ini aangezet, maar zonder resultaat. Ook in de logs van Apache zie ik niks wat hiermee te maken kan hebben.
Kan iemand me hiermee op weg helpen? Ik weet ook niet of het met apache(2.2.11) te maken heeft of met PHP (5.2.9-1). :?

Dit is het script dat ik gebruik voor de upload (ik denk niet dat het helemaal relevant zal zijn, maar toch maar voor de volledigheid):
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<?
//Instellingen
$forms = 1;                 //Standaard aantal file uploads
$user = TRUE;               //User kan aangeven dat hij meer files wil uploaden
$max_size = 924288;       //Maximale bestands grootte, 0 voor ongelimiteerd
$max_thumb = 300;           //Maximale hoogte dan wel breedte van de thumb.
$ext = "jpg jpeg gif png"; // Welke extensies kunnen er worden geupload ( als alles mag dan niks invullen )

// Toegestaande extensies opvragen
$ext = strtolower($ext);
$ext = explode(" ", $ext);
$aantal = count($ext);

if(isset($_POST['forms']) && $user==TRUE)
{
    $forms=$_POST['forms'];
}
?>
<html>
<head>
       <title>Upload image</title>
</head>
<body>
<?
if(isset($_POST['submit']))
{
    $aantal=count($_FILES['image']['type']);
    $i=0;
    for($i=0;$i<$aantal;$i++)
    {
            $foto_name = time()."_".rand(1,999);
        //$foto_name=$_FILES['image']['name'][$i];
        if(!empty($_FILES['image']['tmp_name'][$i]))
        {
            $type= $_FILES['image']['type'][$i];

            // Bestands naam opvragen
            $bestand2 = explode("\\", $_FILES['image']['name'][$i]);
            $laatste = count($bestand2) - 1;
            $bestand2 = "$bestand2[$laatste]";

            // Extensie van bestand opvragen
            $bestand3 = explode(".", $bestand2);
            $laatste = count($bestand3) - 1;
            $bestand3 = "$bestand3[$laatste]";
            $bestand3 = strtolower($bestand3);

            for ($tel = 0;$tel < $aantal; $tel++){
                if (in_array($bestand3,$ext)){
                    $extfout = "nee";
                }
            }
                  
            if($type == "image/gif" OR $type == "image/jpeg"){
                if(!empty($max_size) && $_FILES['image']['size'][$i] > $max_size)
                {
                    echo"Bestand is te groot: ".$_FILES['image']['size'][$i]." / ".$max_size."<br>\n";
                }
                elseif(!empty($max_thumb) && $_FILES['image']['width'][$i] > $max_size)
                {
                    echo"Bestand is te groot: ".$_FILES['image']['size'][$i]." / ".$max_size."<br>\n";
                }
                elseif(!isset($extfout)){
                }
                else
                {
                    if(move_uploaded_file($_FILES['image']['tmp_name'][$i],  "./img/".$foto_name.".".$bestand3))
                    {
                        echo "<br>".$_FILES['image']['name'][$i]." is succesvol geupload.<br \>\n";
                        
                        //echo $_FILES['image']['size'][$i];
                        
                        //echo "<img src=\"./img/".$foto_name."\" \><br \>\n";
                        echo "<br> Je kan het plaatje in een topic laten zien door de volgende code erin te zettten:<br>";
                        echo "<i>[img=img/".$foto_name.".".$bestand3."]</i><br>";
                                        }
                    else
                    {
                        echo $_FILES['image']['name'][$i]." kon niet geupload worden.<br \>\n";
                    }
                }
            }
            else
            {
                echo "Ongeldig bestandstype: ".$type."<br>\n";
            }
        }
        else
        {
            echo "Geen file geselecteerd.<br>\n";
        }
    }
}
else
{
    if($user==TRUE){
        ?>
        <FORM NAME="select" METHOD="POST" action="<?echo$_SERVER['PHP_SELF'];?>">
        Aantal: <SELECT name="forms" onchange="javascript:document.select.submit();">
        <?
        for($i=1;$i<11;$i++){
            ?>
            <option value="<?=$i?>"><?=$i?></option>
            <?
        }
        echo "</SELECT>";
        echo "</FORM>";
    }
    ?>
    <FORM NAME="upload_form" METHOD="POST" ACTION="<?echo$_SERVER['PHP_SELF'];?>"  ENCTYPE="multipart/form-data">
    <?
    for($i=0;$i<$forms;$i++){
        ?>
        <INPUT TYPE="file" value="1" NAME="image[<?=$i?>]" \><br \>
        <?
    }
    echo "<INPUT TYPE=\"submit\" NAME=\"submit\" VALUE=\"Upload\">";
    echo "</FORM>";
}
?>
</body>
</html>

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Short tags staan uit?

Is dit de browser output? Wat krijg je te zien als je in de browser " view pagesource" doet

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • sanzut
  • Registratie: December 2006
  • Laatst online: 11:09

sanzut

It's always christmas time

Daar lijkt het inderdaad wel op...
Probeer <? overal eens te vervangen voor <?php

Acties:
  • 0 Henk 'm!

  • elroy910
  • Registratie: Juli 2007
  • Laatst online: 19-09 11:52
Als ik jouw was zou ik alle <? even vervangen door <?php dit gaf bij mij een foutmelding minder.

m`n scherm stond aan, toen ik je antwoord intikte vandaar 5 min verschil; sorry

[ Voor 29% gewijzigd door elroy910 op 07-05-2009 15:49 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Mag ik vragen waarom je dit soort dingen doet?
PHP:
1
2
3
4
5
$ext = "jpg jpeg gif png";
// Toegestaande extensies opvragen
$ext = strtolower($ext);
$ext = explode(" ", $ext);
$aantal = count($ext);

In plaats van gewoon logische dingen, wat je wat cpu tijd bespaart, zoals:
PHP:
1
$ext = array('jpg','jpeg','gif','png');

Overigens overschrijf je later $aantal met het aantal files dat is geupload?

Of:
PHP:
1
2
3
4
5
6
7
8
9
10
// Bestands naam opvragen
            $bestand2 = explode("\\", $_FILES['image']['name'][$i]);
            $laatste = count($bestand2) - 1;
            $bestand2 = "$bestand2[$laatste]";

            // Extensie van bestand opvragen
            $bestand3 = explode(".", $bestand2);
            $laatste = count($bestand3) - 1;
            $bestand3 = "$bestand3[$laatste]";
            $bestand3 = strtolower($bestand3);

in plaats van
PHP:
1
2
3
$fileinfo = pathinfo($_FILES['image']['name'][$i]);
$filename = $fileinfo['filename'];
$fileext = $fileinfo['extension'];


Nog eentje:
PHP:
1
2
3
4
5
for ($tel = 0;$tel < $aantal; $tel++){
                if (in_array($bestand3,$ext)){
                    $extfout = "nee";
                }
            }

Wat doet dit? Die for is daar compleet loos, aangezien 1 keer is_array aanroepen ook gewoon werkt. Verder hoor je dit soort checks met booleans te doen, niet met een "ja" of "nee" string.

[ Voor 16% gewijzigd door MueR op 07-05-2009 16:03 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • noot101
  • Registratie: Februari 2002
  • Laatst online: 14-09 21:43
THX het vervangen van <? door <?php is inderdaad de oplossing. Dat het zo simpel kon zijn....

De script heb ik ergens gevonden en niet zelf verzonnen, maar ik zal de voorgestelde wijzigingen eens goed bekijken, ziet er op het eerste gezicht wel logischer uit inderdaad.

[ Voor 66% gewijzigd door noot101 op 07-05-2009 16:10 ]

Pagina: 1