xyph Posted November 26, 2011 Share Posted November 26, 2011 A debate with who? Please keep posts relevant to the information provided and the issue at hand. Nothing about my comment you've quoted has anything to do with the text below it. Using something generic like ROOT is a bad idea, because it makes your code harder to recycle. Naming it something like loginscript_ROOT is probably better because there's less of a chance of accidentally reusing that exact name. You also know exactly WHAT 'root' you're talking about when you're using it. When we're talking about web/document root, file system root, or script root, there's not really a debate. Those aren't naming 'conventions.' They are adjectives used to describe which ROOT we're talking about. Root simply means the top of a folder tree - this is why we use adjectives to help us understand where this folder tree begins. Quote Link to comment Share on other sites More sharing options...
doubledee Posted November 26, 2011 Author Share Posted November 26, 2011 A debate with who? Please keep posts relevant to the information provided and the issue at hand. Nothing about my comment you've quoted has anything to do with the text below it. What are you talking about?! There are multiple people in this thread. It is not just about you and your comments... I am responding to the entire conversation. Using something generic like ROOT is a bad idea, because it makes your code harder to recycle. Naming it something like loginscript_ROOT is probably better because there's less of a chance of accidentally reusing that exact name. You also know exactly WHAT 'root' you're talking about when you're using it. Valid points, except there is one config file for one website in one development area and one production area, so things would never get confused. (My "config" file isn't something that 20 websites use, like maybe is true for you.) When we're talking about web/document root, file system root, or script root, there's not really a debate. Those aren't naming 'conventions.' They are adjectives used to describe which ROOT we're talking about. Root simply means the top of a folder tree - this is why we use adjectives to help us understand where this folder tree begins. So what is the difference between a "Web Root" vs. "Document Root" vs. "File System Root" vs. "Script Root" in what I described above? Debbie Quote Link to comment Share on other sites More sharing options...
kicken Posted November 26, 2011 Share Posted November 26, 2011 So what is the difference between a "Web Root" vs. "Document Root" vs. "File System Root" vs. "Script Root" in what I described above? Web Root and Document Root are the same thing generally. They refer to the location from which your website is served by your webserver. Any file/directory below the web root has a corresponding URL from which it can be accessed. Filesystem root is where your filesystem on your hard drive begins. Such as C:\ on windows, or '/' on linux/unix/mac. Script Root could be whatever you want it to be, it doesn't really have any particular meaning. ----- You can define however many "root" directories as you want, just so long as you know what each one is referencing. That is why they are usually prefixed with some other word and not just 'root'. I usually define an includes root, uploads root, templates root, etc: define('DOCUMENT_ROOT', dirname(dirname(__FILE__))); define('TEMPLATE_ROOT', DOCUMENT_ROOT.DIRECTORY_SEPARATOR.'templates'); define('INCLUDE_ROOT', DOCUMENT_ROOT.DIRECTORY_SEPARATOR.'includes'); define('UPLOADS_ROOT', DOCUMENT_ROOT.DIRECTORY_SEPARATOR.'Uploads'); What you just have to know and understand is that regardless of whether you define your own roots or not will have no effect on how a path is resolved unless you use those root constants in your paths. <?php require('/file.php'); ?> The / there will always refer to the filesystem root. If you want to use a different root, you have to prefix the path with the appropriate root constant: <?php require(INCLUDE_ROOT.'/file.php'); ?> Likewise in HTML. <a href="/index.php"></a> Will always refer to the web/document root. If you wanted some other root you would have to echo it out as a prefix. Quote Link to comment Share on other sites More sharing options...
doubledee Posted November 26, 2011 Author Share Posted November 26, 2011 I think you nailed it, kicken! (And in a polite manner too?!) So what is the difference between a "Web Root" vs. "Document Root" vs. "File System Root" vs. "Script Root" in what I described above? Web Root and Document Root are the same thing generally. They refer to the location from which your website is served by your webserver. So a "Web Root" or "Document Root" is where my files (e.g. .html, .php, etc) physically reside, correct? And it sounds like "Web Root" or "Document Root" would be one of these two for me... '/Users/user1/Documents/DEV/++htdocs/03_MySite/' (Dev) '/var/www/vhosts/MySite.com/httpdocs/' (Production) Right? (Because that is where MAMP and Apache, respectively, find my physical files.) Any file/directory below the web root has a corresponding URL from which it can be accessed. "Below" means "inside of", right? (Like "index.php" and "articles" are inside of my "Web Root"?) Filesystem root is where your filesystem on your hard drive begins. Such as C:\ on windows, or '/' on linux/unix/mac. Okay. Script Root could be whatever you want it to be, it doesn't really have any particular meaning. I didn't follow what others were saying above as to when, where, or why I would need to reference "Script Root"?! (It sounds like my "Web/Document Root" is also my "Script Root"...) You can define however many "root" directories as you want, just so long as you know what each one is referencing. That is why they are usually prefixed with some other word and not just 'root'. I usually define an includes root, uploads root, templates root, etc: define('DOCUMENT_ROOT', dirname(dirname(__FILE__))); define('TEMPLATE_ROOT', DOCUMENT_ROOT.DIRECTORY_SEPARATOR.'templates'); define('INCLUDE_ROOT', DOCUMENT_ROOT.DIRECTORY_SEPARATOR.'includes'); define('UPLOADS_ROOT', DOCUMENT_ROOT.DIRECTORY_SEPARATOR.'Uploads'); What you just have to know and understand is that regardless of whether you define your own roots or not will have no effect on how a path is resolved unless you use those root constants in your paths. <?php require('/file.php'); ?> The / there will always refer to the filesystem root. If you want to use a different root, you have to prefix the path with the appropriate root constant: <?php require(INCLUDE_ROOT.'/file.php'); ?> Okay, so in my former code, I would do this... <!-- Include BODY HEADER --> <?php require_once(ROOT . 'components/body_header.inc.php'); ?> where "ROOT" is defined as either... define('ROOT', ENVIRONMENT === 'development' ? '/Users/user1/Documents/DEV/++htdocs/03_MySite/' : '/var/www/vhosts/MySite.com/httpdocs/'); Likewise in HTML. <a href="/index.php"></a> Will always refer to the web/document root. If you wanted some other root you would have to echo it out as a prefix. Here is a key thing that I keep missing in everyone's comments... What do you call either of these... 'http://local.dev3/' 'http://www.MySite.com/'); Above you said that the "Web Root" and "Document Root" describe where my files physically reside. So what are these URLs/Paths called? Debbie Quote Link to comment Share on other sites More sharing options...
kicken Posted November 26, 2011 Share Posted November 26, 2011 What do you call either of these...[/b] 'http://local.dev3/' 'http://www.MySite.com/'); Above you said that the "Web Root" and "Document Root" describe where my files physically reside. So what are these URLs/Paths called? I suppose you could call them the URL Root, though I'm not aware of any particular name for them. Generally you don't have to worry about them too much. If you have a link, such as <a href="/index.php">Home<a> And you access the page from say http://local.dev3/somedir/somefile.php then your browser will take that link URL and generate the url http://local.dev3/index.php If you accessed the page from http://www.mysite.com/somdir/somefile.php then your browser would generate the URL http://www.mysite.com/index.php It will automatically use whatever protocol (http vs https) and domain (www.mysite.com vs local.dev3) that you used when you requested the page containing the link. You almost never have to include that information in your links (and probably shouldn't generally) unless you need to force a particular protocol or domain name. Like you might use a full absolute url in a <form action=""> tag to send the user to a https url instead of a http url. Quote Link to comment Share on other sites More sharing options...
Philip Posted November 27, 2011 Share Posted November 27, 2011 Good explanation kicken, just a quick side note, It will automatically use whatever protocol (http vs https) and domain (www.mysite.com vs local.dev3) that you used when you requested the page containing the link. You almost never have to include that information in your links (and probably shouldn't generally) unless you need to force a particular protocol or domain name. Like you might use a full absolute url in a <form action=""> tag to send the user to a https url instead of a http url. However, do note that src objects (such as for image tags, script tags, style tags, etc.) will need to include the correct protocol when you're using an absolute URL. You can get around this by prefixing your URL with // instead of http:// or https:// as seen below: <script src="//domain.com/file.foo"> Quote Link to comment Share on other sites More sharing options...
xyph Posted November 27, 2011 Share Posted November 27, 2011 Using something generic like ROOT is a bad idea, because it makes your code harder to recycle. Naming it something like loginscript_ROOT is probably better because there's less of a chance of accidentally reusing that exact name. You also know exactly WHAT 'root' you're talking about when you're using it. Valid points, except there is one config file for one website in one development area and one production area, so things would never get confused. (My "config" file isn't something that 20 websites use, like maybe is true for you.) Why ask for advice if you already know you're right? Quote Link to comment Share on other sites More sharing options...
doubledee Posted November 27, 2011 Author Share Posted November 27, 2011 Using something generic like ROOT is a bad idea, because it makes your code harder to recycle. Naming it something like loginscript_ROOT is probably better because there's less of a chance of accidentally reusing that exact name. You also know exactly WHAT 'root' you're talking about when you're using it. Valid points, except there is one config file for one website in one development area and one production area, so things would never get confused. (My "config" file isn't something that 20 websites use, like maybe is true for you.) Why ask for advice if you already know you're right? You have an attitude problem. If you can't be pleasant them post somewhere else... Quote Link to comment Share on other sites More sharing options...
doubledee Posted November 27, 2011 Author Share Posted November 27, 2011 What do you call either of these...[/b] 'http://local.dev3/' 'http://www.MySite.com/'); Above you said that the "Web Root" and "Document Root" describe where my files physically reside. So what are these URLs/Paths called? I suppose you could call them the URL Root, though I'm not aware of any particular name for them. Generally you don't have to worry about them too much. How about the ServerName or HostName? That is what my tutorial on setting up my Virtual Hosts implied... Debbie Quote Link to comment Share on other sites More sharing options...
kicken Posted November 27, 2011 Share Posted November 27, 2011 How about the ServerName or HostName? The terms hostname/servername typically are used to refer to the domain name. The http: part is the protocol or scheme. http://www.example.com/somepath/somefile.php http = Protocol / Scheme. http, https, ftp, etc www.example.com = Host name / Domain name / Server name /somepath/somefile.php = Path I am not aware of any specific term that is commonly used for the combination of the protocol and hostname. If I had to create a variable for it I would probably name it BASE_URL or similar. Quote Link to comment Share on other sites More sharing options...
doubledee Posted November 27, 2011 Author Share Posted November 27, 2011 kicken, So if I re-labeled my "Config" file, would the following be consistent with what you've been talking about... <?php define('ENVIRONMENT', 'development'); //define('ENVIRONMENT', 'production'); // Web Root/Document Root define('WEB_ROOT', ENVIRONMENT === 'development' ? '/Users/user1/Documents/DEV/++htdocs/03_MySite/' : '/var/www/vhosts/MySite.com/httpdocs/'); // Base URL define('BASE_URL', ENVIRONMENT === 'development' ? 'http://local.dev3/' : 'http://www.MySite.com/'); // Secure Base URL define('SECURE_BASE_URL', ENVIRONMENT === 'development' ? 'http://local.dev3/' : 'https://www.MySite.com/'); ?> Debbie Quote Link to comment Share on other sites More sharing options...
kicken Posted November 27, 2011 Share Posted November 27, 2011 Looks ok to me. Quote Link to comment Share on other sites More sharing options...
MasterACE14 Posted November 27, 2011 Share Posted November 27, 2011 Using something generic like ROOT is a bad idea, because it makes your code harder to recycle. Naming it something like loginscript_ROOT is probably better because there's less of a chance of accidentally reusing that exact name. You also know exactly WHAT 'root' you're talking about when you're using it. Valid points, except there is one config file for one website in one development area and one production area, so things would never get confused. (My "config" file isn't something that 20 websites use, like maybe is true for you.) Why ask for advice if you already know you're right? You have an attitude problem. If you can't be pleasant them post somewhere else... Volunteer staff and members are helping you out of their own precious free time, no one here HAS to help you. A little respect goes a long way. Anyway after having my mind explode by the time I had read up to page 2....... You could use this: define('BASEPATH', array_pop(explode(DIRECTORY_SEPARATOR,realpath(dirname(__FILE__))))); echo BASEPATH; place that in your top level index.php file. So with this... 05_Debbie components body_footer.inc.php body_header.inc.php css _layout.css _main.css components.css top_menu.css index.php // goes in here pages article_index.php howto_index.php BASEPATH would hold the value '05_Debbie' You can include files like so... // include body_footer.inc.php from article_index.php include_once(BASEPATH . '/body_footer.inc.php'); // include body_header.inc.php from howto_index.php include_once(BASEPATH . '/body_header.inc.php'); // etc etc May need to be tweaked depending on your setup. Quote Link to comment Share on other sites More sharing options...
doubledee Posted November 27, 2011 Author Share Posted November 27, 2011 MasterACE14, That is an interesting solution. But what did you think about my updated Config file in "Reply #35"?? (kicken blessed it!) Debbie Quote Link to comment Share on other sites More sharing options...
MasterACE14 Posted November 27, 2011 Share Posted November 27, 2011 That works fine too, it's really just a matter of preference. Quote Link to comment Share on other sites More sharing options...
doubledee Posted November 27, 2011 Author Share Posted November 27, 2011 That works fine too, it's really just a matter of preference. I like my slightly less fancy, more manual solution for now. (It helps keep me "honest" and make sure I know where things are going!) But I like how you used PHP functions to do the work for me. Some day when I become a more seasoned PHP person, then I'll likely switch over. However, but to the spirit of my original question... Should I be using my "Config" file with my PHP Includes, or should I *just* be using Relative Path references as some have said? I suppose if I have a simple site structure, things don't change too much, and I don't have too many layers, then typing... <?php require_once('../components/content_sticky.inc.php'); ?> ...isn't that big of a deal?! Debbie Quote Link to comment Share on other sites More sharing options...
MasterACE14 Posted November 27, 2011 Share Posted November 27, 2011 Should I be using my "Config" file with my PHP Includes, or should I *just* be using Relative Path references as some have said? I suppose if I have a simple site structure, things don't change too much, and I don't have too many layers, then typing... <?php require_once('../components/content_sticky.inc.php'); ?> ...isn't that big of a deal?! Shouldn't really have config.php with a heap of includes in it(if that's what you mean?), a config file is usually for variables, arrays or constants that are used in various parts of the website such as database connection details. Relative path references is the way to go, and if you're worried about having to copy/paste includes into multiple files(that's what I think you're talking about?), then you may want to develop some kind of template system. Quote Link to comment Share on other sites More sharing options...
doubledee Posted November 27, 2011 Author Share Posted November 27, 2011 Should I be using my "Config" file with my PHP Includes, or should I *just* be using Relative Path references as some have said? Shouldn't really have config.php with a heap of includes in it(if that's what you mean?), a config file is usually for variables, arrays or constants that are used in various parts of the website such as database connection details. My "config" file is the one in Reply #35... <?php define('ENVIRONMENT', 'development'); //define('ENVIRONMENT', 'production'); // Web Root/Document Root define('WEB_ROOT', ENVIRONMENT === 'development' ? '/Users/user1/Documents/DEV/++htdocs/03_MySite/' : '/var/www/vhosts/MySite.com/httpdocs/'); // Base URL define('BASE_URL', ENVIRONMENT === 'development' ? 'http://local.dev3/' : 'http://www.MySite.com/'); // Secure Base URL define('SECURE_BASE_URL', ENVIRONMENT === 'development' ? 'http://local.dev3/' : 'https://www.MySite.com/'); ?> Ummm.... see your own Reply #37... You can include files like so... // include body_footer.inc.php from article_index.php include_once(BASEPATH . '/body_footer.inc.php'); // include body_header.inc.php from howto_index.php include_once(BASEPATH . '/body_header.inc.php'); // etc etc So your "BASEPATH" would be my "WEB_ROOT" above. Debbie Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.