我只是好奇,在 LAMP 环境中使用SSI
而不是 PHP有什么好的理由吗?include
我真的想不出任何好的论据来支持它。
1 回答
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()
or没有更多的好处readfile()
,同时include()
具有如果它包含 PHP 的特殊功能代码(好或坏),它将被执行。