我的根文件夹是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
当前显示的内容是链接到的空图像/或损坏的图像。
更新
答案 0 :(得分:1)
正在发生的事情很可能是除了图像之外还有其他输出,从而弄乱了图像二进制数据。看一下页面的来源,注意<?php
之前的任何空格以及结束?>
之后的任何空格(你应该省略它,因为它不需要)
为了进一步帮助大文件下载,我建议您使用XSendFile来处理繁重的工作。
<强>更新强>
总而言之,最不可能的原因是it_start与gzhandler,只是删除它没有做任何事情,这可能是因为E-Tag和浏览器仍显示缓存内容。
答案 1 :(得分:0)
../
或../../
所以你的 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');
?>