Bestanden uploaden
Wat wil ik: voor een website wil ik bestanden kunnen uploaden naar een server. Vervolgens wil ik dat er een link naar die bestanden in een database komt te staan. (Want volgens mij kan je geen bestanden opslaan in een database.) Als laatste wil ik dan op een andere pagina, als men ingelogd is kan men dan bij die pagina, de inhoud van de map "uploads" kan opvragen.
Concreet is de vraag is er een actuele tutorial die mij daarbij kan helpen?
Ik heb zelf deze gevonden: http://www.codingcage.com/2014/12/file-upload-and-view-with-php-and-mysql.html
En deze maar die is zonder database Daar zit overigens wel een mooi mededelingenschema in: http://phphulp.jorendewit.nl/view/12/
De vraag bij de scripts uit de link en degene die hier op het forum staan is: zijn ze, vanwege de leeftijd, nog actueel en veilig te gebruiken.
Als iemand mij zou willen helpen heel graag. (en nee, ik verwacht echt niet dat jullie nu een compleet script gaan zitten typen.)
Als je op bestandstype en mime-type controleert, dan ben je erg veilig.
Als je het wiel niet nogmaals wilt uitvinden kan je ook de Upload-class van verot.net gebruiken.
Overigens het deel van inloggen waar ik over spreek dat heb ik al het gaat mij echt om het uploaden van de files en het werken met de database daaraan.
In de database sla je de relatieve verwijzing op. Dus als je user_rob_4314124.jpg opslaat op je filesystem. Dan sla je in de database ook de tekst user_rob_4314124.jpg op. Zo kan je er koppelingen mee doen, zoals de UserID van de eigenaren, of tags om uploads te zoeken in je beheerpaneel.
Dropbox) of een private FTP server (hangt ook van bestandsgrootte) geen beter alternatief?
@Rubensky waarvoor wil je het gaan gebruiken? Hoe groot zijn de bestanden? Hoeveel gebruikers heb je? Is een NAS, opslag in de cloud (een of andere filesharing-dienst, bijvoorbeeld, ik noem maar wat, Plaatje + begeleidend tekst bestand opladen.
Plaatje + text worden in de db opgeslagen en als bestanden.
Werkt prima.
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
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
<script>
function setTitle ($this) {
$this = $this.substr(0,$this.lastIndexOf('.'));
$this = $this.replace(/"/g,' ');
$this = $this.replace(/'/g,' ');
$this = $this.replace(/,/g,' ');
$this = $this.replace(/\?/g,' ');
$this = $this.replace(/\!/g,' ');
$this = $this.replace(/\@/g,' ');
$this = $this.replace(/-/g,' ');
$this = $this.replace(/--/g,'-');
$this = $this.replace(/_/g,' ');
$this = $this.replace(/ /g,' ');
$this = $this.replace(/ /g,' ');
$this = $this.replace('C:\\fakepath\\','');
// $this = $this.replace('.jpg','');
// $this = $this.replace('.gif','');
// $this = $this.replace('.png','');
document.getElementById('whatsit').value = $this;
document.getElementById('whatsit').select();
}
function setRecipe ($this) {
if ( $this.length ) {
document.getElementById('recipe').checked = true;
}
}
</script>
<h2>Latest uploaded image</h2>
<div id="showPict">
<div id="nav">
<div id="navL"><?php echo $isFirst; ?></div>
<div id="navR"><?php echo $isLast; ?></div>
</div>
<div class="divClear"></div>
<div id="divL" class="container">
<figure style="max-width: 260px;">
<a href="/store/?pid=<?php echo $pid . "&isLast=true"; ?>" title="Click to show details" style="border: none;">
<img id="latestImage" src="?gim=1" />
</a>
<figcaption>
<a href="/store/?pid=<?php echo $pid . "&isLast=true"; ?>" title="Click to show details"><?php echo ( $pid > 0 ? $pid . " - " : "" ) . $title; ?></a>
</figcaption>
</figure>
<h3>Please upload a new picture and title</h3>
<div id="errmsg"><h4><?php echo $errmsg; ?></h4></div>
<form enctype="multipart/form-data" method="POST">
<p><input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $maxFileSize; ?>">
<p>Choose an image (<?php echo $maxFileSizekB; ?>): <input id="imagefile" type="file" name="imagefile" required onchange="setTitle(this.value);"></p>
<p>Enter a title for that image : <input id="whatsit" name="whatsit" size="40"></p>
<p>Choose a recipefile : <input id="recipetxt" type="file" name="recipetxt" onchange="setRecipe(this.value);"></p>
<p>Is this for a recipe? <input id="recipe" type="checkbox" name="recipe" value="1"></p>
<p><input type="submit" name="submit" value="Upload image"></p>
</form>
</div>
<div class="divClear"></div>
<?php include_once( _INIT_PATH . "counter.php"); ?>
<div id="foot"><?php include_once( _INIT_PATH . "footer.php" ); ?></div>
</div>
function setTitle ($this) {
$this = $this.substr(0,$this.lastIndexOf('.'));
$this = $this.replace(/"/g,' ');
$this = $this.replace(/'/g,' ');
$this = $this.replace(/,/g,' ');
$this = $this.replace(/\?/g,' ');
$this = $this.replace(/\!/g,' ');
$this = $this.replace(/\@/g,' ');
$this = $this.replace(/-/g,' ');
$this = $this.replace(/--/g,'-');
$this = $this.replace(/_/g,' ');
$this = $this.replace(/ /g,' ');
$this = $this.replace(/ /g,' ');
$this = $this.replace('C:\\fakepath\\','');
// $this = $this.replace('.jpg','');
// $this = $this.replace('.gif','');
// $this = $this.replace('.png','');
document.getElementById('whatsit').value = $this;
document.getElementById('whatsit').select();
}
function setRecipe ($this) {
if ( $this.length ) {
document.getElementById('recipe').checked = true;
}
}
</script>
<h2>Latest uploaded image</h2>
<div id="showPict">
<div id="nav">
<div id="navL"><?php echo $isFirst; ?></div>
<div id="navR"><?php echo $isLast; ?></div>
</div>
<div class="divClear"></div>
<div id="divL" class="container">
<figure style="max-width: 260px;">
<a href="/store/?pid=<?php echo $pid . "&isLast=true"; ?>" title="Click to show details" style="border: none;">
<img id="latestImage" src="?gim=1" />
</a>
<figcaption>
<a href="/store/?pid=<?php echo $pid . "&isLast=true"; ?>" title="Click to show details"><?php echo ( $pid > 0 ? $pid . " - " : "" ) . $title; ?></a>
</figcaption>
</figure>
<h3>Please upload a new picture and title</h3>
<div id="errmsg"><h4><?php echo $errmsg; ?></h4></div>
<form enctype="multipart/form-data" method="POST">
<p><input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $maxFileSize; ?>">
<p>Choose an image (<?php echo $maxFileSizekB; ?>): <input id="imagefile" type="file" name="imagefile" required onchange="setTitle(this.value);"></p>
<p>Enter a title for that image : <input id="whatsit" name="whatsit" size="40"></p>
<p>Choose a recipefile : <input id="recipetxt" type="file" name="recipetxt" onchange="setRecipe(this.value);"></p>
<p>Is this for a recipe? <input id="recipe" type="checkbox" name="recipe" value="1"></p>
<p><input type="submit" name="submit" value="Upload image"></p>
</form>
</div>
<div class="divClear"></div>
<?php include_once( _INIT_PATH . "counter.php"); ?>
<div id="foot"><?php include_once( _INIT_PATH . "footer.php" ); ?></div>
</div>
Het upload script :
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
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
<?php
// http://www.wellho.net/solutions/php-example-php-form-image-upload-store-in-mysql-database-retreive.html
// http://www.wellho.net/resources/ex.php4?item=h113/pic_alog.php
// http://stackoverflow.com/questions/10892286/images-not-displaying-from-database-and-file
$errmsg = "";
$maxFileSize = "150000";
$maxFileSizekB = "max. 150kB";
$latest_image = "latest_image.img";
$latest_recipe = "latest_recipe.img";
include_once( $_SERVER["DOCUMENT_ROOT"] . "/init/" . "connect.php");
if ( $_REQUEST["submit"] ) {
// echo $_FILES["imagefile"]["name"] . "<br />";
// echo $_FILES["imagefile"]["size"];
// exit();
if ( ( $_FILES["imagefile"]["size"] > 0 ) && ( $_FILES["imagefile"]["name"] <> "" ) && ( $_REQUEST["whatsit"] <> "" ) ) {
$extensions = array("pict", "gif", "jpg", "png", "txt");
$imageFileType = strtolower( pathinfo( $_FILES["imagefile"]["name"],PATHINFO_EXTENSION ) );
if ( $imageFileType == "jpeg" ) {
$imageFileType = "jpg";
}
/*
echo $imageFileType;
echo "<pre>";
print_r ($extensions);
echo "</pre>";
$os = ( in_array( $imageFileType , $extensions, TRUE ) == TRUE );
echo $os;
exit();
*/
if( in_array( $imageFileType , $extensions ) == TRUE ) {
move_uploaded_file( $_FILES["imagefile"]["tmp_name"], $latest_image );
// latest.img is container to temp store bytes image
$recipeUploaded = FALSE;
if ( $_FILES["recipetxt"]["name"] <> "" ) {
move_uploaded_file( $_FILES["recipetxt"]["tmp_name"], $latest_recipe );
// recipe.img is container to temp store bytes of text
$recipeUploaded = TRUE;
}
// see http://www.w3schools.com/php/php_file_upload.asp
// $imageFileType = pathinfo( $target_file,PATHINFO_EXTENSION );
// see http://www.phpeasystep.com/phptu/25.html for img size and type
list( $width, $height, $type, $attr ) = getimagesize( $latest_image );
$size = filesize( $latest_image );
$mime = getimagesize( $latest_image );
$imgMime = $mime['mime'];
$instr = fopen( $latest_image, "rb") ;
if ( count($instr) < $maxFileSize ) {
$image = addslashes( fread( $instr, filesize( $latest_image ) ) ); //
$instrStore = fopen( $latest_image, "rb") ;
$imageStore = fread( $instrStore, filesize( $latest_image ) );
if ( $recipeUploaded == TRUE ) {
$instrtxt = fopen( $latest_recipe, "rb" );
$recipeText = addslashes( fread( $instrtxt, filesize( $latest_recipe ) ) );
} else {
$recipeText = "";
}
$uniqid = uniqid();
$uniqidPath1 = substr( $uniqid, 0 , 4) . "/";
$uniqidPath2 = substr( $uniqid , 4, 4) . "/";
$imgurl = $uniqidPath1 . $uniqidPath2 ;
$recipeText = filter_var( $recipeText, FILTER_SANITIZE_SPECIAL_CHARS );
$title = filter_var( $_REQUEST["whatsit"], FILTER_SANITIZE_SPECIAL_CHARS );
$imgType = $extensions[$type];
$imgWidth = $width;
$imgHeight = $height;
$imgSize = $size;
$isRecipe = filter_var( $_REQUEST["recipe"], FILTER_SANITIZE_SPECIAL_CHARS );
$hasTextfile = ( $recipeText <> "" );
// START MAKING THUMB
// insert code for making thumb
/*** create a second variable for the thumbnail ***/
$size = getimagesize( $latest_image );
/*** get the aspect ratio (height / width) ***/
$aspectRatio = (float)($size[0] / $size[1]);
/*** the height of the thumbnail ***/
$thumb_height = 100;
/*** the thumb width is the thumb height/aspectratio ***/
$thumb_width = $thumb_height * $aspectRatio;
/*** get the image source ***/
$functions = array(
IMAGETYPE_GIF => 'imagecreatefromgif',
IMAGETYPE_JPEG => 'imagecreatefromjpeg',
IMAGETYPE_PNG => 'imagecreatefrompng',
);
//$src = ImageCreateFromjpeg($latest_image);
$src = $functions[$size[2]]($latest_image);
/*** create the destination image ***/
$destImage = ImageCreateTrueColor($thumb_width, $thumb_height);
imagealphablending( $destImage, false );
imagesavealpha( $destImage, true );
/*** copy and resize the src image to the dest image ***/
ImageCopyResampled($destImage, $src, 0,0,0,0, $thumb_width, $thumb_height, $width, $height);
/*** start output buffering ***/
ob_start();
/*** export the image ***/
$functions2 = array(
IMAGETYPE_GIF => 'imagegif',
IMAGETYPE_JPEG => 'imagejpeg',
IMAGETYPE_PNG => 'imagepng',
);
//imageJPEG($destImage);
$functions2[$size[2]]($destImage);
/*** stick the image content in a variable ***/
$image_thumb = addslashes(ob_get_contents());
/*** clean up a little ***/
ob_end_clean();
// END MAKING THUMB
// BEGIN SAVE THE $recipeText AND $imageStore AS FILES,
// BESIDES OR INSTEAD OF ALSO SAVING IN DATABASE
$recipePix = $_SERVER['DOCUMENT_ROOT'] . _RECIPEPATH;
$structure = $recipePix . $uniqidPath1 . $uniqidPath2 ;
if ( !is_dir( $structure ) ) {
if ( !mkdir( $structure, 0777, TRUE ) ) {
// if dir exist, simply ignore this warning
echo "Directory exists";
}
}
$sanatized = str_ireplace ( " " , "-" , html_entity_decode( $title ) ) ;
$sanatized = str_ireplace ( "\"" , "_" , $sanatized ) ;
$sanatized = str_ireplace ( "'" , "_" , $sanatized ) ;
$sanatized = str_ireplace ( "__" , "_" , $sanatized ) ;
if ( $recipeText <> "" ) {
if ( !file_put_contents( $structure . $sanatized . "." . "txt", html_entity_decode( $recipeText ) ) ) {
$errmsg = "Saving of textfile has failed";
}
}
//chown($structure . $uniqid.txt, 'http'); // this does not work on my NAS
if ( !file_put_contents( $structure . $sanatized . "." . $imgType, $imageStore ) ) {
$errmsg = "Saving of imagefile has failed";
}
// END SAVE IMAGE AND RECIPETXT AS FILES
// IF YOU DO NOT WANT TO SAVE THE IMAGE IN THE DATABASE,
// SKIP THE 'imgdata' FIELD AND '$image' VAR
// YOU MAY ALSO WANT TO SKIP THE FILESIZE CHECK
$theDate = date("Y-m-d H:i:s");
$db->query("INSERT INTO " . _PIX . " (title, titlesanatized, imgdata, imgurl, uniqueid, width, height, type, mime, size, thumb_data, thumb_width, thumb_height, date, recipe, has_textfile, recipetxt ) values ('" .
$title . "','" .
$sanatized . "','" .
$image . "','" .
$imgurl . "','" .
$uniqid . "','" .
$imgWidth . "','" .
$imgHeight . "','" .
$imgType . "','" .
$imgMime . "','" .
$imgSize . "','" .
$image_thumb . "','" .
$thumb_width . "','" .
$thumb_height . "','" .
$theDate . "','" .
$isRecipe . "','" .
$hasTextfile . "','" .
$recipeText . "')");
$numm = mysqli_affected_rows($db);
$errmsg = 'Image' . ($numm > 0 ? ' ' : ' not ') . 'added to Database' ;
} else {
$errmsg = "Image is too large!";
}
} else {
$errmsg = "This is not an image";
}
} else {
if ( ( $_FILES["imagefile"]["name"] <> "" ) && ( $_FILES["imagefile"]["size"] == 0 ) ) {
$errmsg = "Image is too large";
} else {
$errmsg = "No image selected";
}
}
}
// Find out about latest image
$gotten = $db->query("SELECT * FROM " . _PIX . " ORDER BY pid DESC LIMIT 1");
if ( $row = $gotten->fetch_object() ) {
$pid = $row->pid;
$title = $row->title;
$bytes = $row->imgdata;
} else {
$errmsg = "No images in the database";
$title = "No database image available";
// Put up a picture of our training centre
$instr = fopen( _ROOT . "/images/WorldMap.png","rb" );
$bytes = fread( $instr, filesize( _ROOT . "images/WorldMap.png" ) );
}
// If this is the image request, send out the image
if ($_REQUEST[gim] == 1) {
header("Content-type: image/jpeg");
print $bytes;
exit ();
}
include_once( _INIT_PATH . "navigation.php");
$_REQUEST["isFirst"] = "true";
$_REQUEST["isLast"] = "true";
setNavigation();
?>
// http://www.wellho.net/solutions/php-example-php-form-image-upload-store-in-mysql-database-retreive.html
// http://www.wellho.net/resources/ex.php4?item=h113/pic_alog.php
// http://stackoverflow.com/questions/10892286/images-not-displaying-from-database-and-file
$errmsg = "";
$maxFileSize = "150000";
$maxFileSizekB = "max. 150kB";
$latest_image = "latest_image.img";
$latest_recipe = "latest_recipe.img";
include_once( $_SERVER["DOCUMENT_ROOT"] . "/init/" . "connect.php");
if ( $_REQUEST["submit"] ) {
// echo $_FILES["imagefile"]["name"] . "<br />";
// echo $_FILES["imagefile"]["size"];
// exit();
if ( ( $_FILES["imagefile"]["size"] > 0 ) && ( $_FILES["imagefile"]["name"] <> "" ) && ( $_REQUEST["whatsit"] <> "" ) ) {
$extensions = array("pict", "gif", "jpg", "png", "txt");
$imageFileType = strtolower( pathinfo( $_FILES["imagefile"]["name"],PATHINFO_EXTENSION ) );
if ( $imageFileType == "jpeg" ) {
$imageFileType = "jpg";
}
/*
echo $imageFileType;
echo "<pre>";
print_r ($extensions);
echo "</pre>";
$os = ( in_array( $imageFileType , $extensions, TRUE ) == TRUE );
echo $os;
exit();
*/
if( in_array( $imageFileType , $extensions ) == TRUE ) {
move_uploaded_file( $_FILES["imagefile"]["tmp_name"], $latest_image );
// latest.img is container to temp store bytes image
$recipeUploaded = FALSE;
if ( $_FILES["recipetxt"]["name"] <> "" ) {
move_uploaded_file( $_FILES["recipetxt"]["tmp_name"], $latest_recipe );
// recipe.img is container to temp store bytes of text
$recipeUploaded = TRUE;
}
// see http://www.w3schools.com/php/php_file_upload.asp
// $imageFileType = pathinfo( $target_file,PATHINFO_EXTENSION );
// see http://www.phpeasystep.com/phptu/25.html for img size and type
list( $width, $height, $type, $attr ) = getimagesize( $latest_image );
$size = filesize( $latest_image );
$mime = getimagesize( $latest_image );
$imgMime = $mime['mime'];
$instr = fopen( $latest_image, "rb") ;
if ( count($instr) < $maxFileSize ) {
$image = addslashes( fread( $instr, filesize( $latest_image ) ) ); //
$instrStore = fopen( $latest_image, "rb") ;
$imageStore = fread( $instrStore, filesize( $latest_image ) );
if ( $recipeUploaded == TRUE ) {
$instrtxt = fopen( $latest_recipe, "rb" );
$recipeText = addslashes( fread( $instrtxt, filesize( $latest_recipe ) ) );
} else {
$recipeText = "";
}
$uniqid = uniqid();
$uniqidPath1 = substr( $uniqid, 0 , 4) . "/";
$uniqidPath2 = substr( $uniqid , 4, 4) . "/";
$imgurl = $uniqidPath1 . $uniqidPath2 ;
$recipeText = filter_var( $recipeText, FILTER_SANITIZE_SPECIAL_CHARS );
$title = filter_var( $_REQUEST["whatsit"], FILTER_SANITIZE_SPECIAL_CHARS );
$imgType = $extensions[$type];
$imgWidth = $width;
$imgHeight = $height;
$imgSize = $size;
$isRecipe = filter_var( $_REQUEST["recipe"], FILTER_SANITIZE_SPECIAL_CHARS );
$hasTextfile = ( $recipeText <> "" );
// START MAKING THUMB
// insert code for making thumb
/*** create a second variable for the thumbnail ***/
$size = getimagesize( $latest_image );
/*** get the aspect ratio (height / width) ***/
$aspectRatio = (float)($size[0] / $size[1]);
/*** the height of the thumbnail ***/
$thumb_height = 100;
/*** the thumb width is the thumb height/aspectratio ***/
$thumb_width = $thumb_height * $aspectRatio;
/*** get the image source ***/
$functions = array(
IMAGETYPE_GIF => 'imagecreatefromgif',
IMAGETYPE_JPEG => 'imagecreatefromjpeg',
IMAGETYPE_PNG => 'imagecreatefrompng',
);
//$src = ImageCreateFromjpeg($latest_image);
$src = $functions[$size[2]]($latest_image);
/*** create the destination image ***/
$destImage = ImageCreateTrueColor($thumb_width, $thumb_height);
imagealphablending( $destImage, false );
imagesavealpha( $destImage, true );
/*** copy and resize the src image to the dest image ***/
ImageCopyResampled($destImage, $src, 0,0,0,0, $thumb_width, $thumb_height, $width, $height);
/*** start output buffering ***/
ob_start();
/*** export the image ***/
$functions2 = array(
IMAGETYPE_GIF => 'imagegif',
IMAGETYPE_JPEG => 'imagejpeg',
IMAGETYPE_PNG => 'imagepng',
);
//imageJPEG($destImage);
$functions2[$size[2]]($destImage);
/*** stick the image content in a variable ***/
$image_thumb = addslashes(ob_get_contents());
/*** clean up a little ***/
ob_end_clean();
// END MAKING THUMB
// BEGIN SAVE THE $recipeText AND $imageStore AS FILES,
// BESIDES OR INSTEAD OF ALSO SAVING IN DATABASE
$recipePix = $_SERVER['DOCUMENT_ROOT'] . _RECIPEPATH;
$structure = $recipePix . $uniqidPath1 . $uniqidPath2 ;
if ( !is_dir( $structure ) ) {
if ( !mkdir( $structure, 0777, TRUE ) ) {
// if dir exist, simply ignore this warning
echo "Directory exists";
}
}
$sanatized = str_ireplace ( " " , "-" , html_entity_decode( $title ) ) ;
$sanatized = str_ireplace ( "\"" , "_" , $sanatized ) ;
$sanatized = str_ireplace ( "'" , "_" , $sanatized ) ;
$sanatized = str_ireplace ( "__" , "_" , $sanatized ) ;
if ( $recipeText <> "" ) {
if ( !file_put_contents( $structure . $sanatized . "." . "txt", html_entity_decode( $recipeText ) ) ) {
$errmsg = "Saving of textfile has failed";
}
}
//chown($structure . $uniqid.txt, 'http'); // this does not work on my NAS
if ( !file_put_contents( $structure . $sanatized . "." . $imgType, $imageStore ) ) {
$errmsg = "Saving of imagefile has failed";
}
// END SAVE IMAGE AND RECIPETXT AS FILES
// IF YOU DO NOT WANT TO SAVE THE IMAGE IN THE DATABASE,
// SKIP THE 'imgdata' FIELD AND '$image' VAR
// YOU MAY ALSO WANT TO SKIP THE FILESIZE CHECK
$theDate = date("Y-m-d H:i:s");
$db->query("INSERT INTO " . _PIX . " (title, titlesanatized, imgdata, imgurl, uniqueid, width, height, type, mime, size, thumb_data, thumb_width, thumb_height, date, recipe, has_textfile, recipetxt ) values ('" .
$title . "','" .
$sanatized . "','" .
$image . "','" .
$imgurl . "','" .
$uniqid . "','" .
$imgWidth . "','" .
$imgHeight . "','" .
$imgType . "','" .
$imgMime . "','" .
$imgSize . "','" .
$image_thumb . "','" .
$thumb_width . "','" .
$thumb_height . "','" .
$theDate . "','" .
$isRecipe . "','" .
$hasTextfile . "','" .
$recipeText . "')");
$numm = mysqli_affected_rows($db);
$errmsg = 'Image' . ($numm > 0 ? ' ' : ' not ') . 'added to Database' ;
} else {
$errmsg = "Image is too large!";
}
} else {
$errmsg = "This is not an image";
}
} else {
if ( ( $_FILES["imagefile"]["name"] <> "" ) && ( $_FILES["imagefile"]["size"] == 0 ) ) {
$errmsg = "Image is too large";
} else {
$errmsg = "No image selected";
}
}
}
// Find out about latest image
$gotten = $db->query("SELECT * FROM " . _PIX . " ORDER BY pid DESC LIMIT 1");
if ( $row = $gotten->fetch_object() ) {
$pid = $row->pid;
$title = $row->title;
$bytes = $row->imgdata;
} else {
$errmsg = "No images in the database";
$title = "No database image available";
// Put up a picture of our training centre
$instr = fopen( _ROOT . "/images/WorldMap.png","rb" );
$bytes = fread( $instr, filesize( _ROOT . "images/WorldMap.png" ) );
}
// If this is the image request, send out the image
if ($_REQUEST[gim] == 1) {
header("Content-type: image/jpeg");
print $bytes;
exit ();
}
include_once( _INIT_PATH . "navigation.php");
$_REQUEST["isFirst"] = "true";
$_REQUEST["isLast"] = "true";
setNavigation();
?>
Gewijzigd op 15/12/2016 18:08:42 door Adoptive Solution
Alleen de rechten op 777 zetten is erg overdreven ;-).
2 waar is de connectie met de database?
Wat ik wil is de bestanden in een aparte map op mijn server en alleen een link naar het bestand opslaan in mijn database.
(anders wordt de database zo extreem groot.)
Ten aanzien van de andere vraag die mij gesteld ik gebruik nu ruimte bij een hosting provider.
Gewijzigd op 15/12/2016 18:51:29 door Rubensky PHP starter
Alleen metagegevens slaat hij op in de database. Zoals bestandsnaam, URL, een uniek ID, Mimetypes, grootes.
Quote:
2 waar is de connectie met de database?
Regel 13
Quote:
Alleen metagegevens slaat hij op in de database. Zoals bestandsnaam, URL, een uniek ID, Mimetypes, grootes.
Nee hoor, niet alleen de meta gegevens worden opgeslagen, ook de afbeelding zelf.
Bij regel 171-173 staat duidelik wat te doen als je de afbeelding NIET wilt opslaan in de databse.
Dan ga ik maar eens aan de slag met ik denk dit gedeelte:
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
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
$theDate = date("Y-m-d H:i:s");
$db->query("INSERT INTO " . _PIX . " (title, titlesanatized, imgdata, imgurl, uniqueid, width, height, type, mime, size, thumb_data, thumb_width, thumb_height, date, recipe, has_textfile, recipetxt ) values ('" .
$title . "','" .
$sanatized . "','" .
$image . "','" .
$imgurl . "','" .
$uniqid . "','" .
$imgWidth . "','" .
$imgHeight . "','" .
$imgType . "','" .
$imgMime . "','" .
$imgSize . "','" .
$image_thumb . "','" .
$thumb_width . "','" .
$thumb_height . "','" .
$theDate . "','" .
$isRecipe . "','" .
$hasTextfile . "','" .
$recipeText . "')");
$numm = mysqli_affected_rows($db);
$errmsg = 'Image' . ($numm > 0 ? ' ' : ' not ') . 'added to Database' ;
} else {
$errmsg = "Image is too large!";
}
} else {
$errmsg = "This is not an image";
}
} else {
if ( ( $_FILES["imagefile"]["name"] <> "" ) && ( $_FILES["imagefile"]["size"] == 0 ) ) {
$errmsg = "Image is too large";
} else {
$errmsg = "No image selected";
$db->query("INSERT INTO " . _PIX . " (title, titlesanatized, imgdata, imgurl, uniqueid, width, height, type, mime, size, thumb_data, thumb_width, thumb_height, date, recipe, has_textfile, recipetxt ) values ('" .
$title . "','" .
$sanatized . "','" .
$image . "','" .
$imgurl . "','" .
$uniqid . "','" .
$imgWidth . "','" .
$imgHeight . "','" .
$imgType . "','" .
$imgMime . "','" .
$imgSize . "','" .
$image_thumb . "','" .
$thumb_width . "','" .
$thumb_height . "','" .
$theDate . "','" .
$isRecipe . "','" .
$hasTextfile . "','" .
$recipeText . "')");
$numm = mysqli_affected_rows($db);
$errmsg = 'Image' . ($numm > 0 ? ' ' : ' not ') . 'added to Database' ;
} else {
$errmsg = "Image is too large!";
}
} else {
$errmsg = "This is not an image";
}
} else {
if ( ( $_FILES["imagefile"]["name"] <> "" ) && ( $_FILES["imagefile"]["size"] == 0 ) ) {
$errmsg = "Image is too large";
} else {
$errmsg = "No image selected";
Want in principe wil ik alleen pdf txt en docx bestanden opslaan in een map. En de gegevens daarvan in de database. (niet de bestanden zelf.)
Als ik dat goed begrijp dan kan ik ook nog eens gaan kijken maar dat ligt nog een paar kilometer voor me hoor en daar gaat het me nu echt niet om de bestanden verschillend opslaan en filteren.
Met welk doel filteren?
Dit project is privé nergens voor nodig maar vind het leuk om met php te experimenten en te leren. (als je het leuk vind wil ik nog wel een paar dingen neerzetten waar ik naar zoek of lekker aan het bouwen ben.)
Eerst sla je een afbeelding op en vervolgens controleer je pas of dit een afbeelding betreft (met behulp van getimagesize())? Ook roep je meerdere keren getimagesize() aan en houd je geen rekening met de mogelijkheid dat het geen afbeelding betreft. Draai dit om: ga eerst na of het een afbeelding betreft en sla dan pas iets op.
Waarom sla je een tekstbestand op? Waarom moet deze in eerste instantie geupload worden (wat is er mis met een textarea)? En waarom escape je de input hiervan :/. Het escapen van input belemmert de auteur van het recept mogelijk later ook om deze te wijzigen, deze kan namelijk hierdoor inhoudelijk gewijzigd zijn, wat mij niet de bedoeling lijkt. Sla alles gewoon "rauw" op en behandel dit als User Data.
Addslashes() is trouwens niet the way to go. Gebruik fatsoenlijke escape-functies in je query.
- Ariën -:
Quote verwijderd. Het is niet nodig om een voorgaande bericht te quoten. Gelieve hier rekening mee te houden zodat het topic overzichtelijk blijft.
Tomas,
Zou je eens een voorbeeld van een, volgens jou, goed script kunnen posten? Zo te lezen heb je nogal het een en ander aan verbeteringen. En daar staan we natuurlijk voor open.
Gewijzigd op 19/12/2016 21:36:08 door - Ariën -
Rubensky PHP starter op 19/12/2016 21:34:47:
Zou je eens een voorbeeld van een, volgens jou, goed script kunnen posten? Zo te lezen heb je nogal het een en ander aan verbeteringen. En daar staan we natuurlijk voor open.
Zou je eerst eens kunnen kijken naar mijn bovenstaande vragen?
Mocht je dan besluiten om dit alsnog in PHP/MySQL te doen dan heb ik hier geen *enkel* "script" voor liggen. Wat je wilt klinkt namelijk als een beheersysteem voor media. Dit valt sowieso in een aantal stukken uiteen:
- gebruikersbeheer
- beheerschermen binnen het mediasysteem, met bijbehorende formulieren voor verwerking
- database- en filesysteemstructuur
- functionaliteit voor verwerking van file-uploads
Al deze onderdelen zou je in principe redelijk onafhankelijk van elkaar kunnen ontwikkelen. Dt lijkt mij ook handig/verstandig uit oogpunt van modulariteit/herbruikbaarheid. Ook zou je eens kunnen kijken of je kant en klare onderdelen kunt gebruiken.
Ik heb een domein bij een hosting provider. Daar staat mijn webpagina op en daar wil ik ook de bestanden plaatsen.
Voor de duidelijkheid zal ik je even meenemen in wat ik op dit moment als een project heb voor mijzelf en aan het ontwikkelen ben
1 een inlog met daaronder pagina's die je alleen kan zien als je ingelogd bent. (gereed)
2 Dat is het deel waar het in dit topic over gaat:
Via een formulier wordt er een nieuw dossier aangemaakt. De meta gegevens van dit dossier worden in de database opgeslagen. De daaronder te hangen, op dit moment lege, PDF en Word bestanden komen in een aparte map.
Mijn volgende project zal dan zijn op dossiernummer kunnen zoeken in de database die dan vervolgens ook alle onderliggende bestanden toont.
Inmiddels is het één en ander al gelukt?
Nog niet ik ga er na de kerst weer lekker mee verder. Er komt wel een nieuwe vraag aan van mij...