【问题标题】:Have over 360 .php files, forgot to include footer.php in all of them. What's the fastest way to do this?拥有超过 360 个 .php 文件,忘记在所有文件中包含 footer.php。最快的方法是什么?
【发布时间】:2015-03-28 22:57:38
【问题描述】:

我正在做一个项目。我快完成了。我使用 CodeIgniter 作为框架,并且我的视图文件夹中有超过 360 个主文件。但是,我只在控制器的大约 3 个函数中包含了 <?php include "includes/footer.php" ?>。我有超过 360 个函数和 200 个控制器。

在每个页面中包含页脚文件的最快方法是什么?

【问题讨论】:

  • 你运气不好。您可以将页脚放在header.php 文件中(假设您已将其包含在所有控制器中),然后对其进行自定义,以便页脚部分始终贴在页面底部。这不会完美,但也许可以试一试?
  • 这可能会有所帮助:stackoverflow.com/questions/5586293/…
  • 每个文件中是否只有1次开始标签?
  • 您可能做了一些严重错误的事情。 PHP 不应该以这种方式工作。如果您有 360 URL 链接到例如产品页面,那么您应该有 一个 PHP 文件来处理所有这些请求。而 200 个控制器是疯狂并且完全无法维护。

标签: php html codeigniter


【解决方案1】:

我会使用 Notepad++ 之类的东西。通过正则表达式匹配,您可以轻松地将其添加到文件底部:

Here 是我用来完成此操作的设置。

【讨论】:

  • 但我使用的是 Mac。 :(
  • 任何可以处理多个文件的正则表达式编辑的软件都应该能够完成我所做的事情。 Sublime Text 也应该有这个能力。
【解决方案2】:

将 '' 插入大量文件(在 linux 命令行上)的最快(也是最容易配置)的方法是 sed:

find views/ -name '*.php' -exec sed -i.bak '$ i\<?php include "includes/footer.php" ?>' {} +

解释:

  1. -i.bak 表示“就地”编辑并使用“.bak”创建备份副本 后缀。任何附加到-i 的字符串都会导致创建备份文件,并且该字符串会附加到备份文件名。裸露的-i 只会导致“就地”编辑,而不会创建备份文件。删除 -i 会禁用就地编辑并导致输出到标准输出。
  2. $ 表示“匹配最后一行”。您可以将$ 替换为/PATTERN/,其中PATTERN 是一个正则表达式。
  3. i\ 表示插入

该命令的效果是反斜杠后的文字字符串,直到最后一个单引号,将插入到find找到的每个文件的最后一行之前。

【讨论】:

    【解决方案3】:

    这有点问题,但您也许可以搜索和替换多个文件...例如如果您正在加载视图并且在正文之后有页脚,那么用相同的字符串替换您之前的视图,即$this-&gt;load-&gt;view('home_view', $data);,然后还要添加您的页脚?

    建议的记事本++是个好主意,或者:

    Find and replace in multiple files

    【讨论】:

      【解决方案4】:

      您可以轻松编写一个简单的 PHP 脚本:打开目录中的每个文件,将所需的代码附加到该文件,然后关闭该文件。然后,您将冲洗并重复每个文件。

      编辑:需要提供更多详细信息以供回答。

      下面的一些伪代码。请注意它的 Pythonic 风格(因为那是我所熟悉的,但总体要点是相同的)。

      def appendCode(file):
          code = "<?php require(\"footer.php\"); ?>"
          with open(file, 'a') as f:
              #append code here to end of file.
              f.append(f)
      
      def readDir(dir):
          if isDir(dir):
              d = openDir(dir)
      
          return d.allFiles()
      
      def main():
          dirs = ["dir1", "dir2"]
      
          for dir in dirs:
              files = readDir(dir)
      
              for f in files:
                  appendCode(f)
      

      或者,您可以使用已在此处发布或链接到的单行命令提示符!我个人喜欢编写这样的简单程序只是为了好玩。

      【讨论】:

        猜你喜欢
        • 2014-01-20
        • 1970-01-01
        • 2010-10-17
        • 2015-04-30
        • 1970-01-01
        • 2020-06-20
        • 2010-11-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多