我只是好奇,在LAMP环境中使用SSI
而不是PHP的include
是否有任何合理的理由?我无法想到任何有利于它的好论据。
答案 0 :(得分:3)
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()
或{{1更多的好处虽然readfile()
具有特殊功能,如果它包含PHP代码(好的或坏的),它将被执行。