【问题标题】:Refactor PHP Include Path重构 PHP 包含路径
【发布时间】:2017-03-27 17:09:48
【问题描述】:

我镜像了一个网站,并且能够通过使用路径中的替换技术将 PHP 包含添加到所有 PHP 文件中。同一目录中的所有 PHP 文件都会在图像中生成以下内容:

按预期工作,我能够与导航样式进行交互。但是,如果我导航到与 PHP 包含不在同一父文件夹中的文件(reports/index.php),则会收到以下错误:

Warning: include(navigation.php): failed to open stream: No such file or directory in F:\xampp\htdocs\xampp\navigations\1\reports\index.php on line 148

Warning: include(): Failed opening 'navigation.php' for inclusion (include_path='F:\xampp\php\PEAR') in F:\xampp\htdocs\xampp\navigations\1\reports\index.php on line 148

不确定是否有一种高效的方式可以重构所有 PHP 包含的内容,而无需手动修复每个页面?我基本上是想改变这个:

<?php include("navigation.php"); ?>

如果说我在报告目录中:

<?php include("../navigation.php"); ?>

是否有任何编辑器或 IDE 可以做到这一点?我目前正在使用 PhpStorm。

【问题讨论】:

  • 您可以将根路径存储到索引文件最顶部(或包含在顶部的 config.php 中)的已定义常量 define('ROOT_PATH','full/root/path');。然后,索引文件中包含的每个子脚本都可以包含类似 include(ROOT_PATH."/navigation.php"); 或 include(ROOT_PATH."/reports/navigation.php"); 的文件
  • 这是navigation.php 文件的根路径吗?我会将定义的常量应用于所有页面吗?
  • 假设你有一个 index.php。应用程序的起点。在第一行您可以添加define('ROOT_PATH','full/root/path'); 这应该与您从echo $_SERVER['DOCUMENT_ROOT']; 获得的路径相同。您可以在包含的子文件(例如“report/navigation.php”)中的任何地方使用定义的 ROOT_PATH 常量,只要您将它们包含在 index.php 中的 define() 下方。如果您仍然不清楚,我可以尝试重构您拥有的内容,前提是您有充分的理由要在特定任务目录(例如 /report/index.php 中拆分索引文件)
  • 搞定了!好吧,我在报告索引 PHP 文件中对其进行了测试,它显示了 HTML,但没有显示 CSS 和 JavaScript,因为它们的路径认为它们在报告目录中。这是我的结构: index.php(主页)|报告(文件夹)| --- index.php(报告页面)| assets(文件夹)(包含我实现的导航的 CSS 和 JavaScript)| navigation.php(导航样式) |不知道我该如何解决这个问题?我可以将它们定向到我的远程服务器,但我必须上传任何 CSS 和 JavaScript 才能看到更改。
  • @userrandomuser 使用 css 和 js 文件的一个简单方法是让路径全部相对于/。好的想法 / 是相对于您的此类文件的 webroot 的,因此您可以在每个页面中执行 /css/main.css ,它将指向同一个文件。

标签: php


【解决方案1】:

使用 PhpStorm,您可以按 SHIFT + CTRL + R 来调出能够遍历多个文件的查找和替换对话框。如果需要,将您的选择限制为文件的路径,并将"navigation.php" 替换为"../navigation.php"

【讨论】:

  • 抱歉,您是否正在参考“路径中的替换”对话框?如果是这样,那不是将所有具有navigation.php 的文件替换为../navigation.php,这意味着只有那些具有一个父级的文件才能与导航交互?如果我解释错了,我深表歉意。
  • 抱歉这么晚才回来,因为我昨天去上班了。我指的是路径对话框中的替换,您还可以在其中定义替换范围。因此,如果您的子目录中有文件路径错误,您可以替换该子目录中所有出现的文件,这应该会产生所需的结果。如果不是,我误解了这个问题。
猜你喜欢
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 2013-11-09
  • 2014-05-19
相关资源
最近更新 更多