PHP Mysql — изображение не отображается в браузере (неработающее изображение)

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

Я сохранил путь к изображению вместо блоба в базе данных и использовал переменную «путь», чтобы показать его в браузере.

Поиск работает, но изображения не отображаются, и я не могу найти причину, почему.

Я новичок в php / mysql, поэтому любая помощь приветствуется, почему мои изображения не отображаются.

upload.php

<?php

require_once 'includes/config.inc.php';
require_once 'includes/functions.php';

// Add the heading to output
$output = '<h1>Gallery</h1>';

// Echo the gathered output
echo $output;

// Include the HTML header
include_once 'includes/head.html';

// Check if the form has been submitted...
if (isset($_POST['fileupload'])
&& isset($_POST['title']) && isset($_POST['description'])) {

$title = $_POST['title'];
$description = $_POST['description'];

if (is_uploaded_file($_FILES['userfile']['tmp_name'] )) {
$updir = dirname(__FILE__).'/uploads/';
//$upfilename = $_FILES['userfile']['name'];
$ext=end(explode(".", $_FILES['userfile']['name']));//gets extension
$newname = $updir.$title;
$tmpname = $_FILES['userfile']['tmp_name'];
$newimage = $newname.'.'.$ext;
$path = $newimage;

//if file is an image, upload it
if($_FILES['userfile']['type'] ==  'image/jpeg'){
if (move_uploaded_file($tmpname, $newimage)) {
//print if file was uploaded
//echo 'File successfully uploaded';
list($width, $height) = getimagesize($newimage);
//Add values to the DB
$sql = "INSERT INTO Images VALUES(NULL, '$title', '$description', '$width', '$height', '$path')";
$result = mysqli_query($link, $sql);
if(!$result) die ("Database access failed: " . $link->error);
$w = $width;
$h = $height;
resize($newimage, $width, $height);
}
} else {
//print if file failed
echo 'File upload failed';
}
}
//echo debug();
}
// Include the HTML footer
?>

index.php (скрипт sql здесь)

<?php
require_once 'includes/config.inc.php';
require_once 'includes/functions.php';

if (!isset($_GET['page'])) {
$id = 'home'; // display home page
} else {
$id = $_GET['page']; // else requested page
}

switch ($id) {
case 'home' :
include 'uploads.php';
break;
default :
include 'views/404.php';
}

$sql = 'SELECT * FROM Images';
$result = mysqli_query($link, $sql);
if(!$result){
die(mysqli_error($link));
}else{
while($row = mysqli_fetch_array($result)){
echo '<div><a href= "#">
<img src="'.$row['path'].'" width=150 height=150 alt="'.$row['title'].'" /></a></div>';
}
mysqli_free_result($result);
}
/*
Alternative way of showing the right images
$images = glob('uploads/*.jpg');
for($i = 0; $i < count($images); $i++){
list($w,$h) = getimagesize($images[$i]);
$allimages = $images[$i];

echo  '<div><a href="'.$allimages.'">
<img src="'.$allimages.'" width="'.$w.'" height="'.$h.'" alt="" /></a>
</div><br/>';
}*/
include_once 'includes/footer.html';
?>

0

Решение

Проблема в том, что вы используете dirname(__FILE__) для начала пути вашего изображения и сохранить этот полный путь в базе данных.

Согласно инструкции dirname:

Возвращает путь родительского каталога.

А также __FILE__:

Полный путь и имя файла с символическими ссылками разрешены.

Таким образом, вы храните свое изображение, используя абсолютный путь в локальной файловой системе сервера.

Однако этот абсолютный путь не является абсолютным по отношению к корню веб-сервера, поэтому браузер не найдет изображения.

Решение состоит в том, чтобы использовать абсолютный путь при перемещении загруженного изображения, но сохранить путь, который является абсолютным относительно корня веб-сервера.

В вашем случае вы, вероятно, можете использовать /uploads/ путь для этого, хотя это будет зависеть от точной файловой структуры:

...
// no dirname here
$updir = '/uploads/';

//$upfilename = $_FILES['userfile']['name'];
$ext=end(explode(".", $_FILES['userfile']['name']));//gets extension
$newname = $updir.$title;
$tmpname = $_FILES['userfile']['tmp_name'];
$newimage = $newname.'.'.$ext;
$path = $newimage;

//if file is an image, upload it
if($_FILES['userfile']['type'] ==  'image/jpeg'){

// only use dirname() here
if (move_uploaded_file($tmpname, dirname(__FILE__) . $newimage)) {
...
0

Другие решения

Вы должны добавить домен вашего сервера к атрибуту src тега img, чтобы пользователи стали абсолютным путем для просмотра изображений:

 echo '<div><a href= "#">
<img src="'$_SERVER['HTTP_HOST'].$row['path'].'" width=150 height=150 alt="'.$row['title'].'" /></a></div>';
0

По вопросам рекламы [email protected]