我只是好奇,在LAMP环境中使用SSI
而不是PHP的include
有什么好的理由吗?我真的想不出有什么好的论据支持它
TL;DR:不要使用SSI。如果您只包含100%静态HTML,(而不是其他include()
或任何内容)请使用readfile()
。。否则,只需使用include()
,并确保任何随机的人都不能像我希望的那样写入这些文件。
SSI包含可能是一个主要的痛苦,因为它们特别依赖Apache(试着让nginx读取SSI……这并不有趣),并且除了……之外没有任何优势。。。。。。
如果有问题的文件,无论是包含SSI还是包含PHP——如果它具有不安全的写入权限,或者由于任何原因,不受信任的源能够对其进行写入,那么它将成为一个主要问题。请记住,当您include()
时,您正在执行PHP代码。
有些SSI指令也可以执行exec(#exec
),这也很危险,但可能比PHP本身的范围更有限(或者,它可能更危险,对每种特定情况都非常依赖和主观)
但是,如果您要包含的有问题的文件没有,也永远不会包含PHP代码,并且只包含HTML,请不要使用include()
,而是使用:
echo file_get_contents('filename.html');
因为这样会更安全,因为从来没有执行过任何操作。或者你也可以使用readfile,如果你正在处理包含的非常大(10MB+)的文件,它可能会更有效:
readfile('filename.html');
因此,我可能认为应该使用PHP而不是SSI,但我可以根据经验告诉你,SSI可能会变得不可管理,并且至少不会比file_get_contents()
或readfile()
更有好处,而include()
有一个特殊的功能,即如果它包含PHP代码(好的或坏的),它就会被执行。