0

一切正常,唯一的问题是加载速度很慢。加载包含 265 张图片的页面需要 7 秒。这些图像不在远程服务器上,它们是缩略图。它们也以真实的高度/宽度显示,因此服务器不必调整它们的大小。

它不应该是 getimagesize(),因为在页面的先前迭代中,每个图像也有一个 getimagesize() 函数,并且加载时没有问题。

我能找到的唯一可能是数据库的问题。这是设置:

表专辑:

| 编号 | 纳姆 | 网址 | 活动 |


表格照片:

| 编号 | 网址 | 分机 | 描述 | 白蛋白|

因此,来自 fotos 的专辑 ID 与来自相册的 id 相关联。这是代码:

$album = mysql_real_escape_string($_GET['fx2']);
mysql_select_db('user_fotos');
$i = 0;
$sql = mysql_query("SELECT a.naam, b.url, b.ext, b.description, b.id FROM albums AS a LEFT JOIN fotos AS b ON a.id = b.albumid WHERE a.urlnaam = '$album'");
while($row = mysql_fetch_assoc($sql)){
    if($i == 0){
        echo "Album: {$row['naam']}<br />";
        echo "<table><tr>";
    }
    if($i % 4 == 0){echo "</tr><tr>";}
    echo "<td align='center'>";
    $photourl = "http://www.mysite.com/fotos/$album/thumbs/" . $row['url'] . $row['ext'];
    $dimensions = getimagesize($photourl);
    $breedte = $dimensions[0];
    $lengte = $dimensions[1];
    if($breedte == '120'){$aspect="width='120px' height='{$lengte}px'";}else{$aspect="height='120px' width='{$breedte}px'";}
        echo "<div class='imageHolder' style='width:{$breedte}px; height:{$lengte}px;' onClick=\"parent.location='$album/{$row['id']}'\" /><img $aspect src='http://www.mysite.com/fotos/$album/thumbs/" . $row['url'] . $row['ext'] . "' alt='{$row['description']}' /></div>";
        echo "</td>";
        $i++;
}
echo "</tr></table>";
4

3 回答 3

2

正如其他人和我自己提到的那样,从远程 url 获取 imagesize() 将涉及获取图像会减慢脚本的速度:正如我所见,您使用的是实际尺寸,因此无需实际获取尺寸,您也可能有一些专辑变量的 XSS 问题:试试这个,你会得到相同的结果,但要快得多:

  <?php 
    $album = mysql_real_escape_string($_GET['fx2']);
    mysql_select_db('user_fotos');

    $sql = mysql_query("
    SELECT a.naam, b.url, b.ext, b.description, b.id 
    FROM albums AS a 
    LEFT JOIN fotos AS b ON a.id = b.albumid 
    WHERE a.urlnaam = '$album'");

    $i = 0;
    while($row = mysql_fetch_assoc($sql)){
        if($i == 0){
            echo "<p>Album: {$row['naam']}</p>";
            echo "<table><tr>";
        }
        if($i % 4 == 0){echo "</tr><tr>";}
        echo "<td align='center'>";
        echo "<div class='imageHolder' onClick=\"parent.location='".htmlentities($album)."/{$row['id']}'\" /><img src='./fotos/".htmlentities($album)."/thumbs/" . $row['url'] . $row['ext'] . "' alt='{$row['description']}' /></div>";
        echo "</td>";
        $i++;
    }
    echo "</tr></table>";
    ?>
于 2012-04-07T15:06:39.530 回答
0

我认为图像本身也不是动态生成的吗?我建议您getimagesize()在将图像加载到数据库时执行此操作,然后创建宽度/高度列以节省昂贵的文件操作。另外,做一些html缓存。

于 2012-04-07T14:59:59.980 回答
0

可能是 getimagesize($photourl) 使脚本变慢

你的查询很正常

您可以轻松检查脚本:

在 php 代码中使宽度和高度为 const 并再次运行脚本,这样您就可以知道是哪一行使脚本运行缓慢

于 2012-04-07T15:05:56.800 回答