Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP包括调用其他文件_Php_Html_Relative Path_Absolute Path - Fatal编程技术网

PHP包括调用其他文件

PHP包括调用其他文件,php,html,relative-path,absolute-path,Php,Html,Relative Path,Absolute Path,我意识到我在我的PHP文件中一次又一次地使用了一个特定的函数,所以我从所有的PHP文件中取出了这个函数,将它放在一个单独的PHP文件中,并将它包含在我需要的地方 现在,当我对函数进行更新时,所有使用它的文件都会更新。太好了 现在只有一个问题,函数本身使用相对URL,当包含PHP时,文件是相对于调用PHP的,而不是包含的PHP目录。我知道快速而肮脏的答案是使用绝对链接,但是我如何才能让包含的PHP引用自身而不是调用它的PHP 例如: index.php包含一个名为create_table.php的

我意识到我在我的PHP文件中一次又一次地使用了一个特定的函数,所以我从所有的PHP文件中取出了这个函数,将它放在一个单独的PHP文件中,并将它包含在我需要的地方

现在,当我对函数进行更新时,所有使用它的文件都会更新。太好了

现在只有一个问题,函数本身使用相对URL,当包含PHP时,文件是相对于调用PHP的,而不是包含的PHP目录。我知道快速而肮脏的答案是使用绝对链接,但是我如何才能让包含的PHP引用自身而不是调用它的PHP

例如:

index.php包含一个名为create_table.php的文件。。。。。create_table.php将CSS和javascript回送到index.php。CSS和javascript与create_table.php位于同一目录中,但当使用src=“javascript.js”时,它希望找到index.php所在的javascript.js,而不是create_table.php所在的位置

编辑:结构如何工作

/includes/create_table.php
/包括/style.css
/包括/javascript.js
/test/dir/1/2/3/index.php


因此,当我尝试使用src=“javascript.js”而不是查找/includes/javascript.js时,它会尝试查找/test/dir/1/2/3/javascript.js绝对链接的使用不是“快速和肮脏”,而是绝对的
您的问题与PHP几乎没有共同之处。这是一个HTML问题。它不是PHP调用您的CSS文件,而是在从HTML代码中读取链接后调用浏览器

绝对路径的唯一目的是解决您的问题—从任何位置查找特定文件。
当然,它应该是唯一的路径,而不是URI。所有HTML链接都可以(而且应该)缩短为路径部分

而不是查找/includes/javascript.js

宾果

因此,只需告诉它寻找这个地址,一个绝对地址-
/includes/javascript.js

我认为最终必须使用绝对路径。问题是如何在不硬编码的情况下获得这些绝对路径

您可以使用magic常量
\u_文件\u_
获取当前脚本的绝对路径(即create_table.php),然后执行以下操作:

$filename = realpath(dirname(__FILE__).'/../../css/mystyles.css');
获取文件相对于当前脚本的绝对路径。(即,向上两个目录,向下进入css/)

或者您也可以以另一种方式启动并使用
$\u SERVER['DOCUMENT\u ROOT']
。假设您知道与webroot相关的所有路径。这是我喜欢的方式


编辑:我想你几乎可以忽略上面的内容!我假设(在编辑之前)您确实在服务器端读取CSS和JavaScript文件,并将的内容添加到index.php——我想不是

要重新回答。。。正是因为这个问题,我才不会对客户端CSS和JavaScript使用相对路径。有些人总是使用绝对URL,我个人更喜欢根相对URL。如果您是在服务器端生成这个URL,那没什么大不了的

根相对URL:
/includes/style.css


你认为这有什么不对?我会说这是首选的。

可能有更好的方法来处理您尝试执行的任何操作,而不是动态地从PHP函数中需要文件

至少,绝对路径是关键路径,通常是从根开始的绝对路径,如: 需要_一次(“/lib/fileOne.php”)


not:require_once(“lib/fileOne.php”)

你是说有一个文件总是需要的。在这个文件中,有一个比较
\uuuuu文件
脚本文件名
的函数。例如,您知道
includes/create_table.php
到根目录的路径是
。/
,因此它的文件夹差异是
1
,如果路径是
includes/foo/create_table.php
,则到根目录的路径是
。/
,因此差异是
2
,等等

$dif_to_root=1;

for
(
$i=0,$path='';
$i<($dif_to_root-(count(explode('/',__FILE__))-count(explode('/',getenv('SCRIPT_FILENAME')))));
$i++
)$path.='../';
$dif_to_root=1;
对于
(
$i=0,$path='';

$iit看起来像是你的文件在同一个目录中,lol。也给我们文件夹路径。我会看看你的目录结构。例如,CSS文件的目录;JavaScript文件的目录;common includes的目录等等。这使得这样的问题更容易处理。特定的目录结构并不重要。你肯定不会他的代码会有帮助吗?;-)这个$filename变量有什么用?啊,自从我第一次回答这个问题以来,这个问题就被修改了!“将CSS和javascript回显到index.php。”-意味着CSS和javascript已被读取并按字面意思插入index.php!看来他们终究还是被链接到了!($filename是mystyles.css文件的绝对文件名,您知道该文件到当前脚本的相对路径。)“根相对”路径通常称为“绝对”。不要把路径和URL弄乱。对不起,是的,我已经把上面的“相对路径”改成了“相对URL”。但是“根相对”和“绝对”URL是不同的。绝对URL:
http://www.example.com/includes/style.css
而根相对URL是:
/includes/style.css
(例如受
基本元素的影响),这似乎是客户端URL问题,而不是服务器端路径问题。+1是的,答对了!:)如果有什么不同的话,那就是相反的——相对URL在我看来是“快速而肮脏的”。尽管如下面的评论所述,严格来说绝对URL包含完整的域。这是一个根相对URL。