【问题标题】:Check for an images existence before allowing it into a json string?在允许图像进入 json 字符串之前检查图像是否存在?
【发布时间】:2013-12-29 22:29:33
【问题描述】:

我有一个名称数据库以及用户上传到我的服务器的图像的 URL,然后我有一个页面可以做一个

SELECT * FROM users LIMIT 0,65

或者为了达到这个效果,回显一个“json_encode”字符串,最后我的 Android 应用程序获取并解析它找到的信息。

问题在于,例如,当图像上传失败或图像由于某种原因丢失时,数据库仍然有指向此丢失文件的链接,因此当我的应用程序尝试加载图像时被错误捕获。

PHP:

while($info = mysql_fetch_assoc($data)) 
{           
    $date = $info['date_time'];
    $info['date_time'] = time_ago($date);
    $img = $info['url'];
    if (!@getimagesize($img)) 
    {
        $info['url'] = "";
    }
    $rows[] = $info;
}
    $data = array('UserNames' => $rows);
    echo json_encode($data);

现在,我知道这很糟糕,因为如果它有 65 个结果,它必须遍历每个结果,检查是否存在,然后在编码之前粗略地替换 url 的值,但是是否有更好的方法来确保断开的链接无法通过 json 编码?

【问题讨论】:

    标签: php mysql sql json


    【解决方案1】:

    我强烈建议将“这张图片是否存在?”从返回图像的 api 方法。您可以通过以下几种方式做到这一点:

    • 如果图片上传失败,则根本不应该有可用的图片参考。您可以通过在确认图像已按应有方式上传之前不设置 URL 值来做到这一点。
    • 如果允许用户输入随机 URL,请在用户更新 URL 时检查 URL 是否有效。
    • 每天晚上,检查选择的图像(取决于链接的总数)的有效性。如果只有 65 张图像,请检查所有图像。如果是 650000,就分散一点。
    • 让您的 Android 应用发现图像是否无法加载:如果图像无法加载,请发送另一个请求,告诉您的应用检查图像的有效性并在您的应用中显示一个占位符。这样,当您向用户展示图像时,您可以进行分布式图像存在性检查,并且您只检查有问题的图像。

    至少,将其从显示循环中移出。这会很快杀死你的 api。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多