开发者社区 问答 正文

php set_include_path的问题!?报错

index.php :

set_include_path('D:/xampp/htdocs/include/');

include('./test.php'); exit();

test.php在include目录下, index.php 在其它目录.

为什么上面的代码会报错? :

Warning: include(): Failed opening './test.php' for inclusion (include_path='D:/xampp/htdocs/include/') in D:\xampp\htdocs\test\test\index.php on line 15

换成:include('/test.php');就ok了.

怎么让它支持那个./呢?
 

展开
收起
爱吃鱼的程序员 2020-06-22 18:53:23 560 分享 版权
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    为什么你需要这样呢?

    你用的方法不对。

    如果你使用了set_include_path,那就代表你的这个path是一个根目录,所有在里面的文件都是以相对路径存在,也就是说你的test.php相当于在include_path的根路径下,自然要用/test.php

    而./test.php则代表你当前请求的index.php的同级目录,也就是说./这个代表了index.php所在目录。


    假如你需要这种调用:

    include/

       |----test.php

    web/

       |----index.php


    那么你可以在index.php中使用"../include/test.php"这种模式来引用test.php而不再设置includepath.



    引用来自“saharabear”的答案

    为什么你需要这样呢?

    你用的方法不对。

    如果你使用了set_include_path,那就代表你的这个path是一个根目录,所有在里面的文件都是以相对路径存在,也就是说你的test.php相当于在include_path的根路径下,自然要用/test.php

    而./test.php则代表你当前请求的index.php的同级目录,也就是说./这个代表了index.php所在目录。


    假如你需要这种调用:

    include/

       |----test.php

    web/

       |----index.php


    那么你可以在index.php中使用"../include/test.php"这种模式来引用test.php而不再设置includepath.



    位置不固定那你就直接用"/test.php",为啥一定要用"./test.php"?这是针对当前目录的。

    php默认相对路径都是以被访问页面所在路径为准的。无论一个入口页面,里面包含多少文件,相对路径,都是以这个页面为准。如果访问 index .php根路径是 index.php所在的目录,但test.php并不在 index .php所在的目录下
    ps:我测试了下,为什么include('/test.php');不能加/呢,而是include('test.php'); @saharabear

    好吧,我还没升级。。。哦?版本问题?我是5.4+namespace

    引用来自“苏翰”的答案

    php默认相对路径都是以被访问页面所在路径为准的。无论一个入口页面,里面包含多少文件,相对路径,都是以这个页面为准。如果访问 index .php根路径是 index.php所在的目录,但test.php并不在 index .php所在的目录下
    ps:我测试了下,为什么include('/test.php');不能加/呢,而是include('test.php'); @saharabear

    ./ 是相对路径,/ 是绝对路径. 这两种写法都不会使用 include_path 的设置.

    只有被包含的文件只存在文件名不存在路径的时候,才会使用include_patch设置.

    include_path一般的默认设置是,include_path=".;/usr/lamp/php/PEAR"

    其中的.就表示当前目录,你使用set_include_path修改了include_path,然后你引入文件的时候使用了相对路径,默认的就会调用include_path里的路径来查找,首先就找.,结果木有找到,就报错了,直接用/的话也是从include_path里找,把引用路径跟Include_path里的路径拼接在一起,根据默认设置就是/usr/lamp/php/PEAR/test.php,这就是区别

    引用来自“我不叫大脸猫”的答案

    include_path一般的默认设置是,include_path=".;/usr/lamp/php/PEAR"

    其中的.就表示当前目录,你使用set_include_path修改了include_path,然后你引入文件的时候使用了相对路径,默认的就会调用include_path里的路径来查找,首先就找.,结果木有找到,就报错了,直接用/的话也是从include_path里找,把引用路径跟Include_path里的路径拼接在一起,根据默认设置就是/usr/lamp/php/PEAR/test.php,这就是区别

    引用来自“看能不能改个名”的答案

    ./ 是相对路径,/ 是绝对路径. 这两种写法都不会使用 include_path 的设置.

    只有被包含的文件只存在文件名不存在路径的时候,才会使用include_patch设置.

    set_include_path(get_include_path()."path")
    2020-06-22 18:53:39
    赞同 展开评论
问答分类:
PHP
问答地址: