| tonera 回复于:2003-12-13 11:44:13
|
加精华啊!PHP版的精华总这么少?其实很多文章即使不加精华也应该保留啊。比如说前段时间的几个论题,都是大家的实际心得,不保留下来太可惜了。建议版主考虑一下,还可以提高老同志发贴的积极性嘛。 :D
[b:afcc144654]要是楼主再贴个实例就更好了。[/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
|
反反复复看了若干次,今天终于有些懂了。
这的确是一个困惑人的问题。
|