无法使用 gd 库上传图片 php

unable to upload an image using gd library php

此 php 文件从 html 文件接收数据,用户在单击更新按钮后立即从其计算机上传图像 php 页面 returns 指出不存在这样的文件或目录的错误

<?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>

这是页面 returns:

的错误

警告:imagejpeg():无法打开 'image_php/images/9.jpg' 进行写入:第 98 行 /var/www/html/php/image_php/check_image.php 中没有此类文件或目录

允许上传图片的表单

<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>

来自 PHP 手册:

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.

可能您的 HTTP 服务器没有对临时目录的写入权限,或者您的 php.ini 为没有写入权限的目录配置了一个临时目录。 检查它们。