我一直在开发一个使用fpassthru
内置函数,从流或文件指针读取内容,并将其输出到输出缓冲区。它与该readfile
函数非常相似,但允许我从特定偏移量开始输出。
我测试过产品的大多数托管服务提供商都运行良好,其中包括共享的多租户托管环境。但是,我发现有几个托管服务提供商将此功能fpassthru()
“出于安全原因禁用”。我花了几个小时研究为什么有人会禁用该fpassthru
功能,但不会禁用诸如、、以及之类的功能fopen
,但fread
我找不到任何有用的东西。file_get_contents
readfile
这可能听起来很傻,但我最接近的猜测是这些主机误将fpassthru
其禁用passthru
,这确实值得禁用,特别是在共享环境中。话虽如此,实际passthru
功能(以及exec
其余的家族功能)在这些主机上也被禁用。
我尝试联系这些主持人并询问他们原因。
我无法联系 Flywheel 的销售人员,他们说他们无法回答我的问题,只有支持人员可以回答。为了联系支持人员,我必须成为客户。典型。
RunCloud 一开始看起来更有希望,我联系上了一位“3 级系统工程师”,又花了几天时间才联系上一位“高级系统工程师”,从他那里我得到了以下声明:
这是 RunCloud 上 PHP 的最佳实践,也是我们的最佳实践
我要求他们详细说明,但有一段时间没有收到回复,所以我失去了希望。
需要澄清的是,我并不是在寻找绕过 的方法。 fpassthru()
我正在寻找为什么它偶尔会与exec()
、system()
、和其他“危险”函数一起列出,而、等却可以正常工作的原因。passthru()
pcntl_fork()
readfile()
file_get_contents()
如果您有任何见解,请分享!
答案1
不要低估货物崇拜程序员和系统管理员的力量。
提供商过去可能遇到过需要禁用特定功能的特定问题,而今天他们仍继续这样做,只是因为他们的公司“一直都是这样做的”。而现在在那里工作的人都不知道背后的实际历史事件。
更不用说这种推理是否仍然适用。