Это аналогичный вопрос, который я задал несколько дней назад, здесь вы можете найти весь исходный код, который вам может понадобиться, чтобы загрузить изображение с помощью gd-библиотеки php
в моем php.ini я обновил upload_tmp_dir
записывая upload_tmp_dir = /tmp
и open_base_dir
в open_base_dir = /tmp
В любом случае всякий раз, когда я пытаюсь загрузить сообщение об ошибке в файле, возвращается эта ошибка:
Предупреждение: imagejpeg (): невозможно открыть 'image_php / images / 18.jpg' для записи: нет такого файла или каталога в /var/www/html/php/image_php/check_image.php в строке 98
На самом деле я до сих пор не знаю, является ли это проблемой разрешения, но я считаю, что это так, и я не могу загружать изображения
вот исходный код php, который обрабатывает подачу файла, этого должно быть достаточно, так или иначе этот файл появляется после формы html, где пользователь загружает изображение, выбирающее из своей локальной папки на основе его / ее ПК
<?php error_reporting(E_ALL); ini_set('display_errors', 1);?> <?php $db = mysql_connect('localhost', 'goofy', 'donald') or die ('Unable to connect. Check your connection parameters.'); mysql_select_db('moviesite', $db) or die(mysql_error($db)); // cambiare questo percorso in modo che corrisponda a quello della cartella // images in uso $dir ='image_php/images'; // si assicura che il caricamento sia avvenuto correttamente 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; } } $image_file = tempnam($dir,"upload"); if (move_uploaded_file($_FILES['uploadfile']['tmp_name'], $image_file)!=true) { die("Can't move uploaded file!"); } // recupera le informazioni sull'immagine appena caricata $image_caption = $_POST['caption']; $image_username = $_POST['username']; $image_date = date('Ym-d'); list($width, $height, $type, $attr) = getimagesize($image_file); // si assicura che il file caricato sia effettivamente un tipo di immagine // supportato switch ($type) { case IMAGETYPE_GIF: $image = imagecreatefromgif($image_file) or die('The file you uploaded was not a supported filetype'); $ext = '.gif'; break; case IMAGETYPE_JPEG: $image = imagecreatefromjpeg($image_file) or die('The file you uploaded was not a supported filetype'); $ext = '.jpg'; break; case IMAGETYPE_PNG: $image = imagecreatefrompng($image_file) 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'); } // inserisce nella tabella images le informazioni $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)); //recupera il valore image_id che MYSQL ha generatp automaticamente quando // abbiamo inserito le informazioni sull'immagine della tabella // il nuovo record $last_id = mysql_insert_id(); // dato che id è univoco lo si può utilizzare anche come nome dell'immagine //per assicurarsi che l'immagine non sovrascriva altre immagini esistenti $imagename = $last_id . $ext; // aggiorna la tabella images col nome finale dell'immagine $query = 'UPDATE images SET image_filename = "' . $imagename . '" WHERE image_id = ' . $last_id; $result = mysql_query($query, $db) or die (mysql_error($db)); // salva l'immagine della sua destinazione finale 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); unlink($image_file); ?> <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>
Я добавил условие if в код, как было предложено, но все же мы возвращаемся с того места, откуда мы начали: страница работает, у меня есть все параметры, которые мне нужны, но изображение не может быть загружено
Предупреждение: imagejpeg (): Невозможно открыть «image_php / images / 20.jpg» для записи: нет такого файла или каталога в /var/www/html/php/image_php/check_image.php в строке 101
Добавить прямо перед // retrieve image data
:
$image_file = tempnam($dir,"upload"); move_uploaded_file($_FILES['uploadfile']['tmp_name'], $image_file);
Замените в дальнейшем код все вхождения $_FILES['uploadfile']['tmp_name']
в $image_file
И после imagedestroy()
добавить:
unlink($image_file);