Моя корневая папка 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
То, что в данный момент отображается, является пустым изображением / или сломанным изображением при ссылке на него.
ОБНОВИТЬ
Скорее всего, что происходит, что есть другой вывод, чем изображение, что портит изображение двоичных данных. Посмотрите на источник страницы, остерегайтесь пробелов перед вашим <?php
как и после финала ?>
один (который вы должны опустить, так как он не нужен)
Чтобы дополнительно помочь с загрузкой больших файлов, я предлагаю вам использовать XSendFile, чтобы справиться с тяжелой работой за вас.
Обновить:
Подводя итог, можно сказать, что наиболее вероятная причина, по которой он не работал, — это ob_start с gzhandler, простое удаление которого ничего не дало, что, вероятно, из-за E-Tag и браузера все еще показывало кэшированное содержимое.
../
или же ../../
Так ты 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');
?>