欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php 两次include后,第一个include里的变量无效了

程序员文章站 2024-02-08 16:35:04
...
php 目录结构
+ root
index.php
config.php
+c
index.php

root/config.php 里的内容
$shell['jquery'] = "jquery 1.4";
?>

root/index.php 里的内容
include "config.php";
print $shell['jquery'];
?>

root/c/index.php 里的内容
include "../index.php";
?>

访问root/index.php返回
jquery 1.4

访问root/c/index.php返回
Notice: Undefined variable: shell in H:\software\dev\php\xampp\htdocs\phptest\index.php on line 3


请问,两次include 后变量为什么会失效呢?正确的做法应该是怎样做?
谢谢大家了

回复讨论(解决方案)

首先,解析顺序如下

1.文件路径是绝对路径?是, 包含, 解析结束。不是, 进入下一步。
2.文件路径是相对路径(就像你的"../index.php")?是, 跳过include_path, 解析相对路径。不是,下一步。
PS:相对路径的基点, 永远是“当前工作目录”.即你在这个目录里执行了脚本,不一定是脚本文件所存在的目录
比如你在/root里执行了`php /var/www/index.php`,“当前工作目录”是/root而不是/var/www/,/var/www是
current_script_dir。
3.php.ini中的include_path,比如".:somepath:current_script_dir"。根据DEFAULT_DIR_SEPARATOR常量(这里是":")分割出待处理列表
"."(当前工作目录),"somepath(你自定义的目录)","current_script_dir"这三个
把包含的文件名附加这些路径后面, 逐个尝试。

所以你的问题就变成

#访问root/c/index.php


这是我的理解,欢迎各位交流与指正

不会的!
只要你没有 root/c/config.php 这个文件
那么 root/config.php 就一定会加载到
你可以用 print_r(get_included_files()); 看一下都加载了哪些文件

要用java的思维方式去写php

要用java的思维方式去写php。我是只require类

谢谢各位,这个问题在百度知道解决了
http://zhidao.baidu.com/question/1638100265932728980.html?quesup2&oldq=1

感谢@Anew_G, 因为我是新手,所以不知你的分析正不正确,好像是对的,分给你了

谢谢各位,这个问题在百度知道解决了
http://zhidao.baidu.com/question/1638100265932728980.html?quesup2&oldq=1

感谢@Anew_G, 因为我是新手,所以不知你的分析正不正确,好像是对的,分给你了

最好不要使用Register Globals

理由: http://php.net/manual/zh/security.globals.php