Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在CMS中处理图像的最佳实践_Php_Mysql - Fatal编程技术网

Php 在CMS中处理图像的最佳实践

Php 在CMS中处理图像的最佳实践,php,mysql,Php,Mysql,关于在PHP/MySQL CMS中处理图像的最佳实践的快速问题。每个项目都有不同数量的关联图像,这些图像将存储在项目ID引用的文件夹中。上传时会进行验证,因此所有文件都应有效。 我的问题是,我是否也应该将ID和文件名存储在数据库表中,并从DB中提取源数据,还是只需迭代文件夹并直接插入源文件名就可以了 我希望这是有道理的。提前感谢您的建议。这在很大程度上取决于您想要的故障点数量和响应时间的速度 如果将其存储在文件系统上: 传入的HTTP请求 PHP查询数据库 数据库将查找该行 PHP解密查询响应

关于在PHP/MySQL CMS中处理图像的最佳实践的快速问题。每个项目都有不同数量的关联图像,这些图像将存储在项目ID引用的文件夹中。上传时会进行验证,因此所有文件都应有效。 我的问题是,我是否也应该将ID和文件名存储在数据库表中,并从DB中提取源数据,还是只需迭代文件夹并直接插入源文件名就可以了


我希望这是有道理的。提前感谢您的建议。

这在很大程度上取决于您想要的故障点数量和响应时间的速度

如果将其存储在文件系统上:

  • 传入的HTTP请求
  • PHP查询数据库
  • 数据库将查找该行
  • PHP解密查询响应
  • PHP读取该文件
  • PHP发送文件的二进制内容作为对HTTP请求的响应
  • 但是,如果将其作为二进制blob存储在数据库中:

  • 传入的HTTP请求
  • PHP查询数据库
  • 数据库将查找该行
  • PHP解密查询响应
  • PHP发送二进制内容作为对HTTP请求的响应
  • 在这两种情况下,只要设置了适当的索引/键,步骤3(数据库查找行)在没有blob列的情况下可以同样快。MySQL将在内部将指针移动到精确的索引位置——在找到正确的字节(这是索引的整个点)之前,它不会实际遍历每个字节。这与PHP手动读取文件一样耗时。但是,我目前没有支持这一点的性能数据

    现在让我谈谈失败的要点:

    • 假设您迁移了数据。如果二进制图像数据存储在数据库中,只需移动数据库即可。但是,如果二进制图像数据存储在文件系统中,则必须记住同时移动两者。还要注意迁移的大小是相同的(或者至少是最小的不同)
    • 考虑重命名资产-您不仅需要在数据库中重命名资产,还需要在文件系统中重命名资产。这总共是2个步骤,而在DB中重命名它的步骤只有1个
    • 考虑删除资产-您必须在两个位置删除它
    我总是将二进制数据作为blob存储在数据库中,以实现可移植性、灵活性和最小化故障或损坏

    如果您选择将文件存储在数据库中作为BLB,请考虑不同的BLB存储要求:

    • TINYBLOB-256字节
    • MEDIUMBLOB-64千字节
    • LONGBLOB-4G字节
    最后,值得思考的是:
    我有与Adobe的Day CQ合作的经验,这是一个新兴的企业级内容管理系统。它主要是用Java编写的,但需要注意的是数据体系结构。它使用一个JCR(Java内容存储库),它的行为或多或少类似于一个多维MySQL数据库(有点酷?)。DAM(digital asset manager)中的所有图像数据都存储为JCR中的一个节点。

    感谢您的详细响应,老实说,我决定不在数据库中存储实际的二进制数据。虽然你确实提出了一些令人信服的论点,我需要考虑。我的想法是,或者只是将文件名存储在数据库表中,而不是单独使用项目的id来查找文件夹,并简单地包含该文件夹中的所有图像。请原谅我措辞上的混乱。