Riccardo Riccardo - 1 month ago 10
HTML Question

unable to upload an image using gd library php

this php file receives data from a html file where an user uploads an image from his computer, as soon as the update button is clicked this php page returns an error in which it is stated that no such file or directory exists



<?php error_reporting(E_ALL); ini_set('display_errors', 1);?>
<?php
$db = mysql_connect('localhost', 'pippo', 'pluto') or
die ('Unable to connect. Check your connection parameters.');
mysql_select_db('moviesite', $db) or die(mysql_error($db));

// current images folder
$dir ='image_php/images';

// make sure the upload succeeded
if ($_FILES['uploadfile']['error'] != UPLOAD_ERR_OK) {
switch ($_FILES['uploadfile']['error']) {
case UPLOAD_ERR_INI_SIZE:
die('The uploaded file exceeds the upload_max_filesize directive' .
'in php.ini');
break;
case UPLOAD_ERR_FORM_SIZE:
die('The uploaded file exceeds the MAX_FILE_SIZE directive that ' .
'was specified in the HTML form.');
break;
case UPLOAD_ERR_PARTIAL:
die('The uploaded file was only partially uploaded.');
break;
case UPLOAD_ERR_NO_FILE:
die('No file was uploaded');
break;
case ULOAD_ERR_NO_TMP_DIR:
die('The server is missing a temporary folder');
break;
case UPLOAD_ERR_CANT_WRITE:
die('The Server failed to write the uploaded file to disk');
break;
case UPLOAD_ERR_EXTENSION:
die('File upload stopped by extension.');
break;
}
}

// retrieve data from created image
$image_caption = $_POST['caption'];
$image_username = $_POST['username'];
$image_date = date('Y-m-d');
list($width, $height, $type, $attr) =
getimagesize($_FILES['uploadfile']['tmp_name']);

// make sure the uploaded file is a supported image
switch ($type) {
case IMAGETYPE_GIF:
$image = imagecreatefromgif($_FILES['uploadfile']['tmp_name']) or
die('The file you uploaded was not a supported filetype');
$ext = '.gif';
break;
case IMAGETYPE_JPEG:
$image = imagecreatefromjpeg($_FILES['uploadfile']['tmp_name']) or
die('The file you uploaded was not a supported filetype');
$ext = '.jpg';
break;
case IMAGETYPE_PNG:
$image = imagecreatefrompng($_FILES['uploadfile']['tmp_name']) or
die('THe file you uploaded was not a supported filetype');
$ext = '.png';
break;
default:
die('The file you uploaded was not a supported filetype');
}

//insert information into image table
$query = 'INSERT INTO images
(image_caption, image_username, image_date)
VALUES
("' . $image_caption . '", "' . $image_username . '", "' . $image_date .
'")';
$result = mysql_query($query, $db) or die(mysql_error($db));

//retrieve image value
$last_id = mysql_insert_id();

// use id as image name
//per assicurarsi che l'immagine non sovrascriva altre immagini esistenti
$imagename = $last_id . $ext;

// update image table adding the image final name
$query = 'UPDATE images
SET image_filename = "' . $imagename . '"
WHERE image_id = ' . $last_id;
$result = mysql_query($query, $db) or die (mysql_error($db));

// save image
switch ($type) {
case IMAGETYPE_GIF:
imagegif($image, $dir . '/' . $imagename);
break;
case IMAGETYPE_JPEG:
imagejpeg($image, $dir . '/' . $imagename, 100);
break;
case IMAGETYPE_PNG:
imagepng($image, $dir . '/' . $imagename);
break;
}
imagedestroy($image);
?>
<html>
<head>
<title>Here is your pic!</title>
</head>
<body>
<h1>So how does it feel to be famous?</h1>
<p>Here is the picture you just uploaded to our servers:</p>
<img src="images/<?php echo $imagename; ?>" style="float:left;">
<table>
<tr><td>Image Saved as: </td><td><?php echo $imagename; ?></td></tr>
<tr><td>Image Type: </td><td><?php echo $ext; ?></td></tr>
<tr><td>Height: </td><td><?php echo $height; ?></td></tr>
<tr><td>Width: </td><td><?php echo $width; ?></td></tr>
<tr><td>Upload Date: </td><td><?php echo $image_date; ?></td></tr>
</table>
</body>
</html>





this is the error that the page returns:

Warning: imagejpeg(): Unable to open 'image_php/images/9.jpg' for writing: No such file or directory in /var/www/html/php/image_php/check_image.php on line 98

the form which allows to upload images



<html>
<head>
<title>Upload your pic to our site!</title>
<style type="text/css">
<!--
td {vertical-align: top;}
-->
</style>
</head>
<body>
<form action="check_image.php" method="post" enctype="multipart/form-data">
<table>
<tr>
<td>Your Username</td>
<td><input type="text" name="username" /></td>
</tr>
<td>Upload Image*</td>
<td><input type="file" name="uploadfile" /></td>
</tr><tr>
<td colspan="2">
<small><em>* Acceptable image formats include: GIF, JPG/JPEG and PNG.
</em></small>
</td>
</tr><tr>
<td>Image Caption<br/>
</td>
<td><input type="text" name="caption" /></td>
</tr><tr>
<td colspan="2" style="text-align: center;">
<input type="submit" name="submit" value="Upload"/>
</td>
</tr>
</table>
</form>
</body>
</html>




Answer

From php manual here:

http://php.net/manual/en/features.file-upload.post-method.php

"Files will, by default be stored in the server's default temporary directory, unless another location has been given with the upload_tmp_dir directive in php.ini. The server's default directory can be changed by setting the environment variable TMPDIR in the environment in which PHP runs. Setting it using putenv() from within a PHP script will not work. This environment variable can also be used to make sure that other operations are working on uploaded files, as well."

Probably your http server hasn't write permission for temp dir or your php.ini has a temp dir configured for a dir where it hasn't write permission. Check them.

Comments