Как загрузить изображение в базу данных с помощью php-скрипта?

вот код для моей загрузки .. но он не работает .. Я использовал функцию file_get_contents .. Загрузить изображение

</head> <body> <form action="upload1.php" method="POST" enctype="multipart/form-data"> File: <input type="file" name="image"/> <input type="submit" value="Upload image" /> </form> <?php //connect to the database $con = mysql_connect("localhost","root", ""); if(!$con) { die('Could not connect to the database:' . mysql_error()); echo "ERROR IN CONNECTION"; } mysql_select_db("imagedatabase", $con); //file properties echo $file = $_FILES['image']['tmp_name']; echo '<br />'; if(!isset($file)) echo "Please select an image"; else { $image = file_get_contents($_FILES['image']['tmp_name']); echo $image_name = addslashes($_FILES['image']['name']); echo '<br \>'; echo $image_size = getimagesize($_FILES['image']['tmp_name']); if($image_size == FALSE) echo "That's not an image"; else { $insert = mysql_query("INSERT INTO images (image) VALUES ($image)",$con); if(!$insert) echo "Problem uploding the image. Please check your database"; else { $last_id = mysql_insert_id(); echo "Image Uploaded. <p /> Your image: <p /><img src=display.php? id=$last_id>"; } } } mysql_close($con); ?> </body> </html> 

и код для извлечения / отображения идет следующим образом.

 <?php //connect to the database mysql_connect("localhost","root", "") or die(mysql_error()); mysql_select_db("mydb") or die(mysql_error()); //requesting image id $id = addslashes($_REQUEST['id']); $image = mysql_query("SELECT * FROM images WHERE id = $id"); $image = mysql_fetch_assoc($image); $image = $image['image']; header("Conten-type: image/jpeg"); echo $image; mysql_close($connect); ?> 

Я создал базу данных с именем «imagedatabase» и таблицей

Плохая идея сохранить изображение в базе данных. Сохраните путь к нему в базе данных, закройте каталог изображениями через .htaccess и используйте его на жестком диске.


Почему вы не должны хранить файлы в БД?

Если вы будете использовать БД для хранения изображений, у вас будет:

  1. медленные запросы
  2. размер катастрофических индексов
  3. высокая нагрузка на мост php <-> mysql
  4. проблемы с редактированием фотографий (вам нужно будет получить изображение, изменить что-то и снова вставить все данные Ohh nooo)
  5. проблемы с передачей файлов из одного места в другое
  6. новый вопрос о StackOverflow «Как работать с файлами, если они не файлы, а строка»

Вы должны сохранять файлы в какой-либо папке во время процесса загрузки и сохранять имя файла в базе данных, поэтому позже вы можете вызвать имя файла из базы данных и связать его как гиперссылку для загрузки, я использую следующий код для загрузки изображений в папке с именами файлов и сохранении имени файлов в базе данных. В конце у меня есть имя файла в переменной $ newname

 if ($_FILES['file']['name']) { $allowedExts = array("gif", "jpeg", "jpg", "png"); $temp = explode(".", $_FILES["file"]["name"]); $extension = end($temp); if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/pjpeg") || ($_FILES["file"]["type"] == "image/x-png") || ($_FILES["file"]["type"] == "image/png")) && ($_FILES["file"]["size"] < 500000) && in_array($extension, $allowedExts) ) { if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br>"; } else { $ext = end(explode(".", $_FILES["file"]["name"])); $filename = current(explode(".", $_FILES["file"]["name"])); $newname = $filename . '_' . time() . '.' . $ext; move_uploaded_file($_FILES["file"]["tmp_name"], "files/" . $newname); } } else { echo "<div class='alert alert-success'>Image type or size is not valid.</div>"; } } 

Загрузка изображений непосредственно в базу данных не является хорошей идеей. Вместо этого загружайте фотографии в папку, а затем просто вставляйте имя фотографии в базу данных и затем вызывайте ее позже, когда вам нужно. Вы можете попробовать следующий код, если хотите.

Чтобы код работал для вас, вам необходимо выполнить следующие действия:

  1. Внутри кода Замените «your_photo» на ваше имя входа (в этом случае, я думаю, это будет «образ»)

  2. Создайте папку, в которой вы будете загружать изображения, а затем вносите изменения в – >> $ newname = "support / images / profile /" здесь пишите имя папки изображений

  3. напишите правильный запрос базы данных. и помните, что имя изображения будет автоматически создано, и имя останется внутри этой переменной -> $ image_name. Когда вы вставляете имя в базу данных, просто используйте $ image_name как значение.

Загрузить сценарий:

  <? // If Everything is good- process the form - write the data into the database $photo=$this->input->post('your_photo'); if($photo==NULL){$image_name='0';}// if no photo is selected the default value of the photo would be 0 //photo upload starts $errors=0; if($_FILES['your_photo']){ $image=$_FILES['your_photo']['name']; if($image) { define ("MAX_SIZE","100"); function getExtension($str) { $i = strrpos($str,"."); if (!$i) { return ""; } $l = strlen($str) - $i; $ext = substr($str,$i+1,$l); return $ext; } //reads the name of the file the user submitted for uploading $image=$_FILES['your_photo']['name']; //if it is not empty if ($image) { //get the original name of the file from the clients machine $filename = stripslashes($_FILES['your_photo']['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 and will not upload the file, //otherwise we will do more tests if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) { //print error message $msg="Sorry! Unknown extension. Please JPG,JPEG,PNG and GIF only "; $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=filesize($_FILES['your_photo']['tmp_name']); //compare the size with the maxim size we defined and print error if bigger if ($size < MAX_SIZE*1024) { //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="support/images/profile/".$image_name; //we verify if the image has been uploaded, and print error instead $copied = copy($_FILES['your_photo']['tmp_name'], $newname); if (!$copied) { $msg="Sorry, The Photo Upload was unsuccessfull!"; $errors=1; } } else { $msg="You Have Exceeded The Photo Size Limit"; $errors=1; } }}} /*Image upload process ends here- If any problem occurs it will display error message via the $msg, otherwise it will upload the image to the image folder. To insert the photo into database $image_name has been used*/ } if(($_FILES['your_photo'])&& ($errors))/* If any photo is selected and any problem occurs while uploading it will display an error message, otherwise transfer the data to Mod_addstudent model */ { echo $msg; } else { //Insert into database.Just use this particular variable "$image_name" when you are inserting into database $sql="INSERT INTO your_table (field1, your_image_field) VALUES ('','$image_name')"; } ?> 

А затем посмотреть изображение ::

  <?php // Retrieve information from Database First and then .. if (empty($your_photo)) { $image_location="images/avatar.jpg";} //if there is no image in database else {$image_location="images/$your_photo";} // if there is any image in database ?> <img src="<?php echo base_url(); ?><?php echo $image_location ;?>" width="150" height="170" /> 

Убедитесь, что вы действительно можете загрузить файл на свой сервер сперва. Следуйте этому руководству:

http://www.tizag.com/phpT/fileupload.php

Это поможет вам устранить половину вашего путешествия, но я настоятельно рекомендую вам проверить ваши журналы на наличие фактических ошибок и что, если вы хотите получить дополнительную помощь, вы будете откровенно о них.