all.
My question is in regards to a problem I'm encountering when trying to add a universal php template for my DOCTYPE section. My DOCTYPE include (aptly entitled doctype.php) lies within the /template directory, and also includes calls pointing to my CSS and JS files that I want to be accessible to all pages.
So the problem is encountered when I try to write the absolute path to these files (the CSS and JS files). Currently, I am trying:
<script type="text/javascript" src="<?php echo $_SERVER['DOCUMENT_ROOT'] . '/file/extension/to/javascript/file.js'; ?>"></script>
and
<link rel="stylesheet" type="text/css" href="<?php echo $_SERVER['DOCUMENT_ROOT'] . 'file/extension/to/css/file.css'; ?>"
I am running the application through WAMP on my localhost. Taking a look a look at the source code, it appears as though the links are pointing to the appropriate files (c:/wamp/www/examplesite/path/to/file/file.ext), and all should be well. BUT it is not...
The JavaScript is not accessible and the Stylesheet is not functioning. I'm at a loss for what to do.
I've also tried: -writing the absolute path without the use of PHP -creating PHP variables to hold the document root and then concatenating the appropriate directory path to access the files.
Any suggestions? And how will this change when I upload the directory structure to my online server vs. my current localhost?
You might want to try $_SERVER['HTTP_REFERER'] instead. It gives you the path you are looking for.
On my local machine, which uses WAMP, I used <?php print_r($_SERVER); ?>
to see what values it gives.
Also, there may be some typos in the snippets. For example, you don't need the leading / in the first example you gave.
For example:
<script type="text/javascript" src="<?php echo $_SERVER['HTTP_REFERER'] . 'file/extension/to/javascript/file.js'; ?>"></script>
<link rel="stylesheet" type="text/css" href="<?php echo $_SERVER['HTTP_REFERER'] . 'file/extension/to/css/file.css'; ?>"></link>
Or since HTTP_REFERER can't be trusted in some case, you may want to create a function that builds the base part of the absolute path.
<?php
function getAddress() {
$protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http';
$filenamepattern = '/'.basename(__FILE__).'/';
return $protocol.'://'.$_SERVER['HTTP_HOST'].preg_replace($filenamepattern,"",$_SERVER['REQUEST_URI']);
}
?>
Then call it like so:
<script type="text/javascript" src="<?php echo getAddress() . 'file/extension/to/javascript/file.js'; ?>"></script>
<link rel="stylesheet" type="text/css" href="<?php echo getAddress() . 'file/extension/to/css/file.css'; ?>"></link>
Of course any kind of resource (JS, CSS, Images, etc.) has to be accessed via http(s) request and therefore it is impossible to directly access them with an absolute path. Think of the security implications of such an approach. So you always have to use web paths relative to your web root directory.
For example:
<script type="text/javascript" src="http://localhost/myproject/media/ja/file.js"></script>
You're pointing to files on your local machine using the file path (ex: C:\some\path\to\file) when you should be using a URL (ex: http://localhost/some/path/to/file). The HTML is parsed by the client's browser so when it attempts to access a path that isn't a URL it can't.
Instead of using $_SERVER['DOCUMENT_ROOT'] you can either use absolute URLs such as
<script type="text/javascript" src="/path/to/my/file.js"></script>
where the "/path" folder is your base web directory, or you can use relative URLs based on whatever the current directory the file is in to which you're including the doctype.php file. I'd recommend not doing the latter as it's a pain in the butt to keep track of.
If you use relative URLs you should have no problems when moving your code to a new host, provided the directory structure remains the same.
You're going about the wrong way of including files in your page, you should be using HTTP URLS instead:
<script type="text/javascript" src="/file/extension/to/javascript/file.js"></script>
Or, if you prefer to use a variable with the host name:
<script type="text/javascript" src="http://<?php echo $_SERVER['HTTP_HOST']; ?>/file/extension/to/javascript/file.js"></script>