Извлечение файла изображения из соответствующей папки с помощью readfile () или file_get_contents () не работает

Моя корневая папка public_html, Вне public_html У меня есть папка images,
Чтобы получить изображения из этой папки, я запрашиваю в базе данных правильное имя изображения & расширение в файле, который хранится внутри public_html папка -> forms папка -> check_images.php

Моя база данных:

$output['filetype'] -> jpg
$output['name'] -> 1

Переменная $file это относительный путь + имя файла + тип файла, который делает '../../images/1.jpg',

Теперь по какой-то причине загрузка изображения не работает, однако file_exists() работает нормально.

Заголовок:

header('Content-type: image/jpeg');

Что я делаю неправильно? и почему нет readfile() или же file_get_contents() работает как надо, когда они точно в той же папке, что и file_exists()

Весь код можно найти здесь:
http://pastebin.com/MhkAfY4s

То, что в данный момент отображается, является пустым изображением / или сломанным изображением при ссылке на него.

ОБНОВИТЬ

  1. Сначала я проверяю URL: http://pastebin.com/Fz36GmVD
  2. Затем я запускаю код изображения: http://pastebin.com/fZSRuJ4r

-1

Решение

Скорее всего, что происходит, что есть другой вывод, чем изображение, что портит изображение двоичных данных. Посмотрите на источник страницы, остерегайтесь пробелов перед вашим <?php как и после финала ?>один (который вы должны опустить, так как он не нужен)

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

Обновить:

Подводя итог, можно сказать, что наиболее вероятная причина, по которой он не работал, — это ob_start с gzhandler, простое удаление которого ничего не дало, что, вероятно, из-за E-Tag и браузера все еще показывало кэшированное содержимое.

1

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

  • Вы сделали несколько небольших ошибок
  • заголовок (‘Content-type: image / jpeg’) должен идти перед содержимым изображения
  • проверьте настройки вашей папки ../ или же ../../

Так ты PHP-код:

$file_name = (int)$routes[2];
$file = '../images/'.$file_name;

$sql = "SELECT i.image_filetype as filetype, i.image_type as type, i.image_key ". "FROM images i ". "WHERE i.image_deleted IS NULL ". "AND i.image_id = :filename LIMIT 1";

$results = $db_connect->prepare($sql);
$results->bindParam(':filename', $file_name, PDO::PARAM_INT);
$results->execute();
$db_image = $results->fetchAll(PDO::FETCH_ASSOC);
foreach($db_image as $output){
// PROFILE PICTURE
if($output['type'] === '1'){
$path = $file.'.'.$output['filetype'];
if(file_exists($path)){
header('Content-type: image/jpeg');
echo file_get_contents($path);
exit;
}else{$error_code = 4;}
}
}
die('1');

обновленный код:

Я не уверен, что вы делаете неправильно, но приведенный ниже код работает для меня. Так что, пожалуйста, предоставьте детали результата.
Мой идентификатор файла изображения godaddy2.jpg в родительском images папка.

<?php
// ROUTES[2] IS = IMAGE_ID + UNIQID
// EXAMPLE: 23
//$file_name = (int)$routes[2];

$file_name = 'godaddy2';

//$file = '/home/husliste/images/'.$file_name;

$file = '../images/'.$file_name;
//
//$sql = "SELECT i.image_filetype as filetype, i.image_type as type, i.image_key "//        . "FROM images i "//        . "WHERE i.image_deleted IS NULL "//        . "AND i.image_id = :filename LIMIT 1";
//$results = $db_connect->prepare($sql);
//$results->bindParam(':filename', $file_name, PDO::PARAM_INT);
//$results->execute();
//$db_image = $results->fetchAll(PDO::FETCH_ASSOC);
$db_image[] = [
'filetype' =>'jpg',
'type' =>'1',
];

function checkPlanAccess($a){
return true;
}
foreach($db_image as $output){
if($output['type']){
// CREATE HEADER
switch($output['filetype']){
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpeg";break;
default:
}
header('Content-type: '.$ctype);
// CREATE FILE PATH
$file_path = $file.'.'.$output['filetype'];
// =========================================== //
// PLAN
if($output['type'] === '1'){
if(checkPlanAccess($output['image_key'])){
if(file_exists($file_path)){
echo file_get_contents($file_path);
}else{$error_code = 4;}
}else{$error_code = 4;}
}
// PROFILE PICTURE
elseif($output['type'] === '2' && $check_session){
if(file_exists($file_path)){
$image = file_get_contents($file_path);
echo $image;
}else{$error_code = 4;}
}
// COMPANY LOGO
elseif($output['type'] === '3' && $check_session){
if(file_exists($file_path)){
echo file_get_contents($file_path);
}else{$error_code = 4;}
}
// CUSTOMER LOGO
elseif($output['type'] === '4'){
if(checkCustomerAccess($output['image_key'])){
if(file_exists($file_path)){
echo file_get_contents($file_path);
}else{$error_code = 4;}
}else{$error_code = 4;}
}
// CUSTOMER PROJECT IMAGES
elseif($output['type'] === '5'){
if(checkCustomerProjectAccess($output['image_key'])){
if(file_exists($file_path)){
echo file_get_contents($file_path);
}else{$error_code = 4;}
}else{$error_code = 4;}
}
// SUPPLIER LOGO
elseif($output['type'] === '6'){
if(checkSupplierAccess($output['image_key'])){
if(file_exists($file_path)){
echo file_get_contents($file_path);
}else{$error_code = 4;}
}else{$error_code = 4;}
}else{
$error_code = 4;
}
}else{
$error_code = 4;
}
}
die('1');
?>
0

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