我有以下php代码,为简洁起见已被剪断。在声明$ lastImg之后我遇到代码问题,特别是大小似乎永远不会被分配任何值,因此outputwidth和outputheight保持空白。我一直无法找到原因。
pic_url只是数据库中的一个字符串,绝对指向有效的图像。当我在没有调整代码的情况下运行我的页面时,图像会完美显示。
<?php
header("Content-Type: text/html; charset=utf-8");
if (isset($_GET["cmd"]))
$cmd = $_GET["cmd"];
else
die("You should have a 'cmd' parameter in your URL");
$pk = $_GET["pk"];
$con = mysql_connect("localhost", "someuser", "notreal");
if(!$con)
{
die('Connection failed because of' . mysql_error());
}
mysql_query('SET NAMES utf8');
mysql_select_db("somedb",$con);
if($cmd == "GetAuctionData")
{
$sql="SELECT * FROM AUCTIONS WHERE ARTICLE_NO ='$pk'";
$sql2="SELECT ARTICLE_DESC FROM AUCTIONS WHERE ARTICLE_NO ='$pk'";
$htmlset = mysql_query($sql2);
$row2 = mysql_fetch_array($htmlset);
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result))
{
$columns = array('FINISHED', 'WATCH', 'PRIVATE_AUCTION', 'REVISED', 'PAYPAL_ACCEPT', 'PRE_TERMINATED', 'PIC_XXL', 'PIC_DIASHOW');
foreach($columns as $column)
{
$$column = $row[$column] ? 'YES' : 'NO';
}
$lastImg = $row['PIC_URL'];
$maxWidth = 250;
$maxHeight = 300;
$size = getimagesize($_SERVER['DOCUMENT_ROOT'] . $lastImg);
var_dump($size);
echo "SIZE = ".$size."";
if ($size) {
$imageWidth = $size[0];
$imageHeight = $size[1];
$wRatio = $imageWidth / $maxWidth;
$hRatio = $imageHeight / $maxHeight;
$maxRatio = max($wRatio, $hRatio);
else {
die(print_r(error_get_last())); }
else if ($maxRatio > 1) {
$outputWidth = $imageWidth / $maxRatio;
$outputHeight = $imageHeight / $maxRatio;
} else {
$outputWidth = $imageWidth;
$outputHeight = $imageHeight;
}
}
echo "<h1>".$row['ARTICLE_NAME']."</h1>
<div id='rightlayer'>
<img src='".$lastImg."' width='".$outputWidth."' height='".$outputHeight."'>
</div>";
}
}
mysql_free_result($result);
答案 0 :(得分:1)
我不得不说看起来$ row ['PIC_URL']可能没有指向有效的图像,这就是getimagesize失败的唯一原因。您在AUCTIONS中的数据库结构是什么样的?
答案 1 :(得分:0)
第一。做一个
print_r($row)
就在你的
之下while ($row = mysql_fetch_array($result))
看看阵列PIC_URL是否在那里设置
第二,你真的应该做一个安全的查询。
$sql="SELECT * FROM AUCTIONS WHERE ARTICLE_NO ='$pk'";
应该是
$sql = sprintf("SELECT * FROM AUCTIONS WHERE ARTICLE_NO = %d", mysql_real_escape_string($pk));
与其他SQL查询相同。
答案 2 :(得分:0)
你有一些相互冲突的事情:
$size = getimagesize($lastImg);
echo "<img src='".$lastImg."' ...>"
getimagesize
需要一个文件名,而<img>
需要一个网址。
您可以尝试这样的事情:
$root = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['SCRIPT_FILENAME']);
$size = getimagesize($root . $lastImg);
[编辑]抱歉。 DOCUMENT_ROOT
不对。
答案 3 :(得分:0)
尝试:
$lastImg = $row['PIC_URL'];
var_dump($row);
die();
查看$ row ['PIC_URL']中是否有任何内容。
答案 4 :(得分:0)
首先,要获得正确的错误消息,请将代码更改为:
$size = getimagesize($lastImg);
echo "SIZE = ".$size."";
if ($size) {
$imageWidth = $size[0];
$imageHeight = $size[1];
$wRatio = $imageWidth / $maxWidth;
$hRatio = $imageHeight / $maxHeight;
$maxRatio = max($wRatio, $hRatio);
if ($maxRatio > 1) {
$outputWidth = $imageWidth / $maxRatio;
$outputHeight = $imageHeight / $maxRatio;
} else {
$outputWidth = $imageWidth;
$outputHeight = $imageHeight;
}
} else {
die(print_r(error_get_last()));
}
之后,我们可以查看错误并尝试进一步调查。