2009-12-31 46 views
1

我在这个地方看到的一个问题是一个大问题:“我必须在路径前面放一个/或者我不能?”PHP:是否有路径规范约定?

对不起,如果这看起来是主观的,但对我的框架来说这是一个重要的问题: 你认为在指定一个时在每条路径的前面放一个“/”更合乎逻辑,或者你认为“/”应该避免前缀?

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

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

+0

我不知道我是否理解你。你的意思是文件路径? – 2009-12-31 18:47:01

回答

4

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

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

如果你给你的路径为/foo/bar/,那么路径就是这样,没有任何前提。

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

+0

但是如果框架执行“root-jailing”并考虑从相同的basedir开始的所有路径,那么它并不重要,是吗? – 2009-12-31 19:00:04

0

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

http://example.com/ + file.php IS http://example.com/file.php = path 
http://example.com + file.php IS http://example.comfile.php = error 
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 */ 
... 

在自己的代码,当你有ommitting的选项或包括斜线,你可以遵循类似的约定:

<?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 

?>