防止创建应使用PHP创建的HTML元素——使用PHP本身

防止创建应使用PHP创建的HTML元素——使用PHP本身,php,html,css,templates,mediawiki,Php,Html,Css,Templates,Mediawiki,我使用CMS MediaWiki,它包含许多功能,我想阻止在所有包含这些功能的网页中解析这些功能。 一些这样的功能(如小型内置菜单链接)我可以用CSS或JavaScript来阻止,但另一些则不行,这就是我的问题: 由于用户可以取消CSS和/或JS,该用户最终可能会使用“阻止”功能。 我的问题的一个很好的实际例子是,我希望防止对编辑摘要框进行解析,这在太多基于MediaWiki的社区中都是如此 由于我不是PHP程序员,我不想从头开始学习和编辑MediaWiki CMS的大量源代码(并为自动升级等设

我使用CMS MediaWiki,它包含许多功能,我想阻止在所有包含这些功能的网页中解析这些功能。
一些这样的功能(如小型内置菜单链接)我可以用CSS或JavaScript来阻止,但另一些则不行,这就是我的问题:

由于用户可以取消CSS和/或JS,该用户最终可能会使用“阻止”功能。
我的问题的一个很好的实际例子是,我希望防止对编辑摘要框进行解析,这在太多基于MediaWiki的社区中都是如此

由于我不是PHP程序员,我不想从头开始学习和编辑MediaWiki CMS的大量源代码(并为自动升级等设置例外),因此我更喜欢间接(“调整”)解决方案:

MediaWiki有
LocalSettings.php
文件,可以在其中运行自定义php。
我希望运行一些PHP函数,根据某种标准(可能是CSS类),这些函数将阻止对先前解析的元素(如编辑摘要框)进行解析。

如果这在当前版本的PHP中是可能的,那么如何做到呢?

不,不可能从其他文件中更改HTML代码,除非您有某种中间件将以纯文本形式检索代码,编辑代码(例如使用Regex)并将其传递到实际视图,这听起来像是MVC模式。如果这就是MediaWiki的工作方式(我对此深表怀疑),那么这就是你的方式

为什么不起作用?这是因为PHP是一种后端语言。它无法与前端交互,因为PHP脚本/文件(包含HTML)将在服务器(=后端)上执行,然后传递到浏览器

想象一下(非常非常简单):
your_file.php

这是执行脚本之前服务器上文件的状态:



你不能通过PHP实现这一点,但是如果你有服务器访问权限,你可以尝试一些高风险的方法,只是为了艺术

免责声明:这些都不是实用的解决方案,除非你知道自己在做什么,并且没有其他可能的方法,否则不要使用它们

因此,假设您只能编辑服务器配置和LocalSetings.php,您可以:

  • 使用重写规则将所有请求定向到LocalSettings.php文件,从而有效地更改CMS的入口点。然后,您可以使用捕获输出,并根据需要对其进行修改
  • 使用nginx,可以在HTML进入浏览器之前过滤掉它

  • 由于您不想弄乱CMS源代码,我假设您更不想更改服务器配置。但我还是会把我的答案留在这里,以防将来对其他人有所帮助。

    我认为这一点值得关注。我要说的是,我不确定这是否可能。来自页面的任何提交都将转到后端并进行处理。我不认为你可以通过将PHP代码放入不同的文件来阻止这一点。我要补充的是,自从我接触PHP以来,已经有一段时间了,所以也许我错了。好吧,如果你能使用PHP,这意味着你可以通过JS修改JS,最终修改CSS,@Vladan,这没有意义。如果我只是在浏览器中停用JS呢;谢谢一般来说,我做一些服务器/bash“技巧”比做PHP技巧更方便。。。这是一个“共享”CentOS服务器环境,托管公司(Siteground)使用ApacheNginx的组合(Nginx作为“反向代理”,我不知道这意味着什么),但它们只提供有限的Apache访问(
    .htaccess文件)以及我的用户分区中的一些
    cron`jobs和CLI控制台。在上面的评论之后,可能您需要添加/编辑一些内容。嘿@ShadowyShade,感谢您的赏赐:)反向代理只是服务器端的代理(“普通”代理是您在计算机上使用的)。假设您在CMS的根目录中
    index.php
    旁边有一个
    .htaccess
    文件,您可能会在那里实现一个
    重写规则
    ,将所有请求发送到
    LocalSettings.php
    。然后基本上将代码从index.php复制到
    LcocalSettings.php
    ,将其包装在
    ob\u start()
    ob\u get\u clean()
    中,并替换您想要的内容。再说一次,也不能保证这真的会起作用,但你可以试试:)Thx Pavel--我认为即使它起作用;是否应该存在严重的性能问题?顺便说一句,你可能想把它作为答案的一部分,因为评论可能会被删除。我基本上只是重复了答案,除了ReverseProxy部分:)我认为这不会带来任何性能问题,但我认为关闭CMS源代码中的模块可能更容易。