【发布时间】:2015-07-07 01:49:44
【问题描述】:
我正在尝试构建一个数据库驱动的站点,通过这样的 php 脚本加载图像;
<img src="get_image.php?holderID=2">
当数据库可访问时,我可以从根目录之外的文件夹加载图像,但如果建立数据库连接失败,我也希望能够加载默认图像。 DB连接是从一个单独的php连接文件mysqli_template_connect.php发起的;
DEFINE('DB_USER', 'someusername');
DEFINE('DB_PASSWORD', 'amnesia');
DEFINE('DB_HOST', 'localhost');
DEFINE('DB_NAME', 'template');
$dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
然后 config.inc.php 设置一些常量,其中一个用于所有 DB 连接;
define('MYSQL', '../../../dbconnect/mysqli_template_connect.php');
get_image.php 文件则有条件的数据库连接;
require('includes/config.inc.php');
REQUIRE(MYSQL);
$holderID = $_GET['holderID'];
if(!$dbc){
$image_name = 'img/unavailable.png';
$info = getimagesize($image_name);
header("Content-Type: {$info['mime']}\n");
readfile($image_name);
}
else {
$query = "SELECT imageID FROM image_holder WHERE image_holderID = $holderID ";
$result = @mysqli_query($dbc, $query);
$number_rows = mysqli_num_rows($result);
if ($number_rows == 1) {
$row = mysqli_fetch_array($result, MYSQLI_NUM);
$imageID = $row[0];
}
else {
$imageID = FALSE;
}
if ($imageID) {
$query = "SELECT file_name FROM image WHERE imageID = $imageID";
$result = mysqli_query($dbc, $query);
$number_rows = mysqli_num_rows($result);
if ($number_rows == 1) {
$row = mysqli_fetch_array($result, MYSQLI_NUM);
$image_name = '../../../uploads/' . $row[0];
}
else {
$image_name = 'img/unavailable.png';
}
}
else {
$image_name = 'img/unavailable.png';
}
$info = getimagesize($image_name);
header("Content-Type: {$info['mime']}\n");
readfile($image_name);
mysqli_close($dbc);
}
如果我在 XAMP 中禁用 MYSQL 数据库,则默认图像不可用.png 将不会加载,即使代码的标头和 readfile 部分在有效的代码部分中几乎相同。我是这一切的新手,所以任何关于加载默认图像的想法都将不胜感激。
【问题讨论】:
-
需要(MYSQL)?另外,文件是否存在 (file_exists($image_name))?
-
@Mindastic REQUIRE(MYSQL) 建立数据库连接。这适用于我上传图像,将文件名写入数据库,然后使用数据库中的文件名成功加载图像。文件默认图像加载在有效的代码部分中是相同的,因此它确实存在。
-
为什么不复制数据库连接时完全相同的代码,而只需将查询等替换为静态默认值?
-
@TurdPile 我已经编辑了原始问题以包含使用相同的默认图像文件和标题/读取文件组合工作的数据库查询和图像传输代码。据我所知,对于数据库连接测试的任一结果,它们基本上是相同的,因此我很困惑。
-
您是否检查过您的图像实际上是一个带有
if(is_file($image_name )) { ...etc之类的文件?