Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在regex中识别与根目录匹配的目录级别?_Php_Regex_Pcre - Fatal编程技术网

Php 如何在regex中识别与根目录匹配的目录级别?

Php 如何在regex中识别与根目录匹配的目录级别?,php,regex,pcre,Php,Regex,Pcre,我正在创建一个简单的文件管理器,它扫描目录并列出其中的文件和目录,包括向上的三个点。/。我的“根”目录是E:/wamp/www,我不希望它允许我访问父目录 我正在使用以下正则表达式: (^E\:\/wamp\/www\/)(\.\.\/$|\.\.\/.*?(\.\.\/)+$)|(^E\:\/wamp\/www\/([^\/]+\/)+)(\.\.\/.*?(\.\.\/)+) 为了防止出现以下情况: E:/wamp/www// E:/wamp/www/dir/。// E:/wamp/www

我正在创建一个简单的文件管理器,它扫描目录并列出其中的文件和目录,包括向上的三个点
。/
。我的“根”目录是
E:/wamp/www
,我不希望它允许我访问父目录

我正在使用以下正则表达式:

(^E\:\/wamp\/www\/)(\.\.\/$|\.\.\/.*?(\.\.\/)+$)|(^E\:\/wamp\/www\/([^\/]+\/)+)(\.\.\/.*?(\.\.\/)+)
为了防止出现以下情况:

  • E:/wamp/www//
  • E:/wamp/www/dir/。//
  • E:/wamp/www/dir/subdir/../..//
  • 但我发现也可以做这样的事情:

    • E:/wamp/www/dir/。/dir//
    等等


    如何防止这种情况发生,并在发生时使用正则表达式将其限制为仅
    E:/wamp/www

    您可以使用
    realpath()
    函数:

    从文件中:

    realpath()展开所有符号链接,解析对输入路径中/、/../和额外/字符的引用,并返回规范化的绝对路径名


    不要仅仅依靠代码来阻止文件在不应该写入的地方写入,请在目录上设置适当的权限。

    您可以使用
    realpath()
    函数:

    从文件中:

    realpath()展开所有符号链接,解析对输入路径中/、/../和额外/字符的引用,并返回规范化的绝对路径名


    不要只依靠你的代码来阻止文件在不应该写入的地方写入,在你的目录上设置适当的权限。

    这是一个好的解决方案,但我担心它可能会阻止访问子目录的父目录,因为如果我理解正确,它会删除所有
    ,此外,我必须为此使用regex。它不会删除
    。/
    ,而是解析它们。例如:
    realpath('C:\xampp\htdocs\dream\images\..\images\..\images\..\dream')
    给了我
    C:\xampp\htdocs\dream
    ,但你仍然可以这样做:
    realpath('C:\xampp\htdocs\dream\images\..\images\..\images\..\dream\..\dream\..\dream\')
    以及类似的内容否?@user11247237您可以使用此函数的输出并验证它。这是一个很好的解决方案,但我担心它可能会阻止访问子目录的父目录,因为如果我理解正确,它将删除所有
    。/
    ,并且我必须为此使用regex。它不会删除
    。/
    ,它解决了这些问题。例如:
    realpath('C:\xampp\htdocs\dream\images\..\images\..\images\..\dream\..\dream')
    给了我
    C:\xampp\htdocs\dream\images\..\images\..\dream\..\dream\\..\dream\..\code>,但是你仍然可以这样做:
    realpath('C:\xampp\htdocs\dream\images\..\images\..\dream\..\dream\\..\dream\\\\\\..\。