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

时间:2013-11-14 01:59:58

标签: php opencart dirname

我想了解一些代码。

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'在那边是什么意思?

我真的很困惑。

3 个答案:

答案 0 :(得分:0)

你有两个嵌套的rtrims - 嵌套rtrim的结果是外部rtrim的第一个参数。最终字符串由'http://',$ _SERVER ['HTTP_HOST'],两个嵌套的rtrims和'/'

组成

答案 1 :(得分:0)

rtrim是嵌套的。他们正在履行双重职能。

此函数的第一部分:rtrim(dirname($_SERVER['SCRIPT_NAME']), 'install')正在从该特定脚本所在的文件夹名称的右侧剥离“install”一词。 IE浏览器。如果opencart.php位于名为“opencart-install”的文件夹中,则此文件夹名称将缩减为“opencart - ”。

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

所以,一旦你弄明白你的名字是什么,你应该能够从那里开始学习逻辑。

答案 2 :(得分:0)

这不是好代码。让我们格式化它们。

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'
            ),
            '/.\\') .
    '/');