0

我试图理解一些代码。

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'

我真的很困惑。

4

3 回答 3

0

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

于 2013-11-14T02:08:58.387 回答
0

rtrims 是嵌套的。他们正在执行双重功能。

此功能的第一部分:rtrim(dirname($_SERVER['SCRIPT_NAME']), 'install')将“安装”一词从该特定脚本所在的文件夹名称的右侧剥离。IE。如果opencart.php驻留在名为“opencart-install”的文件夹中,则此文件夹名称将缩减为“opencart-”。

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

所以,一旦你弄清楚你的目录名是什么,你应该能够从那里完成逻辑。

于 2013-11-14T02:09:25.400 回答
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'
            ),
            '/.\\') .
    '/'); 
于 2013-11-14T02:39:14.590 回答