Uploader aanpassen
Ik heb hier een script dat bijna alles goed wat ik wil. Hij upload de afbeelding en zet deze in de database. Jammergenoeg bewaard die alleen een verkleinde (thumb) versie van de foto. Ik wil zowel het origineel ook bewaren.
Quote:
<body>
<div id="container">
<div id="header">
<h1></h1>
</div>
<div id="content">
<h3>Image uploaden en resizen</h3>
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
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
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
<?php
session_start();
include("config.php");
header ('Content-type: text/html; charset=UTF-8');
ini_set ('display_errors', 1);
error_reporting (E_ALL);
$config = array (
'title' => 'Rene Smurfs Kerstbomen Uploader',
'form_action' => $_SERVER['REQUEST_URI'],
'form_accept_charset' => 'UTF8',
'required_fields' => array (),
'allowed_extensions' => array ('jpg'),
'max_file_size' => 2000,
'errs' => array (),
'msgs' => array ()
);
function resize ($path, $dst_w) {
list ($src_w, $src_h) = getimagesize ($path);
if ($dst_w < $src_w) {
$ratio = $dst_w / $src_w;
$dst_h = ceil ($ratio * $src_h);
$src = imagecreatefromjpeg ($path);
$dst = imagecreatetruecolor ($dst_w, $dst_h);
imagecopyresampled ($dst, $src, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);
imagejpeg ($dst, $path, 80);
imagedestroy ($src);
imagedestroy ($dst);
}
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// upload afhandelen
$root = $_SERVER['DOCUMENT_ROOT'];
$dir = '/testupload2/thumbs/';
if ($_FILES['userfile']['error'] != UPLOAD_ERR_NO_FILE) {
try {
switch ($_FILES['userfile']['error']) {
case UPLOAD_ERR_INI_SIZE:
throw new Exception ('De grootte van het bestand is groter dan de in <strong>php.ini</strong> ingestelde waarde voor upload_max_filesize.');
break;
case UPLOAD_ERR_FORM_SIZE:
throw new Exception ('De grootte van het bestand is groter dan de in HTML gegeven <strong>MAX_FILE_SIZE</strong>.');
break;
case UPLOAD_ERR_PARTIAL:
throw new Exception ('Het bestand is maar <strong>gedeeltelijk</strong> geupload.');
break;
}
if (!is_uploaded_file ($_FILES['userfile']['tmp_name'])) {
throw new Exception ('Fout bij is_uploaded_file ()');
}
$pieces = explode ('.', $_FILES['userfile']['name']);
$extension = end ($pieces);
$extension = strtolower ($extension);
if (!in_array ($extension, $config['allowed_extensions'])) {
throw new Exception ('De extensie <strong>' . $extension . ': </strong> is niet toegestaan. Alleen ' . implode (' | ', $config['allowed_extensions']));
}
if ($_FILES['userfile']['size'] > ($config['max_file_size'] * 1024)) {
throw new Exception ('Maximaal ' . $config['max_file_size'] . ' KB');
}
$new_name = preg_replace ('/[^0-9a-zA-Z\.]/', '', $_FILES['userfile']['name']);
/*
if (file_exists ($root . $dir . $new_name)) {
throw new Exception ('Het bestand <strong>' . $new_name . '</strong> bestaat al. Geef het bestand dat u uploadt een andere naam');
}
*/
if (!move_uploaded_file ($_FILES['userfile']['tmp_name'], $root . $dir . $new_name)) {
throw new Exception ('Fout bij move_uploaded_file ()');
}
if (!chmod ($root . $dir . $new_name, 0644)) {
throw new Exception ('Fout bij chmod');
}
resize ($root . $dir . $new_name, 140);
}
catch (Exception $e) {
array_push ($config['errs'], $e->getMessage ());
}
}
// naar database
// memberID opvragen en controleren
$omschrijving = $_POST['naam'];
// voeg de locatie + omschrijving van de afbeelding toe in de database
$afbeelding = "thumbs/" . $new_name;
$query = "INSERT INTO memberpic (omschrijving, afbeelding) VALUES ('$omschrijving','$afbeelding')";
if(!mysql_db_query($dbname,$query)) die(mysql_error());
echo " Bedankt $omschrijving! uw kerstbomenfoto is geupload.<br>";
}
?>
session_start();
include("config.php");
header ('Content-type: text/html; charset=UTF-8');
ini_set ('display_errors', 1);
error_reporting (E_ALL);
$config = array (
'title' => 'Rene Smurfs Kerstbomen Uploader',
'form_action' => $_SERVER['REQUEST_URI'],
'form_accept_charset' => 'UTF8',
'required_fields' => array (),
'allowed_extensions' => array ('jpg'),
'max_file_size' => 2000,
'errs' => array (),
'msgs' => array ()
);
function resize ($path, $dst_w) {
list ($src_w, $src_h) = getimagesize ($path);
if ($dst_w < $src_w) {
$ratio = $dst_w / $src_w;
$dst_h = ceil ($ratio * $src_h);
$src = imagecreatefromjpeg ($path);
$dst = imagecreatetruecolor ($dst_w, $dst_h);
imagecopyresampled ($dst, $src, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);
imagejpeg ($dst, $path, 80);
imagedestroy ($src);
imagedestroy ($dst);
}
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// upload afhandelen
$root = $_SERVER['DOCUMENT_ROOT'];
$dir = '/testupload2/thumbs/';
if ($_FILES['userfile']['error'] != UPLOAD_ERR_NO_FILE) {
try {
switch ($_FILES['userfile']['error']) {
case UPLOAD_ERR_INI_SIZE:
throw new Exception ('De grootte van het bestand is groter dan de in <strong>php.ini</strong> ingestelde waarde voor upload_max_filesize.');
break;
case UPLOAD_ERR_FORM_SIZE:
throw new Exception ('De grootte van het bestand is groter dan de in HTML gegeven <strong>MAX_FILE_SIZE</strong>.');
break;
case UPLOAD_ERR_PARTIAL:
throw new Exception ('Het bestand is maar <strong>gedeeltelijk</strong> geupload.');
break;
}
if (!is_uploaded_file ($_FILES['userfile']['tmp_name'])) {
throw new Exception ('Fout bij is_uploaded_file ()');
}
$pieces = explode ('.', $_FILES['userfile']['name']);
$extension = end ($pieces);
$extension = strtolower ($extension);
if (!in_array ($extension, $config['allowed_extensions'])) {
throw new Exception ('De extensie <strong>' . $extension . ': </strong> is niet toegestaan. Alleen ' . implode (' | ', $config['allowed_extensions']));
}
if ($_FILES['userfile']['size'] > ($config['max_file_size'] * 1024)) {
throw new Exception ('Maximaal ' . $config['max_file_size'] . ' KB');
}
$new_name = preg_replace ('/[^0-9a-zA-Z\.]/', '', $_FILES['userfile']['name']);
/*
if (file_exists ($root . $dir . $new_name)) {
throw new Exception ('Het bestand <strong>' . $new_name . '</strong> bestaat al. Geef het bestand dat u uploadt een andere naam');
}
*/
if (!move_uploaded_file ($_FILES['userfile']['tmp_name'], $root . $dir . $new_name)) {
throw new Exception ('Fout bij move_uploaded_file ()');
}
if (!chmod ($root . $dir . $new_name, 0644)) {
throw new Exception ('Fout bij chmod');
}
resize ($root . $dir . $new_name, 140);
}
catch (Exception $e) {
array_push ($config['errs'], $e->getMessage ());
}
}
// naar database
// memberID opvragen en controleren
$omschrijving = $_POST['naam'];
// voeg de locatie + omschrijving van de afbeelding toe in de database
$afbeelding = "thumbs/" . $new_name;
$query = "INSERT INTO memberpic (omschrijving, afbeelding) VALUES ('$omschrijving','$afbeelding')";
if(!mysql_db_query($dbname,$query)) die(mysql_error());
echo " Bedankt $omschrijving! uw kerstbomenfoto is geupload.<br>";
}
?>
<body>
<div id="container">
<div id="header">
<h1></h1>
</div>
<div id="content">
<h3>Image uploaden en resizen</h3>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
if (!empty ($config['errs'])) {
echo '<h2>Fouten:</h2>';
echo '<ol class="errs">';
foreach ($config['errs'] as $err) {
echo '<li>' . $err . '</li>';
}
echo '</ol>';
}
if (!empty ($config['msgs'])) {
echo '<h2>Meldingen:</h2>';
echo '<ol class="msgs">';
foreach ($config['msgs'] as $err) {
echo '<li>' . $err . '</li>';
}
echo '</ol>';
}
?>
if (!empty ($config['errs'])) {
echo '<h2>Fouten:</h2>';
echo '<ol class="errs">';
foreach ($config['errs'] as $err) {
echo '<li>' . $err . '</li>';
}
echo '</ol>';
}
if (!empty ($config['msgs'])) {
echo '<h2>Meldingen:</h2>';
echo '<ol class="msgs">';
foreach ($config['msgs'] as $err) {
echo '<li>' . $err . '</li>';
}
echo '</ol>';
}
?>
Is dat makkelijk in te bouwen? :-)
Gewijzigd op 10/12/2011 13:10:07 door Patrick Vaarkamp
Ja hoor. Kan je allereerst even de niet relevante code wegknippen?
Zo goed? :-)
Nu upload je je bestand in de normale grootte, en daarna haal je de resize-functie eroverheen zodat deze geresized wordt.
Mmm ja, sorry maar hier kan ik niks mee. Zou jij het ook voor me in orde kunnen maken? :-)
Regel 72 is de oorzaak.
Even in die functie een andere bestandsnaam meegeven (met bijv, de achtervoegsel: "_thumb". En je bent er al.
Dat doet die nu ook al. Alleen het originele formaat moet dus in de root komen (iniedergeval in dezelfde map als waar het php bestand zich in bevind).
Gewijzigd op 12/12/2011 18:28:29 door Patrick Vaarkamp
Dan moet je het pad even aanpassen, dat hij een andere map gebruikt.