PHP:是否有路径规范约定?

时间:2009-12-31 18:41:36

标签: php

我在整个地方看到的一个问题是一个大问题:“我必须把/放在路径前面,还是我不能?”

很抱歉,如果这似乎是主观的,但对于我的框架,这是一个重要的问题: 你是否认为在指定一个路径时在每个路径前加上“/”更合乎逻辑,或者你认为应该避免使用“/”前缀?

或者我应该检查第一个字符是否为“/”,如果不是,请自动添加?

上下文:采用路径的框架函数。

3 个答案:

答案 0 :(得分:4)

如果在每条路径前放置一个/,那么这些路径是绝对的。没有它,它们是相对的。不知道你在追求什么,但这就是开始时的/

例如,如果您当前的目录是/var/www/html/,并且您将路径指定为foo/bar/,则路径将变为/var/www/html/foo/bar/

如果您将路径设为/foo/bar/,那么路径就是这样,没有任何前缀。

所以正斜杠只是你从哪里查看文件的问题,如果你使用路径作为函数的参数,你可能希望将它们作为相对传递(到框架目录)

答案 1 :(得分:1)

最好的约定是你是否想要相对或绝对的道路。通常,前导'/'指定从文件系统的根目录或网站的根目录的绝对路径。

获取一个示例CSS文件,位于mysite.com/files/css/info.css

...
background-image:url('/bg.png'); /* absolute - use mysite.com/bg.png */
background-image:url('bg.png');  /* relative to info.css - use mysite.com/files/css/bg.png */
...

在您自己的代码中,当您可以选择省略或包含前导斜杠时,您可以遵循类似的约定:

<?php

// $uri - the relative/absolute uri to link to, ie /posts or 'show/id'
// $text - the text link
function link_to($uri, $text) {

  if ($uri[0] == '/') {
    // assume absolute
    $href = $uri;
  } else {
    // assume relative to current uri; remove last segment and replace
    $uri_segments = get_uri_segments();
    array_pop($uri_segments);
    array_push($uri_segments, $uri);
    $href = implode('/', $uri_segments);
  }

  return "<a href=\"$href\">$text</a>";
}

//
// elsewhere, assuming current URL is 'myself.com/users'
//

// relative link to 'create'
link_to("create", "Show User"); // mysite.com/users/create

// absolute link to '/products'
link_to("/products", "Products"); // mysite.com/products

?>

答案 2 :(得分:0)

我喜欢它,因为它可以更容易地添加文件,并避免混淆总是拥有它。例如:

http://example.com/ + file.php IS http://example.com/file.php = path
http://example.com + file.php IS http://example.comfile.php = error