对使用dirname和rtrim感到困惑 - PHP代码(OpenCart)


Confused about use of dirname and rtrim - PHP code (OpenCart)

我正在尝试理解一些代码。

define('HTTP_OPENCART', 'http://' . $_SERVER['HTTP_HOST'] . rtrim(rtrim(dirname($_SERVER['SCRIPT_NAME']), 'install'), '/.'''). '/');

我无法理解的是:

A) rtrim:根据 PHP 手册,rtrim 函数应该只接收两个参数。我认为第一个是dirname($_SERVER['SCRIPT_NAME']
第二个是哪个?这/.''??

考虑到手册上说的With .. you can specify a range of characters,是否有可能在第二个参数中具有它 请注意,它谈论的是两个句号(而不是一个,因为它在代码中)。

那么代码的最后一部分呢? '/'

B) dirname:根据 PHP 手册,这个函数应该只接收一个参数,在这种情况下是($_SERVER['SCRIPT_NAME'])。那边,'install'是什么意思?

我真的很困惑。

您有两个嵌套的 rtrim - 嵌套 rtrim 的结果是外部 rtrim 的第一个参数。最后一个字符串由 'http://'、$_SERVER['HTTP_HOST']、两个嵌套的 rtrim 和 '/' 组成

rtrim 是嵌套的。它们正在执行双重功能。

此函数的第一部分:rtrim(dirname($_SERVER['SCRIPT_NAME']), 'install')从此特定脚本所在的文件夹名称的右侧剥离"安装"一词。嘿嘿如果opencart.php驻留在名为"opencart-install"的文件夹中,则此文件夹名称将简化为"opencart-"。

函数的第二部分:rtrim("opencart-", '/.''')使用正则表达式(正则表达式)尝试从目标字符串"opencart-"中删除任何".''"字符。

因此,一旦您弄清楚了您的目录名称是什么,您应该能够从那里完成逻辑。

这不是

好的代码。让我们格式化它们。

define(
    'HTTP_OPENCART',
    'http://' . $_SERVER['HTTP_HOST'] .     // 5. result of concatination would be http://domain.some.com/dir/
        rtrim(                              // 4. removes /, ., ' characters from right and return /dir
            rtrim(                          // 3. removes i,n,s,t,a,l characters from right and return /dir/
                dirname(                    // 2. should return /dir/install
                    $_SERVER['SCRIPT_NAME'] // 1. returns something like /dir/install/index.php
                ),
            'install'
            ),
            '/.''') .
    '/');