1

目前正在尝试将清漆缓存系统的 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)or$(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 变量或任何其他方法来生成要在 esi 包含中使用的动态 url。

4

1 回答 1

0

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

首先是代码片段..

<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 生成并将其绑定到 esi:include 标记内都是可能的。

<!-- ... -->当启用 ESI 处理时,此标签将被 varnish 静默删除,并且在禁用 ESI 处理的情况下,此标签将生效并使 esi:include 标签无效。

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

于 2016-02-08T05:53:50.323 回答