PHP image upload

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Thierry  Vredeveld

Thierry Vredeveld

02/10/2011 20:48:50
Quote Anchor link
Hallo allen :)

Ik ben bezig met een php image upload script waarmee het mogelijk is om meerdere plaatjes in 1x up te loaden.

Eerlijk bekend is het een script dat ik op internet gevonden heb, maar ik ben hem wat aan het uitbouwen.

Dit is het formulier:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

// filename: upload.form.php

// first let's set some variables

// make a note of the current working directory relative to root.

$directory_self = str_replace(basename($_SERVER['PHP_SELF']), '', $_SERVER['PHP_SELF']);

// make a note of the location of the upload handler
$uploadHandler = 'http://' . $_SERVER['HTTP_HOST'] . $directory_self . 'multiple.upload.processor.php';

// set a max file size for the html upload form
$max_file_size = 900000000; // size in bytes

// now echo the html page


    <head>
    
        <
title>Upload form</title>
    
    <
/head>
    
    <
body>
    
    <
form id="Upload" action="<?php echo $uploadHandler ?>" enctype="multipart/form-data" method="post">
    
        <
h1>
            Upload form
        </h1>
        
        <
p>
            <
input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $max_file_size ?>">
        <
/p>
        
        <
p>
            <
label for="file1">Portfolio afbeelding:</label><br />
            <
input id="file1" type="file" name="file[]">
        <
/p>
                
        <
p>
            <
label for="file2">Banner afbeelding:</label><br />
            <
input id="file2" type="file" name="file[]">
        <
/p>
                
        <
p>
            <
label for="file3">Project afbeeldingen:</label><br />
            <
input id="file3" type="file" name="file[]"><br />
            <
input id="file4" type="file" name="file[]"><br />
            <
input id="file5" type="file" name="file[]">
        <
/p>
                
        <
p>
            <
label for="submit">Press to...</label>
            <
input id="submit" type="submit" name="submit" value="Upload us!">
        <
/p>
    
    <
/form>
    
    
    <
/body>

<
/html>
?>

Het afhandelen van de invoer:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
123
124
125
126
127
128
129
130
131
132
133
<?php  
session_start();

// filename: upload.processor.php

// first let's set some variables

// make a note of the current working directory, relative to root.

$directory_self = str_replace(basename($_SERVER['PHP_SELF']), '', $_SERVER['PHP_SELF']);

// make a note of the directory that will recieve the uploaded files
$uploadsDirectory = $_SERVER['DOCUMENT_ROOT'] . $directory_self . 'cmsimages/';

// make a note of the location of the upload form in case we need it
$uploadForm = 'http://' . $_SERVER['HTTP_HOST'] . $directory_self . 'form.php';

// make a note of the location of the success page
$uploadSuccess = 'http://' . $_SERVER['HTTP_HOST'] . $directory_self . 'multiple.upload.success.php';

// name of the fieldname used for the file in the HTML form
$fieldname = 'file';


//echo'<pre>';print_r($_FILES);exit;



// Now let's deal with the uploaded files

// possible PHP upload errors

$errors = array(1 => 'php.ini max file size exceeded',
                2 => 'html form max file size exceeded',
                3 => 'file upload was only partial',
                4 => 'no file was attached');

// check the upload form was actually submitted else print form
isset($_POST['submit'])
    or error('the upload form is neaded', $uploadForm);
    
// check if any files were uploaded and if
// so store the active $_FILES array keys

$active_keys = array();
foreach($_FILES[$fieldname]['name'] as $key => $filename)
{

    if(!empty($filename))
    {

        $active_keys[] = $key;
    }
}


// check at least one file was uploaded
count($active_keys)
    or error('No files were uploaded', $uploadForm);
        
// check for standard uploading errors
foreach($active_keys as $key)
{
    (
$_FILES[$fieldname]['error'][$key] == 0)
        or error($_FILES[$fieldname]['tmp_name'][$key].': '.$errors[$_FILES[$fieldname]['error'][$key]], $uploadForm);
}

    
// check that the file we are working on really was an HTTP upload
foreach($active_keys as $key)
{
    @
is_uploaded_file($_FILES[$fieldname]['tmp_name'][$key])
        or error($_FILES[$fieldname]['tmp_name'][$key].' not an HTTP upload', $uploadForm);
}

    
// validation... since this is an image upload script we
// should run a check to make sure the upload is an image

foreach($active_keys as $key)
{
    @
getimagesize($_FILES[$fieldname]['tmp_name'][$key])
        or error($_FILES[$fieldname]['tmp_name'][$key].' not an image', $uploadForm);
}

    
// make a unique filename for the uploaded file and check it is
// not taken... if it is keep trying until we find a vacant one

foreach($active_keys as $key)
{

    $now = time();
    while(file_exists($uploadFilename[$key] = $uploadsDirectory.$now.'-'.$_FILES[$fieldname]['name'][$key]))
    {

        $now++;
    }
}


// now let's move the file to its final and allocate it with the new filename
foreach($active_keys as $key)
{
    @
move_uploaded_file($_FILES[$fieldname]['tmp_name'][$key], $uploadFilename[$key])
        or error('receiving directory insuffiecient permission', $uploadForm);
}


foreach($active_keys as $key)
{

    $_SESSION['portfolio'] = $uploadFilename[$key];
    $_SESSION['banner']  = $uploadFilename[$key];
    $_SESSION['project1'] = $uploadFilename[$key];
    $_SESSION['project2'] = $uploadFilename[$key];
    $_SESSION['project1'] = $uploadFilename[$key];

}

  
 //If you got this far, everything has worked and the file has been successfully saved.
 //We are now going to redirect the client to the success page.

header('Location: ' . $uploadSuccess);

// make an error handler which will be used if the upload fails
function error($error, $location, $seconds = 5)
{

    header("Refresh: $seconds; URL=\"$location\"");
    echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"'."\n".
    '"http://www.w3.org/TR/html4/strict.dtd">'."\n\n".
    '<html lang="en">'."\n".
    '    <head>'."\n".
    '        <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">'."\n\n".
    '        <link rel="stylesheet" type="text/css" href="stylesheet.css">'."\n\n".
    '    <title>Upload error</title>'."\n\n".
    '    </head>'."\n\n".
    '    <body>'."\n\n".
    '    <div id="Upload">'."\n\n".
    '        <h1>Upload failure</h1>'."\n\n".
    '        <p>An error has occured: '."\n\n".
    '        <span class="red">' . $error . '...</span>'."\n\n".
    '         The upload form is reloading</p>'."\n\n".
    '     </div>'."\n\n".
    '</html>';
    exit;
}
// end error handler


?>



En een gelukt formulier:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
<html lang="en">
    <
head>
        
        <
title>Successful upload</title>
    
    <
/head>
    
    <
body>
    
        <
div id="Upload">
            <
h1>Uploader</h1>
            
            <
p>Bestanden upgeload</p>
          <
/div>
    
    <
/body>

<
/html>
?>


Nu zit het probleem waar ik tegen aanloop in het afhandel script:

Ik wil graag de locatie + naam achterhalen waar het script de plaatjes opslaat. Dit lukt wel met een simpel stukje code als dit:

Quote:
$_SESSION['project1'] = $uploadFilename[$key];

Maar daarmee achterhaal ik alleen de locatie + naam van het laatste plaatje.

Dus dan krijg ik zoiets:
E:/Easy PhP/EasyPHP-5.3.8.1/www/Unit4/uploader/images/plaatje1.JPG


En wat ik dus wil is dat als ik 5 plaatjes upload ik dit kan krijgen:

E:/Easy PhP/EasyPHP-5.3.8.1/www/Unit4/uploader/images/plaatje1.JPG
E:/Easy PhP/EasyPHP-5.3.8.1/www/Unit4/uploader/images/plaatje2.JPG
E:/Easy PhP/EasyPHP-5.3.8.1/www/Unit4/uploader/images/plaatje3.JPG
E:/Easy PhP/EasyPHP-5.3.8.1/www/Unit4/uploader/images/plaatje4.JPG

Hoop dat het een beetje duidelijk is zo, en natuurlijk dat jullie mij kunnen helpen.

Alvast bedankt!

Groeten, Thierry

P.S. De php taggs staan niet overal goed, maar dat heb ik even veranderd zodat de code goed hier op het forum wordt neergezet.
Gewijzigd op 02/10/2011 20:53:32 door Thierry Vredeveld
 
PHP hulp

PHP hulp

18/12/2024 14:43:47
 
Roel -

Roel -

02/10/2011 21:38:20
Quote Anchor link
Lijkt me een nogal smerig script. Fouten onderdrukken, on error...?
Geen fatsoenlijke action="" pagina handler, zet die gewoon in je pagina zelf!

En ohja, als iemand in je systeem komt kunnen ze alles uploaden, dus ook PHP-files.
En dat wil je niet, geloof me.
 
Thierry  Vredeveld

Thierry Vredeveld

03/10/2011 08:50:45
Quote Anchor link
Ok, dat zou kunnen. Ik ben nog aan het leren.
Maar los daarvan het gaat me nu dus meer om die naam + locatie te achterhalen, weet je daar ook iets voor?
 
Thierry  Vredeveld

Thierry Vredeveld

04/10/2011 18:47:28
Quote Anchor link
Niemand die mij even op weg zou kunnen helpen met dit?
 

04/10/2011 19:32:40
Quote Anchor link
Nee helaas niet. Wat je wel kunt doen is een subdomein aanmaken, en daar alle gegevens naar uploaden. Dan heb je et minste kans op inbraak. Misschien is je het al opgevallen, maar websites zoals Google en Twitter doen dit ook.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.