我正在尝试理解一些代码。
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'
),
'/.''') .
'/');