【问题标题】:image upload script in phpphp中的图片上传脚本
【发布时间】:2011-03-15 20:25:21
【问题描述】:

在我的应用程序中,用户可以创建他/她的相册。

我的问题是如何上传特定于上传图片的用户 ID 的图片?这意味着应该有一些标准可以表明这些图像属于该用户。

我的想法是,我可以使用用户 ID 的图像名称存储图像,但在这种情况下,很难将 cmets 与这些图像一起存储。

有没有更好的办法?

【问题讨论】:

    标签: php image file-upload


    【解决方案1】:

    一个常用的解决方案是为每张图片设置两个数据:

    • 当然是磁盘上的文件
    • 以及数据库中的一条记录


    数据库中的记录一般至少会包含:

    • 图片的路径
    • 上传用户的 ID。

    这样,对于每个图像,您都有额外的数据——您可以使用这些数据向您的应用程序添加一些行为。

    当然,这意味着当用户上传图片时,您需要做更多的工作——但这​​也没有那么糟糕,而且可以证明是有用的。


    当需要时,您也可以将一些其他字段添加到存储这些数据的数据库表中,例如:

    • 允许查看每张图片的用户信息
    • 图像大小、内容类型、上次修改时间等内容...不必每次需要时都从文件中重新计算这些内容

    【讨论】:

    • 感谢 Pascal 我明白了你的意思,但你能不能给我一些示例代码或一些链接,让我有更多的想法
    【解决方案2】:

    你没有使用数据库吗?

    如果没有:

    建立一个数据库来存储用户,然后在图像和用户之间建立一个逻辑连接。

    例如

    用户:

    |---------------------------------------
    |  UserId       Username      Password |
    |---------------------------------------
    |     1         Robert        3j9745t3 |
    |     2          Paul         03945u30 |
    |---------------------------------------
    

    图片:

    |--------------------------------------------------
    |  ImageID       UserId      Desc       ImageHash |
    |-------------------------------------------------|
    |     1            1        Some Desc  87ytr8d23yr|
    |     2            1        Some Desc  5uty4095u40|
    |-------------------------------------------------|
    

    然后将图像存储在您的图像目录中,例如87ytr8d23yr.png,然后您可以像这样进行 php 查询

    $userid = 1;
    $sql = "SELECT * FROM Images WHERE UserId = " . (int) $userid . " ORDER BY ImageID LIMIT 10";
    
    if(false !== ($resource = mysql_query($sql)))
    {
        while($imageRow = mysql_fetch_object($resource))
        {
           if(file_exists('imageDir/' . $imageRow->ImageHash . '.png'))
           {
                //Do whatever.
           }else
           {
               //Delete the row and inform the user that the picture has been deleted for some reason.
           }
        }
    }
    

    另外你只需要做一个 Comments 表并添加 ImageId,当用户在图像上添加图像时,只需将图像添加到评论行中,以便你可以跟踪它。

    【讨论】:

    • 当你选择这个作为你的答案时,我只是告诉你一些你需要研究的东西,数据库安全(mysql_real_escape_string 和 sql 注入),表连接,图像安全(使用标题推送图像类型,png,jpg等)。 :) 快乐的日子
    【解决方案3】:

    你有数据库吗?用户是否登录?创建一个表来跟踪图像,包括一个用户 ID 列,并将整个图像存储在数据库中,或者只存储图像的路径名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-29
      • 2012-01-31
      相关资源
      最近更新 更多