tonera 回复于:2003-12-13 11:44:13 |
加精华啊!PHP版的精华总这么少?其实很多文章即使不加精华也应该保留啊。比如说前段时间的几个论题,都是大家的实际心得,不保留下来太可惜了。建议版主考虑一下,还可以提高老同志发贴的积极性嘛。 :D
[b:afclearcase/" target="_blank" >cc144654]要是楼主再贴个实例就更好了。[/b:afcc144654] |
longnetpro 回复于:2003-12-13 12:43:45 |
我修改了一下原文,提供了一个简单的例子。不过各位最好自己去试试,我想我讲得还是比较清楚的,而且这样印象比较深刻,也比较容易发现其中的问题。
另外,它也不光只用于包含文件的路径,什么图片等的路径,原理都是一样的。 |
麻辣 回复于:2003-12-13 23:22:47 |
perl的路径太复杂了,我可能要给你讲一火车
相对路径不可靠,比如当前目录打开一个文件 open "123.text";####在有的服务器下可以,有的不行,所以,相对路径不能用! 必须用变量控制 open "cgipath/123.text";#### 这个$cgipath从哪里得到呢? 可以由安装的时候设定,这样不太方便,程序搬家需要从新安装,所以也可以环境变量里面去取,perl的当前脚本路径存储在环境变量中,但问题又来了。 不同的web服务器,这个路径存储在不同的环境变量中,非常复杂 所以,雷傲的程序每个脚本前面有个 BEGIN { $cgi_path = '.'; $pgm = $0;###这个是当前脚本名称 $pgm =~ s/\\/\//g; $pgm =~ s/^.*\/([^\/]+)$/$1/g; unless ( -e $cgi_path . '/' . $pgm ) { foreach ( $0, $ENV{'SCRIPT_FILENAME'}, $ENV{'PATH_TRANSLATED'} ) { s!\\!/!g; s/^(.*)\/[^\/]+$/$1/g; if ( -e $_ . '/' . $pgm ) { $cgi_path = $_; last; } } } unshift( @INC, "$cgi_path/ccblib","$cgi_path" ); } 其中 $0, ###相对路径 $ENV{'SCRIPT_FILENAME'}, ###有可能存储绝对路径 $ENV{'PATH_TRANSLATED'}####有可能存储绝对路径 这三个变量,肯定有一个是对的,哪个对用哪个 路径识别问题是perl的最大不便,这也是perl的程序一换空间脚本就容易出错的一个主要原因,很多是路径问题没处理好,造成 use 或require找不到文件。 实际情况比上面还要复杂,再加上虚拟目录,更乱。。。我只是说了一部分 |
longnetpro 回复于:2003-12-13 23:27:37 |
所以嘛,幸好是PHP,不是PERL。 |
夜猫子 回复于:2003-12-14 00:14:23 |
python也有类似的问题,需要以sys.path.append的形式来加上模块的路径,但是已经比perl的方便许多。
还是php的require、include最方便。 |
jhsea3do 回复于:2003-12-14 16:51:21 |
[code:1:7c6dedf8cf]
/*index.php*/ $webapp_home = "./"; $phpExt = "php"; /*path.inc.php*/ $webapp_path1 = "somewhere1/"; $webapp_path2 = "somewhere2/"; e.g. require($webapp_home . $webapp_path . $FileName . '.' . $phpExt); ...... [/code:1:7c6dedf8cf] 基本上大点的程序都是这么做的! |
夜猫子 回复于:2004-03-06 22:16:03 |
我现在完全使用longnetpro的方法了,非常好用,赞!其实和phpbb的那种每页声明$root_path差不多,但是更加的容易维护。 |
dualface 回复于:2004-03-08 23:41:24 |
我也在最近的一个项目里用上了,非常方便的说! |
syshome 回复于:2004-04-21 00:36:51 |
反反复复看了若干次,今天终于有些懂了。
这的确是一个困惑人的问题。 |