最新版本的PHP有一个文件名缓存,用于了解文件的真实路径,并且require_once()和include_once()可以利用它。您可以在php.ini中设置一个值来设置缓存的大小,但我不知道如何判断大小应该是多少。默认值为16k,但我看不出有多少缓存在使用。文档含糊不清:DeterminesthesizeoftherealpathcachetobeusedbyPHP.ThisvalueshouldbeincreasedonsystemswherePHPopensmanyfiles,toreflectthequantityofthefileoperationsperformed.是的
做这样的事情是不是一种感觉$dir=realpath(dirname(__FILE__));//orforphp5.3+:$dir=realpath(__DIR__)或者像DIR和FILE这样的魔术常量总是返回绝对路径,所以realpath是多余的? 最佳答案 您不需要realpath()。__FILE__的文档:Thefullpathandfilenameofthefile.Ifusedinsideaninclude,thenameoftheincludedfileisreturned.SincePHP4.0.2,__FILE__
显然,realpath有很多问题。在PHP5.3.1中,它会导致随机崩溃。在5.3.0及更低版本中,realpath随机失败并返回false(当然是针对相同的字符串),而且它总是在realpath上失败-对相同的字符串进行两次/更多次(当然,它是第一次工作)。此外,它在早期的PHP版本中有很多错误,以至于完全无法使用。好吧……它已经是了,因为它不一致。无论如何,我有什么选择?也许自己重写?这可取吗? 最佳答案 感谢SvenArduwie的代码(pointedoutbyPekka)和一些修改,我构建了一个(希望)更好的实现:/***T
在Linux操作系统上,运行“realpath~/bin”给出正确的路径“/home/user1/bin”。但是当我按如下方式运行它时:cmd:=exec.Command("realpath","~/bin")varoutbytes.Buffercmd.Stdout=&outerr:=cmd.Run()iferr!=nil{panic(err)}fmt.Println("Realapth:",out.String())我遇到了panic:退出状态1。顺便说一句:使用如下命令:cmd:=exec.Command("realpath","--help")我可以获得关于realpath命令的
在Linux操作系统上,运行“realpath~/bin”给出正确的路径“/home/user1/bin”。但是当我按如下方式运行它时:cmd:=exec.Command("realpath","~/bin")varoutbytes.Buffercmd.Stdout=&outerr:=cmd.Run()iferr!=nil{panic(err)}fmt.Println("Realapth:",out.String())我遇到了panic:退出状态1。顺便说一句:使用如下命令:cmd:=exec.Command("realpath","--help")我可以获得关于realpath命令的
我知道可以使用realpath()函数获取文件的绝对路径。但是,根据联机帮助页的BUGS部分,其实现存在一些问题。详情如下:错误避免使用此功能。它被设计破坏了,因为(除非使用非标准的resolved_path==NULL特性)不可能为输出缓冲区resolved_path确定合适的大小。根据POSIX,大小为PATH_MAX的缓冲区就足够了,但PATH_MAX不必是定义的常量,可能必须使用pathconf(3)获得。并且询问pathconf(3)并没有真正帮助,因为一方面POSIX警告pathconf(3)的结果可能很大并且不适合mallocing内存。另一方面,pathconf
我知道可以使用realpath()函数获取文件的绝对路径。但是,根据联机帮助页的BUGS部分,其实现存在一些问题。详情如下:错误避免使用此功能。它被设计破坏了,因为(除非使用非标准的resolved_path==NULL特性)不可能为输出缓冲区resolved_path确定合适的大小。根据POSIX,大小为PATH_MAX的缓冲区就足够了,但PATH_MAX不必是定义的常量,可能必须使用pathconf(3)获得。并且询问pathconf(3)并没有真正帮助,因为一方面POSIX警告pathconf(3)的结果可能很大并且不适合mallocing内存。另一方面,pathconf
我对这个主题进行了很多研究,但没有得到任何实质性的东西。通过标准化/规范化,我的意思是从文件路径中删除所有“..”、“.”、多个斜杠等,并获得一个简单的绝对路径。例如"/rootdir/dir1/dir2/dir3/../././././dir4//////////"to"/rootdir/dir1/dir2/dir4"在Windows上我有GetFullPathName()并且我可以获得规范的文件路径名称,但是对于Linux我找不到任何可以为我做同样工作的API,realpath()在那里,但即使是realpath()也需要文件路径存在于文件系统上才能输出规范化路径,例如如果路径/r
我对这个主题进行了很多研究,但没有得到任何实质性的东西。通过标准化/规范化,我的意思是从文件路径中删除所有“..”、“.”、多个斜杠等,并获得一个简单的绝对路径。例如"/rootdir/dir1/dir2/dir3/../././././dir4//////////"to"/rootdir/dir1/dir2/dir4"在Windows上我有GetFullPathName()并且我可以获得规范的文件路径名称,但是对于Linux我找不到任何可以为我做同样工作的API,realpath()在那里,但即使是realpath()也需要文件路径存在于文件系统上才能输出规范化路径,例如如果路径/r
我有一个基本路径/whatever/foo/和$_GET['path']应该是相对于它的。但是如何在不允许目录遍历的情况下完成此操作(读取目录)?例如。/\.\.|\.\./无法正确过滤。 最佳答案 嗯,一种选择是比较真实路径:$basepath='/foo/bar/baz/';$realBase=realpath($basepath);$userpath=$basepath.$_GET['path'];$realUserPath=realpath($userpath);if($realUserPath===false||strpo