如果 php 处理器离线,有啥方法可以停止提供 php 文件?

Posted

技术标签:

【中文标题】如果 php 处理器离线,有啥方法可以停止提供 php 文件?【英文标题】:Is there any way to stop php files being served if the php processor is offline?如果 php 处理器离线,有什么方法可以停止提供 php 文件? 【发布时间】:2011-03-07 02:59:48 【问题描述】:

我的伙伴说我不需要回答哪个问题,所以为了证明我的观点,我删除了 php 并模拟了一个服务器问题。嘿 presto,网络服务器提供 PHP 源作为下载。

那么,问题是,如果出现服务器故障、错误或与相关模块的连接暂时中断等情况,有没有办法停止提供源代码?

【问题讨论】:

出于这个原因,除了您的引导文件之外,您的其他 php 文件应该位于文档根目录之外。 +1 Ben Rowe 确实是我开始欣赏这件事了,当这种情况发生时,我看到有多少代码显示出来是相当可怕的。 【参考方案1】:

如果您错误地更改了服务器配置 - 例如,您正在为 Apache 使用 mod_php 并意外删除了该模块,则唯一会显示源代码的方法。

对于这种特殊情况,您可以这样做:

<IfModule php5_module>
   AddHandler php5-script .php
   PHPIniDir "/etc"
</IfModule>
<IfModule !php5_module>
  <FilesMatch "\.php$">
      Order allow,deny
      Deny from all
      Satisfy All
  </FilesMatch>
</IfModule>

【讨论】:

Facebook 泄露了他们主页的部分源代码。显然,原因是mod_php 在高负载下存在错误。 techcrunch.com/2007/08/11/facebook-source-code-leaked @ick 好吧...这是一个错误。除了修复它或在 Apache 前面放置一个过滤器(例如,另一个模块或代理),当它看到源代码时会终止请求(这很难做到),你无能为力。 @Artefacto:是的,这是一个错误,但它可能会再次发生。 @ick 顺便说一句,我想看看mod_php 在高负载下泄漏源代码的说法的来源(您发布的链接只是使用黄鼠狼的话)。这很可能是一个错误的声明,或者至少是过时的声明。 @Artefacto:是的,我知道;我也愿意。无论如何,它现在很可能已经解决了。【参考方案2】:

将 PHP 文件放在文档根目录之外,然后从文档根目录内的 PHP 文件中获取它们。他们仍然会得到一些类似这样或其他的代码,但这不会给他们提供太多细节:

require(dirname(dirname(__FILE__))."/real_file.php");

【讨论】:

【参考方案3】:

我编写了几个简单的函数来解析一个 URL MVC 样式(基于 Kissmvc.com),这是我文档根目录中唯一的 php:

<?php

require '../bootstrap.php';
parse_request();

所以,如果确实发生了什么事,那么任何人都会看到。其他一切都从引导程序开始处理。如果我愿意,我也可以将 parse_request() 移动到 bootstrap.php 中,但是我这样做是为了包含我的引导程序而不是发送所有网站的东西,如果我只是点击一个 cron 脚本(这是在我意识到 php_sapi_name() 函数和常量之前)。

如果您在 docroot 中有一个包含 php 的现有网站,或者正在使用 Wordpress 等,那将没有什么好处,但如果您有选择权,它将防止这个特定问题把您踢到男孩子身上。

【讨论】:

我必须研究一下,可能需要重写一些我没有完全自己设计的代码,但从长远来看,我的目标是移动我的所有代码。

以上是关于如果 php 处理器离线,有啥方法可以停止提供 php 文件?的主要内容,如果未能解决你的问题,请参考以下文章

PHP & Sessions:有啥方法可以禁用 PHP 会话锁定?

PHP中int和integer有啥区别?

PHP中int和integer有啥区别?

有啥方法可以停止 WPF 的 UI 窗口实例

mmc.exe是啥进程,这个进程占用cpu比较高应该怎么处理呢,停止的话,会有啥后果?

有啥方法可以停止或暂停 JSContext 对象中 Javascript 的执行?