指纹 PHP 文件
Posted
技术标签:
【中文标题】指纹 PHP 文件【英文标题】:Fingerprinting PHP files 【发布时间】:2021-07-01 17:50:41 【问题描述】:在链接到 JS、图像或 CSS 文件等网页资产时,您可以附加“?v=$timestamp or random number
”以确保服务器加载文件的最新版本,但在执行“require_once
”或“include_once
”时在 php 中附加“?v=$timestamp or random number
”会引发警告failed to open stream
。
我的问题是如何在包含 PHP 文件的同时实现相同的功能。
谢谢。
【问题讨论】:
【参考方案1】:时间戳技巧用于浏览器可能正在缓存文件以确保加载当前版本的情况。
include
和require
一般用于从本地文件系统加载文件,没有缓存,所以不需要指纹。
如果您正在远程加载 PHP 库(例如 include('http://www.example.com/someLibrary.php')
),则没有浏览器可以缓存它,因此通常应该同样适用,但无论如何指纹都应该可以解决任何可能妨碍的代理缓存。
【讨论】:
但是如果你使用 opcache 会有一个额外的复杂性,它可能被配置为使用内存中编译的代码并且很少或从不检查底层文件 - @987654321 @ - 不应从您的代码内部操纵此行为。 @symcbean 我尝试禁用ini_set('opcache.enable', '0');
,但代码一直在加载内存编译的代码,所以我重命名了文件以提供更新版本,但这并不能解决实际问题。
“这种行为不应该在你的代码中被操纵”。关闭 opcache 是一个非常糟糕的主意。在您的 php.ini 文件中,将 opcache.revalidate_freq 设置为 0,将 opcache.validate_timestamps 设置为 1
@symcbean 试过了,问题依旧
1) 你从来没有说过问题出在哪里。 2)您需要做的不仅仅是更改配置文件。以上是关于指纹 PHP 文件的主要内容,如果未能解决你的问题,请参考以下文章