php - 访问 ESI 标记内的 php 变量

标签 php varnish esi

目前正在尝试将 Varnish 缓存系统的 ESI 包含功能与 php 项目一起使用。在我的场景中,我需要访问 esi 标记内的 php 变量。类似于以下...

 <p class="dt5">This article was read <esi:include src="http://localhost/live24/esi/viewCount" /> times. </p>

这是 esi 标签内的完整 url,它工作正常,即从服务器获取读取计数,页面的其余部分从缓存中提供。但是如何生成可以传递给 esi 标签的动态 url。

我尝试过类似以下的操作......
<?php $url = site_url() . "/esi/viewCount" ?>

或者
<?php $url = "http://localhost/live24/esi/viewCount" ?>
<p class="dt5">This article was read <esi:include src="$(url)" /> times. </p>

作为 $(variable_name)$(variable_name{key_name})是在 esi 标签内添加变量的语法,但在访问 PHP 变量时似乎不起作用。

我也尝试过这样的事情......
<p class="dt5">This article was read<esi:include src="http://$(SERVER{NAME})/live24/esi/viewCount" /> times. </p>

这有效。表明我可以从 esi 标签内访问超全局变量。

是否有任何方法可以访问 esi 标签内的 php 变量或任何其他方法来生成动态 url 以在 esi 包含中使用。

最佳答案

找到了一个解决方案,实际上它非常简单明了。早该想到的。

首先是代码片段..

<p class="dt5">This article was read
  <esi:remove>
    <?php $esiUrl = "http://localhost/bdlive24/esi/viewCount"; ?>
  </esi:remove>

  <!--esi
    <esi:include src=<?php echo $esiUrl; ?> />
  -->
times</p>

这里的诀窍是引入 <esi:remove>标签。删除标签内的任何标记代码都将被忽略并执行 php 代码。因此,现在 esi:remove 标记内的任何动态 url 生成并将其绑定(bind)到 esi:include 标记内都是可能的。
<!-- ... -->当启用 ESI 处理时,此标签将被 varnish 静默删除,并且在禁用 ESI 处理的情况下,此标签将生效并使 esi:include 标签无效。

谁有其他想法,请分享....

关于php - 访问 ESI 标记内的 php 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35253406/

相关文章:

PHP 脚本更新所有用户值而不是单个用户值

PHP 提交表单,在使用 JQuery 时突出显示文本字段错误

php - 记录未按升序插入

Varnish 302重定向到后端

reverse-proxy - 缓存控制 : Is it possible to ignore query parameters when validating the cache?

php - ESI 是阻塞的还是非阻塞的?

php javascript 警报框必须单击 2 次才能显示

https - 将 Varnish 与 SaaS HTTPS 后端服务器一起使用?

symfony - 父请求和 ESI 子请求之间有任何通信( Varnish 、 session 需求)吗?

caching - 我可以用Varnish完成此操作吗?