特别奇怪的include路径问题!!。。。。。。。。。。

ycj_ha 2009-01-12 03:14:23
哪位高手能帮我解决这个奇怪的问题呢?

我的a.php的内容为
<?php
session_start();
$area = "北京";
include("../include/areas.php");
$_SESSION["area"] = $area;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
<table width="780" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><?php include("http://x.x.x.x/a/b.php")?></td>
</tr>
</table>
</body>
</html>

b.php文件的内容为
<table width="780" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><?php echo $area;?></td>
</tr>
</table>

但是在执行程序后没有输出$area的值,当把a.php中的<?php include("http://x.x.x.x/a/b.php")?>改为<?php include("../b.php")?>时,执行程序后输出了$area的值,这是为什么呢?
...全文
349 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
ycj_ha 2009-01-13
  • 打赏
  • 举报
回复
其实这两个文件都是远程文件,只不过用的域名不同而以...............
ai_ni 2009-01-13
  • 打赏
  • 举报
回复
该脚本文件实际上已经在远程服务器上运行了,而本地脚本则包括了其结果

这句话说的很好
songzairan 2009-01-13
  • 打赏
  • 举报
回复
up
songzairan 2009-01-13
  • 打赏
  • 举报
回复
探讨很激烈嘛!帮顶啦!
ycj_ha 2009-01-13
  • 打赏
  • 举报
回复
我眼花了????说说你的意见吧!!!
程序猿之殇 2009-01-12
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 ycj_ha 的回复:]
各位都言之有理啊!!!
[/Quote]
眼花了吧,呵呵.
Zijian_Zhang 2009-01-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ycj_ha 的回复:]
如果就用 <?php include("http://x.x.x.x/a/b.php")?>这样的绝对路径,该怎么解决呢?????????
[/Quote]这个好像不叫绝对路径吧,绝对路径不是相对于本地说的吗??这个是URL。
ycj_ha 2009-01-12
  • 打赏
  • 举报
回复
各位都言之有理啊!!!
Zijian_Zhang 2009-01-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ycj_ha 的回复:]
引用 2 楼 jakey9826 的回复:
这是不可能读取的!
http://x.x.x.x/a/b.php是通过url方式引用的,如果想读取area的值,必须通过http://x.x.x.x/a/b.php?area=$area这样include.

详细的请参看手册.

不错,这种方法是可以的,通过我列出的两个文件的内容,可以知道a.php和b.php都是在远程的,如果a.php包含多个b.php这样的文件,那么每个包含语句后面都要加"?area=$area"吗?这样总感觉不方便............
[/Quote]这里不能叫包含的,根本就include不了里面的PHP代码,只是显示了HTML代码,没有执行远程的PHP代码。
Zijian_Zhang 2009-01-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jakey9826 的回复:]
这是不可能读取的!
http://x.x.x.x/a/b.php是通过url方式引用的,如果想读取area的值,必须通过http://x.x.x.x/a/b.php?area=$area这样include.

详细的请参看手册.
[/Quote]正解,这不可能读取到的,在你include前,那个远程文件在远程服务器就已经解释了PHP文件,返回的只是一个HTML代码,而不是一个PHP源代码的文件,如果可以获取到,那每个人都去用include获取远程文件,那岂不是很危险!!
宇晨007 2009-01-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yctin 的回复:]
如果是本地文件...请使用相对路径
网络路径一般当成一个 function 或 webseriver 使用

[/Quote]
对,include 一个 url 是不行的
yctin 2009-01-12
  • 打赏
  • 举报
回复
如果是本地文件...请使用相对路径
网络路径一般当成一个 function 或 webseriver 使用
fxs_2008 2009-01-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jakey9826 的回复:]
如果“allow_url_fopen”在 PHP 中被激活(默认配置),可以用 URL(通过 HTTP 或者其它支持的封装协议 - 所支持的协议见 附录 L)而不是本地文件来指定要被包括的文件。如果目标服务器将目标文件作为 PHP 代码解释,则可以用适用于 HTTP GET 的 URL 请求字符串来向被包括的文件传递变量。严格的说这和包括一个文件并继承父文件的变量空间并不是一回事;该脚本文件实际上已经在远程服务器上运行了,而本地脚本则包括了其结果。

[/Quote]

很正确了,如果用http引用,则只引用结果

http://x.x.x.x/a/b.php 中$area没有声明,所以为空
penglewen 2009-01-12
  • 打赏
  • 举报
回复
这不是很好的办法,建议不要用这种include
而且手册上面也说明了
该脚本文件实际上已经在远程服务器上运行了,而本地脚本则包括了其结果。
include的只是解析后的html代码而已。


用本地路径吧。<?php include("../b.php")?>
ycj_ha 2009-01-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jakey9826 的回复:]
这是不可能读取的!
http://x.x.x.x/a/b.php是通过url方式引用的,如果想读取area的值,必须通过http://x.x.x.x/a/b.php?area=$area这样include.

详细的请参看手册.
[/Quote]
不错,这种方法是可以的,通过我列出的两个文件的内容,可以知道a.php和b.php都是在远程的,如果a.php包含多个b.php这样的文件,那么每个包含语句后面都要加"?area=$area"吗?这样总感觉不方便............
程序猿之殇 2009-01-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ycj_ha 的回复:]
如果就用 <?php include("http://x.x.x.x/a/b.php")?>这样的绝对路径,该怎么解决呢?????????
[/Quote]
2楼不是已经说了吗!
<?php include("http://x.x.x.x/a/b.php?area=$area")?>这样来引用
程序猿之殇 2009-01-12
  • 打赏
  • 举报
回复
如果“allow_url_fopen”在 PHP 中被激活(默认配置),可以用 URL(通过 HTTP 或者其它支持的封装协议 - 所支持的协议见 附录 L)而不是本地文件来指定要被包括的文件。如果目标服务器将目标文件作为 PHP 代码解释,则可以用适用于 HTTP GET 的 URL 请求字符串来向被包括的文件传递变量。严格的说这和包括一个文件并继承父文件的变量空间并不是一回事;该脚本文件实际上已经在远程服务器上运行了,而本地脚本则包括了其结果。
=============================================================
转自手册
ycj_ha 2009-01-12
  • 打赏
  • 举报
回复
如果就用<?php include("http://x.x.x.x/a/b.php")?>这样的绝对路径,该怎么解决呢?????????
程序猿之殇 2009-01-12
  • 打赏
  • 举报
回复
这是不可能读取的!
http://x.x.x.x/a/b.php是通过url方式引用的,如果想读取area的值,必须通过http://x.x.x.x/a/b.php?area=$area这样include.

详细的请参看手册.
bookmoth 2009-01-12
  • 打赏
  • 举报
回复
这个……楼下负责解释吧。
我再借地方问个问题:
如果服务器允许lz这样跨站包含文件,是不是也可以输出$area的值?

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧