当前位置:  开发笔记 > 编程语言 > 正文

将PHP对象缓存到文件的方法?

如何解决《将PHP对象缓存到文件的方法?》经验,为你挑选了2个好方法。

在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 可以缓存,如果它无法写入.是否有任何提示和/或技巧来提高安全性?

我还忘记了另一种持久存档的方法吗?

在"有限"的环境中有没有更好的缓存方法?



1> Eran Galperi..:

序列化是非常安全和常用的.然而,有另一种选择,那就是缓存到内存.查看memcached和APC,它们都是免费且高性能的.这篇关于PHP中不同缓存技术的文章也可能会引起关注.


APC不仅仅是字节码缓存.它还具有缓存到内存的功能,类似于memcache.
Memcache和APC完全没有相似之处.他们唯一的共同点是他们都使用RAM.Memcache缓存数据.APC优化和缓存操作码.APC几乎可以使任何PHP应用程序更快,但它不会提供缓存对象和减少数据库查询的帮助.
对于运行于不同部署方案的软件,最好编写一个标准缓存接口,该接口可以使用不同的缓存提供程序(APC,Memcached,基于文件)实现.然后它只是每个部署的配置问题.如果他们没有可用的内存缓存,则回退到基于文件的缓存.

2> Alan Storm..:

Re:还有另一种我遗忘的持久存档方法吗?

它的实用性有限但如果您有一个特别强大的数据库查询,您可以将序列化对象写回索引数据库表.你仍然有数据库查询的开销,但它是一个简单的选择,而不是强大的查询.

Re:坚持文件安全吗?便宜的共享主机帐户)

可悲的事实是廉价的共享托管是不安全的.您信任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提供一种机制.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有