在ASPNET中,我逐渐喜欢Application和Cache商店.他们太棒了.对于没有经验的人,你可以把数据逻辑对象扔进去,嘿嘿,你只需要查询一次数据库中的一些数据.
到目前为止,最好的ASPNET功能之一,IMO.
我已经放弃了Windows for Linux,因此放弃了PHP,Python和Ruby for webdev.我使用PHP最多,因为我开发了几个开源项目,都使用PHP.
毋庸置疑,我已经探讨了PHP在缓存数据对象方面所提供的功能.到目前为止,我玩过:
序列化到文件(一个非常慢/昂贵的过程)
将数据写入文件作为JSON/XML/plaintext/etc(对于读操作来说甚至更慢)
将数据写入文件为纯PHP(最快的读取,但相当复杂的写操作)
我现在应该强调,我正在寻找一种不依赖于第三方应用程序(例如memcached)的解决方案,因为应用程序安装在各种场景中,其中大多数都没有安装权限(例如:a便宜的共享主机帐户).
那么回到我现在正在做的事情,是坚持保存文件? Rule 1
在生产服务器安全性一直是禁用文件写入,但我真的没有看到任何方式PHP 可以缓存,如果它无法写入.是否有任何提示和/或技巧来提高安全性?
我还忘记了另一种持久存档的方法吗?
在"有限"的环境中有没有更好的缓存方法?
序列化是非常安全和常用的.然而,有另一种选择,那就是缓存到内存.查看memcached和APC,它们都是免费且高性能的.这篇关于PHP中不同缓存技术的文章也可能会引起关注.
它的实用性有限但如果您有一个特别强大的数据库查询,您可以将序列化对象写回索引数据库表.你仍然有数据库查询的开销,但它是一个简单的选择,而不是强大的查询.
可悲的事实是廉价的共享托管是不安全的.您信任100,500或1000名其他有权访问您服务器的人?出于历史和(讽刺)安全原因,共享托管环境将PHP/Apache作为非特权用户运行(PHP作为Apache模块运行).这里的安全理性是,如果面向apache进程的世界遭到破坏,那么剥削者只能访问无法使用重要系统文件的非特权帐户.
糟糕的是,这意味着无论何时使用PHP写入文件,该文件的所有者都是同一个无特权的Apache用户.对于系统中的每个用户都是如此,这意味着任何人都可以对文件进行读写访问.上述场景中的理论黑客也可以访问这些文件.
在PHP中还存在一种持久的不良做法,即向目录和文件提供777的目录权限,以使非特权的apache用户能够将文件写出,然后将目录或文件保留在该状态.这使得任何人都可以在系统上进行读/写访问.
最后,您可能会认为默默无闻可以拯救您."他们无法知道我的秘密缓存文件在哪里",但你错了.共享主机在同一组中设置用户,大多数默认文件掩码将为您的组用户提供对您创建的文件的读取权限.有时SSH进入您的共享主机帐户,向上导航目录,您通常可以开始浏览系统上的其他用户文件.这可以用来嗅出可写文件.
解决方案并不漂亮.一些主机将提供CGI Wrapper,允许您将PHP作为CGI运行.这里的好处是PHP将作为脚本的所有者运行,这意味着它将作为您而不是非特权用户运行.避免了问题!新问题!传统的CGI在2月份作为糖蜜缓慢.
有FastCGI,但FastCGI很挑剔,需要不断调整.没有多少共享主机提供它.如果你找到一个,它们可能会启用APC,甚至可以为memcached提供一种机制.