在帖子中包含外部文件(并使用已处理的路径)

时间:2011-02-26 作者:Synetech

我有一篇帖子,里面有一个相对较大的表,经常更新。我没有使用(较慢的)web界面每次更新帖子,而是安装了一个“run PHP”插件,并在表体中放入一小段PHP代码,在服务器上打开一个外部文件,然后将其放入帖子的表格中。通过这种方式,我可以根据需要在响应文本编辑器中本地编辑文件,并且在提供页面时立即反映更改(并且不需要对任何WordPress表进行任何更改)。

这工作得很好,我总体上对此很满意,但有一个小问题,即外部文本文件的路径是相对于服务器上的存储的(我使用媒体库管理器来存储它,因为我使用多站点功能,而PHP是服务器端的,所以路径的形式是"wp-content/blogs.dir/1/files/2011/02/foobar.txt"). 客户端代码(如JavaScript)使用的其他文件(如图像)的路径是相对于URL的。这显然不理想,原因有几个。

所以我有两个问题:

有没有比使用PHP更好的方式在帖子中包含外部内容

  • (好吧,1b。)如果没有,是否有更好的ie、更一致的文件访问方式?(也就是说,一种让PHP使用URL相对路径而不是服务器相对路径的方法?)


  • Clarification:

    在这篇文章中,我有这样的想法(代码是我脑子里想不到的,所以忽略任何错误):

    …
      <table>
        <thead><th>foo</th><th>bar</th><thead>
        <tbody>
          <?php
           $fn  ="wp-content/blogs.dir/1/files/2011/02/foobar.txt";
           $fh  =fopen($fn, "r");
           $data=fread($fh, filesize($fn)); //no clearstatcache; TXT file is not updated *that* often
           print($data);
           fclose($fh);
          ?>
        <tbody>
      </table>
    …
    
    其中文本文件包含如下内容:

    <tr><td>Blah</td><td>123</td></tr>
    <tr><td>Foobar</td><td>asd</td></tr>
    <tr><td>Test</td><td>555</td></tr>
    …
    
    当提供页面时,将执行帖子中的PHP,并从外部文件中提取表行,提取我在外部对其所做的任何更改,而无需通过WordPress。

    在处理根据switch语句设置一些图像的表之前还有一些JavaScript,这些图像是通过媒体库导入的,如下所示:

    case \'a\': element.style.backgroundImage=\'url(/blogs/foobar/files/2011/02/A.png)\'; break;
    case \'b\': element.style.backgroundImage=\'url(/blogs/foobar/files/2011/02/B.png)\'; break;
    …
    

    2 个回复
    SO网友:wyrfel

    1) 是的,有更好的方法。。。一种方法是使用短代码,而不是将php存储在db中。编写并注册一个短代码回调函数,该函数读取文件并返回内容并替换<?php ... ?> 文章中带有短代码的部分。此外,您还可以使用file_get_contents();, 为您节省几行代码。

    2) 您可以编写一个模拟这种情况的函数,但其好处太小,无法证明所做的努力是合理的。

    但是:您可以通过get_attached_file($attachment_id).

    SO网友:Wyck

    此文件多久更新一次?为什么不拉取数据并将其存储在有时间限制的瞬态中呢。这样一来,当它被送达时,您不需要处理任何东西,它也被缓存了。(您的url问题也可能得到解决)。

    您通常还会将存储的瞬态值与最新数据进行比较,并仅在发生更改时更新(使用md5md5_file).

    http://codex.wordpress.org/Transients_API

    结束

    相关推荐

    where to include a php file

    我有一个php文件,其中包含一些我想使用的变量。当我将其包含在标题中时。php该文件中的变量在页脚处无法识别。php和其他一些地方。哪里是包含此文件的最佳位置,因此其内容将在所有wp文件中共享。