move_uploaded_file failure
' M'n ' script upload 'n file, resized het in twee formaten en plaatst het in twee verschillende mappen én zou de padnaam in de mysql moeten plaatsen.
Alles werkt maar de padnamen worden niet in de mysql geplaatst, in plaats daarvan krijg ik een foutmelding ná het resizen :
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpVKa5Io' to '' in /customers/f-inject.be/f-inject.be/httpd.www/apps/test_resize.php on line 151
...kan iemand helpen ?
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
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
<?php
//define a maxim size for the uploaded images
define ("MAX_SIZE","20000");
// define the width and height for the thumbnail
// note that theese dimmensions are considered the maximum dimmension and are not fixed,
// because we have to keep the image ratio intact or it will be deformed
define ("WIDTH","100");
define ("HEIGHT","100");
// this is the function that will create the thumbnail image from the uploaded image
// the resize will be done considering the width and height defined, but without deforming the image
function make_thumb($img_name,$filename,$new_w,$new_h)
{
//get image extension.
$ext=getExtension($img_name);
//creates the new image using the appropriate function from gd library
if(!strcmp("jpg",$ext) || !strcmp("jpeg",$ext))
$src_img=imagecreatefromjpeg($img_name);
if(!strcmp("png",$ext))
$src_img=imagecreatefrompng($img_name);
//gets the dimmensions of the image
$old_x=imageSX($src_img);
$old_y=imageSY($src_img);
// next we will calculate the new dimmensions for the thumbnail image
// the next steps will be taken:
// 1. calculate the ratio by dividing the old dimmensions with the new ones
// 2. if the ratio for the width is higher, the width will remain the one define in WIDTH variable
// and the height will be calculated so the image ratio will not change
// 3. otherwise we will use the height ratio for the image
// as a result, only one of the dimmensions will be from the fixed ones
$ratio1=$old_x/$new_w;
$ratio2=$old_y/$new_h;
if($ratio1>$ratio2) {
$thumb_w=$new_w;
$thumb_h=$old_y/$ratio1;
}
else {
$thumb_h=$new_h;
$thumb_w=$old_x/$ratio2;
}
// we create a new image with the new dimmensions
$dst_img=ImageCreateTrueColor($thumb_w,$thumb_h);
// resize the big image to the new created one
imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x, $old_y);
// output the created image to the file. Now we will have the thumbnail into the file named by $filename
if(!strcmp("png",$ext))
imagepng($dst_img,$filename);
else
imagejpeg($dst_img,$filename);
//destroys source and destination images.
imagedestroy($dst_img);
imagedestroy($src_img);
}
// This function reads the extension of the file.
// It is used to determine if the file is an image by checking the extension.
function getExtension($str) {
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}
// This variable is used as a flag. The value is initialized with 0 (meaning no error found)
//and it will be changed to 1 if an errro occures. If the error occures the file will not be uploaded.
$errors=0;
// checks if the form has been submitted
if(isset($_POST['Submit']))
{
//reads the name of the file the user submitted for uploading
$image=$_FILES['image']['name'];
// if it is not empty
if ($image)
{
// get the original name of the file from the clients machine
$filename = stripslashes($_FILES['image']['name']);
// get the extension of the file in a lower case format
$extension = getExtension($filename);
$extension = strtolower($extension);
// if it is not a known extension, we will suppose it is an error, print an error message
//and will not upload the file, otherwise we continue
if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png"))
{
echo '<h1>Unknown extension!</h1>';
$errors=1;
}
else
{
// get the size of the image in bytes
// $_FILES[\'image\'][\'tmp_name\'] is the temporary filename of the file in which the uploaded file was stored on the server
$size=getimagesize($_FILES['image']['tmp_name']);
$sizekb=filesize($_FILES['image']['tmp_name']);
//compare the size with the maxim size we defined and print error if bigger
if ($sizekb > MAX_SIZE*1024)
{
echo '<h1>You have exceeded the size limit!</h1>';
$errors=1;
}
//we will give an unique name, for example the time in unix time format
$image_name=time().'.'.$extension;
//the new name will be containing the full path where will be stored (images folder)
$newname="images/images/".$image_name;
$copied = copy($_FILES['image']['tmp_name'], $newname);
//we verify if the image has been uploaded, and print error instead
if (!$copied)
{
echo '<h1>Copy unsuccessfull!</h1>';
$errors=1;
}
else
{
// the new thumbnail image will be placed in images/thumbs/ folder
$thumb_name='images/thumbs/thumb_'.$image_name;
// call the function that will create the thumbnail. The function will get as parameters
//the image name, the thumbnail name and the width and height desired for the thumbnail
$thumb=make_thumb($newname,$thumb_name,WIDTH,HEIGHT);
}} }}
//If no errors registred, print the success message and show the thumbnail image created
if(isset($_POST['Submit']) && !$errors)
{
echo "<h1>Thumbnail created Successfully!</h1>";
echo '<img src="'.$thumb_name.'">';
}
$_FILES['image']['tmp_name']; // This is how we will get the temporary file...
if(move_uploaded_file($_FILES['image']['tmp_name'], $target_path)) {
$con = mysql_connect('localhost','tralala','troeloeloe');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}mysql_select_db("pixmix", $con);
echo ' connected <br>';
//put in link
$sql = "INSERT INTO content (id, time, username, title, descript, image, thumb) VALUES ('$_POST[id]','$_POST[time]','$_POST[username]','$_POST[title]','$_POST[descript]','$_POST[image]','$_POST[thumb]')";
mysql_query($sql);
//echo "The file ". basename( $_FILES['image']['tmp_name']). " has been uploaded. <a href='upload.php'>Upload Another</a>";
}
else {
echo "There was an error uploading the file, please try again.";
}
mysql_close($con);
?>
//define a maxim size for the uploaded images
define ("MAX_SIZE","20000");
// define the width and height for the thumbnail
// note that theese dimmensions are considered the maximum dimmension and are not fixed,
// because we have to keep the image ratio intact or it will be deformed
define ("WIDTH","100");
define ("HEIGHT","100");
// this is the function that will create the thumbnail image from the uploaded image
// the resize will be done considering the width and height defined, but without deforming the image
function make_thumb($img_name,$filename,$new_w,$new_h)
{
//get image extension.
$ext=getExtension($img_name);
//creates the new image using the appropriate function from gd library
if(!strcmp("jpg",$ext) || !strcmp("jpeg",$ext))
$src_img=imagecreatefromjpeg($img_name);
if(!strcmp("png",$ext))
$src_img=imagecreatefrompng($img_name);
//gets the dimmensions of the image
$old_x=imageSX($src_img);
$old_y=imageSY($src_img);
// next we will calculate the new dimmensions for the thumbnail image
// the next steps will be taken:
// 1. calculate the ratio by dividing the old dimmensions with the new ones
// 2. if the ratio for the width is higher, the width will remain the one define in WIDTH variable
// and the height will be calculated so the image ratio will not change
// 3. otherwise we will use the height ratio for the image
// as a result, only one of the dimmensions will be from the fixed ones
$ratio1=$old_x/$new_w;
$ratio2=$old_y/$new_h;
if($ratio1>$ratio2) {
$thumb_w=$new_w;
$thumb_h=$old_y/$ratio1;
}
else {
$thumb_h=$new_h;
$thumb_w=$old_x/$ratio2;
}
// we create a new image with the new dimmensions
$dst_img=ImageCreateTrueColor($thumb_w,$thumb_h);
// resize the big image to the new created one
imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x, $old_y);
// output the created image to the file. Now we will have the thumbnail into the file named by $filename
if(!strcmp("png",$ext))
imagepng($dst_img,$filename);
else
imagejpeg($dst_img,$filename);
//destroys source and destination images.
imagedestroy($dst_img);
imagedestroy($src_img);
}
// This function reads the extension of the file.
// It is used to determine if the file is an image by checking the extension.
function getExtension($str) {
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}
// This variable is used as a flag. The value is initialized with 0 (meaning no error found)
//and it will be changed to 1 if an errro occures. If the error occures the file will not be uploaded.
$errors=0;
// checks if the form has been submitted
if(isset($_POST['Submit']))
{
//reads the name of the file the user submitted for uploading
$image=$_FILES['image']['name'];
// if it is not empty
if ($image)
{
// get the original name of the file from the clients machine
$filename = stripslashes($_FILES['image']['name']);
// get the extension of the file in a lower case format
$extension = getExtension($filename);
$extension = strtolower($extension);
// if it is not a known extension, we will suppose it is an error, print an error message
//and will not upload the file, otherwise we continue
if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png"))
{
echo '<h1>Unknown extension!</h1>';
$errors=1;
}
else
{
// get the size of the image in bytes
// $_FILES[\'image\'][\'tmp_name\'] is the temporary filename of the file in which the uploaded file was stored on the server
$size=getimagesize($_FILES['image']['tmp_name']);
$sizekb=filesize($_FILES['image']['tmp_name']);
//compare the size with the maxim size we defined and print error if bigger
if ($sizekb > MAX_SIZE*1024)
{
echo '<h1>You have exceeded the size limit!</h1>';
$errors=1;
}
//we will give an unique name, for example the time in unix time format
$image_name=time().'.'.$extension;
//the new name will be containing the full path where will be stored (images folder)
$newname="images/images/".$image_name;
$copied = copy($_FILES['image']['tmp_name'], $newname);
//we verify if the image has been uploaded, and print error instead
if (!$copied)
{
echo '<h1>Copy unsuccessfull!</h1>';
$errors=1;
}
else
{
// the new thumbnail image will be placed in images/thumbs/ folder
$thumb_name='images/thumbs/thumb_'.$image_name;
// call the function that will create the thumbnail. The function will get as parameters
//the image name, the thumbnail name and the width and height desired for the thumbnail
$thumb=make_thumb($newname,$thumb_name,WIDTH,HEIGHT);
}} }}
//If no errors registred, print the success message and show the thumbnail image created
if(isset($_POST['Submit']) && !$errors)
{
echo "<h1>Thumbnail created Successfully!</h1>";
echo '<img src="'.$thumb_name.'">';
}
$_FILES['image']['tmp_name']; // This is how we will get the temporary file...
if(move_uploaded_file($_FILES['image']['tmp_name'], $target_path)) {
$con = mysql_connect('localhost','tralala','troeloeloe');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}mysql_select_db("pixmix", $con);
echo ' connected <br>';
//put in link
$sql = "INSERT INTO content (id, time, username, title, descript, image, thumb) VALUES ('$_POST[id]','$_POST[time]','$_POST[username]','$_POST[title]','$_POST[descript]','$_POST[image]','$_POST[thumb]')";
mysql_query($sql);
//echo "The file ". basename( $_FILES['image']['tmp_name']). " has been uploaded. <a href='upload.php'>Upload Another</a>";
}
else {
echo "There was an error uploading the file, please try again.";
}
mysql_close($con);
?>
1. is het pad naar de target-directory goed ?
2. heb je voldoende schrijfrechten op de target-directory waar de plaatjes naar toe moeten ?
Gewijzigd op 01/01/1970 01:00:00 door Marcel K
Jep, het pad is correct en met de rechten is ook alles OK.
Volgende keer graag iets minder code (alleen relevante ... ).
waar en hoe kan ik deze plaatsen ?
is maar een voorstel, dus:
function make_thumb($img_name,$filename,$new_w,$new_h,$target_dir)
Gewijzigd op 01/01/1970 01:00:00 door Marcel K
Warning: Missing argument 5 for make_thumb()...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
include 'resizen.php ';
$img_name="naam_van_plaatje.jpg";
$filename="bla1.jpg";
$new_w=100;
$new_h=150;
$target_dir="/images";
make_thumb($img_name,$filename,$new_w,$new_h,$target_dir)
?>
include 'resizen.php ';
$img_name="naam_van_plaatje.jpg";
$filename="bla1.jpg";
$new_w=100;
$new_h=150;
$target_dir="/images";
make_thumb($img_name,$filename,$new_w,$new_h,$target_dir)
?>
Gewijzigd op 01/01/1970 01:00:00 door Marcel K
Warning: Missing argument 5 for make_thumb()...
Fred schreef op 01.07.2007 20:12:
Marcel, ik krijg nu nog 'n foutmelding bij , nml :
Warning: Missing argument 5 for make_thumb()...
Warning: Missing argument 5 for make_thumb()...
Marcel : ik heb énkel dit script , nml hetgene ik bovenaan heb opgegeven ?! ( en dan natuurlijk m'n invulform...) ?!
Ik zou bijgod niet weten waar ik bovengenoemde regels moet plaatsen in het huidig script ( hetgeen m'n newbie-gehalte aantoont...).
kan je je het stukje van je invulform en een 5 regels daarboven eens plaatsen ?
Gewijzigd op 01/01/1970 01:00:00 door Marcel K
m'n verwerkings ( ' resize.php ', zie hierboven ) -pagina 6.33Kb.
...
en nu maar hopen dat je met ' hoe groot ' dit bedoelde anders ben 'k eraan ;O)
ik bedoelde eigenlijk het aantal regels, sorry dat ik niet duidelijker was.
Fred schreef op 01.07.2007 20:45:
m'n invoerformulier 0.99Kb
m'n verwerkings ( ' resize.php ', zie hierboven ) -pagina 6.33Kb.
...
en nu maar hopen dat je met ' hoe groot ' dit bedoelde anders ben 'k eraan ;O)
m'n verwerkings ( ' resize.php ', zie hierboven ) -pagina 6.33Kb.
...
en nu maar hopen dat je met ' hoe groot ' dit bedoelde anders ben 'k eraan ;O)
sorry, hmmm...zonder de comments schat ik zo'n 150-tal regels
invulform :
<form method="post" enctype="multipart/form-data" action="test_resize.php">
<input name="time" value="" type="hidden" />
<input type="hidden" name="username" value="" >
<table width="100%" border="1" cellspacing="0" cellpadding="0">
<tr>
<td>Title</td>
<td><input name="title" type="text" id="title"></td>
</tr>
<tr>
<td>Description</td>
<td><input name="descript" type="text" id="descript"></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Picture</td>
<td><input type="file" name="image" >
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="Submit" value="Submit">
<input name="" type="reset"></td>
</tr>
</table>
</form>
...twee problemen bij het uitvoeren van het script dus :
1. na het uploaden van de afbeeldingen de foutmelding :
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpVKa5Io' to '' in /customers/f-inject.be/f-inject.be/httpd.www/apps/test_resize.php on line 151
2. ...er wordt NIKS van padnam in de mysql geplaatst.
Wat kan er mis zijn ?
dat zal in het script test_resize.php staan.
De inhoud van dat script kan ik niet lezen in mijn glazen bol.
De functie waarmee deze thread begon maakt daar deel van uit neem ik aan.
Kan je het stukje laten zien hoe je de gePOSTe variabelen van het formulier verwerkt, dus waar ook de aanroep naar de resize-funktie staat ?
Merk op dat de functie make_thumb de nieuwe waarden bevat HEIGHT en WIDTH bevat die op voorhand werden ingesteld...
<form method="post" enctype="multipart/form-data" action="test_resize.php">
<input name="time" value="" type="hidden" />
<input type="hidden" name="username" value="" >
<table width="100%" border="1" cellspacing="0" cellpadding="0">
<tr>
<td>Title</td>
<td><input name="title" type="text" id="title"></td>
</tr>
<tr>
<td>Description</td>
<td><input name="descript" type="text" id="descript"></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Picture</td>
<td><input type="file" name="image" >
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="Submit" value="Submit">
<input name="" type="reset"></td>
</tr>
</table>
</form>
Nog een (laatste) keertje dan:
Het invulformulier roept het script "test_resize.php" aan zodra je op desubmit-knop drukt.
IN het script test_resize.php worden de velden welke door het invulformulier zijn gepost opgevraagd en verder verwerkt.
Bij dat verwerken roep je de functie make_thumb() aan.
DAT stukje wil ik dus zien, het niet je invulformulier, want die heb je nu al 2 keer laten zien.
Verder raad ik je aan om toch wat meer in de materie (PHP) te duiken, want mijn vraagstelling aan jou is niet zo moeilijk.
Met wat meer kennis van PHP zou je het probleem sneller zien.
Ik begin trouwens te denken dat het ganse script een samenraapsel is van allerhande dingen. ( ...en dat met m'n zéér beperkte kennis van PHP ;O)
ik HEB een werkend script dat 'n afbeelding upload en de padnaam in de Mysql schrijft en direkt het resultaat toont op een ' verse ' pagina : enkel wordt de afbeelding niet geresized...
Nevermind : ENORM bedankt voor je hulp Marcel maar ik zal nog maar eens trachten een resize-functie in m'n bestaande - en werkende - script te implementeren.
Tot...eum...gauw denk ik ;O )
Succes Fred ;-)