rootFolder
index.php
cssFolder
fontAwesomeFolder
-main.css
-tablet.css
imagesFolder
-image.jpg
includesFolder
-navMain.php
-footer.php
pagesFolder
-contactUs.php
jsFolder
-core.js
I have topology here about my website. Thing is, when I tried to link/include navMain.php in the includesFolder to the contactUs.php in the pageFolder, some other links are messed-up, particularly - css and images files. They don't seems to work.
The issue is the PHP INCLUDE. Alright. It works fine with the index.php. But not with the file in the subdirectories.
How am I going to bring this around. Some said, I'd use config.php. I tried, didn't work. If ever I'm going to use Config.php, what exact codes do I have to place in there and what codes to the other documents.
Thanks for the help!
The problem seems to be that your assets urls are relative to your file location. To avoid this you can always use / to make them relative to your root url and avoid getting 404 errors:
<link rel="stylesheet" type="text/css" href="/cssFolder/main.css" />
<link rel="stylesheet" type="text/css" href="/cssFolder/tablet.css" />
Related
I use XAMPP to create PHP pages and test them locally, but have an issue with the CSS styles not being applied.
When I browse to http://localhost/example/index.php I get the correct PHP page output, but it is unstyled.
When I browse to file:///c:/xampp/htdocs/example/index.php I get the page and it is styled so I know that my CSS links are not the problem.
Does anybody know what's happening and how to fix it?
since you didnt provide any code, I suspect you are using absolute path instead you should use relative path
suppose below is your structure
index.php
css
-- main.css
then you should link you css like
<link type="text/css" href="css/main.css" rel="stylesheet" />
hope it helps
I am baffled by this and I am hoping someone can indicate at a highlevel where my thinking is faulty.
I have a simple PHP programme
- index.php includes a file /common/header.php
- header.php links to the stylesheet.
Issue 1 which I think has baffled other people but I have not seen a reply that answers the question directly.
If I put the style sheet in the root folder (in the same place as index.php), then I can link to the file without a path
<link rel="stylesheet" type="text/css" href= "style.css" />
The point is that the style sheet is relative to index.php NOT the the header.php when it is included in index.php. Is this correct?
Issue 2 is really odd. When i put the file in a folder I can link to it as
<link rel="stylesheet" type="text/css" href= "/common/style.css" />
or
<link rel="stylesheet" type="text/css" href= "common/style.css" />
or
<link rel="stylesheet" type="text/css" href= "styles/style.css" />
and so on.
BUT, this fails if I name the folder css. Anyone?
There is one other point which might be relevant. I am using WAMP and this website is set up with a virtual host.
That is, I have the host set up in the hosts file in Windows/System 32 and in the Apache httpd.vhosts.conf file.
That means that the index.php file is in the root directory and /common/style.css is functionally equivalent to common/style.css.
Any tips for understanding this would be much appreciated. thanks.
First of all, a relative link to a path in html is completely different from one that is in PHP.
in PHP your document root might be /var/www/example/ while in html this could be http://www.example.com/
the client browser that reads the HTML as no idea of where your html is echo'd location wise other then the entry script (in this case : http://www.example.com/index.php)
So if i just refer to
<link rel="stylesheet" type="text/css" href= "/css/style.css" />
and put the stylesheet in /var/www/example/css/style.css then it doens't matter what the location of header.php is and where it is echo'ed, as long as it is in relation the to entry script (index.php in this case)
Issue 1:
Your problem is not one of PHP, but rather of HTML. CSS is applied by the browser after it has received the HTML source. So when your index.php is the script that outputs the content, all resources your reference in your html will be relative to the path this file is in.
Issue 2:
the difference between
<link rel="stylesheet" type="text/css" href= "/common/style.css" /> and <link rel="stylesheet" type="text/css" href= "common/style.css" /> is that version 1 will only work as long as /common resides in the root of your web server. It's an absolute path (starting with /) while version 2 is relative and would also work if your file was /xyz/common/style.css.
I have no idea why this should not work with the name css though. You should probably retry this.
Thanks everyone. That was fast.
To sum up the include problem which I suspect many people have. The path to the stylesheet must be relative to index.php not header.php.
The other problem I have solved. Some files were inadvertently copied into C:/wamp/www, i.e., the normal root. I cleaned all those out and the odd problem of refusing to play with a folder call /css went away. So this is a two fold problem beginning with 1. mess and 2. being something to do with the virtual host not working properly. At least the fog has lifted. Thank you all.
And for DarkMukke, "Anyone?" is phatic. It is a social nicety most likely used by newbies to convey respect when they realise the problem is as much to do with their own fog as anything technical. Or in geek-speak, the newbie is tipping their hat to anyone who will give them 5 mintues to set them straight.
Thanks everyone.
I'm building a PHP based site with this directory structure
index.php
css
style.css
bootstrap.css
includes
header.php
footer.php
bikes
road.php
mountain.php
The Problem
So I'm working on road.php and I obviously need to be able to link to both style.css and bootstrap.css, but when I declare at the start of road.php to include the header.php and footer.php it is like as if it cannot find the stylesheets and the site reverts back to the default 1990s look.
I have also found that any form of link on the page loads a 404. I'm only just starting out with PHP because I need some more power in my sites, but I just can't seem to get my head around the super basic things.
I just don't know what to do and I'm finding myself turning my back on the whole PHP language.
Thanking you in advance,
Stu :)
I can't be certain without seeing the actual content of header.php (in perticular the part where you import the stylesheets), but it sounds like you are using a relative path to your stylesheets. Something like <link rel="stylesheet" type="text/css" href="css/style.css" media="screen" />. This works fine for index.php, but since the other pages are inside the subfolder bikes, they will be looking for the CSS files in yoursite.com/bikes/css.
The solution is to provide an absolute path. Something like this:
<link rel="stylesheet" type="text/css" href="http://yoursite.com/css/style.css" media="screen" />
This way, it doesn't matter if the page is inside a subfolder (or a subfolder of a subfolder) - it will allways look for the CSS file in the right location.
If you are using multiple domain names, or for some other reason you cannot hardcode the domain name, you can prepend a slash (/) to the path as well:
<link rel="stylesheet" type="text/css" href="/css/style.css" media="screen" />
This path is relative to the root of the website, not to the current directory.
i have two files:
1.- root/folder/folder/themes/themeindex.php
and
2.- root/index.php
I want to include themeindex.php in index.php so when you enter to root directory, it will load the theme without taking you to (or showing you) the root/folder/folder/themes/ path.
I'm struggling to find or figure out a way to include the themeindex.php file but keeping the URLs local to its themes folder.
Meaning my
<link rel="stylesheet" type="text/css" href="style.css" />
will remain as that and I won't have to turn it into:
<link rel="stylesheet" type="text/css" href="/folder/folder/themes/style.css" />
I hope this all makes sense.
EDIT:
Hopefuly this explanation of my reasons helps a bit more...
1.- I want the final developer to be able to create themes as intuitively
as possible. So, the URLs remain as simple and intuitive as possible.
2.- I need to include the active theme into the root
directory, so it autoloads when the root is opened.
So if you combne, my reason number one, with my reason number two, then you
might understand how important it is for URLs to remain local and easy to
understand.
Instead of style.css you could request style.php, a file you define that uses imports root/folder/folder/themes/style.css and echoes it outright.
you can give a base tag in your code and point it to: the folder where you have the css files.
http://www.w3schools.com/tags/tag_base.asp
In root .htaccess file, add next lines:
RewriteEngine On
RewriteRule ^style.css$ /folder/folder/themes/style.css [L]
To include the theme file is simple:
include('root/folder/folder/themes/themeindex.php');
The other issue is specific to HTML. HTML needs to have the web path (not the absolute path) to the file so it can load it and use it.
The best you can probably do is something like:
<link
rel="stylesheet"
type="text/css"
href="<?php echo $theme_dir; ?>style.css"
/>
but that will still expose your theme directory. Why are you trying to hide that directory?
Response to comment:
If you take the code I have above and let your developer know how to structure their own content directory. All you would need to do it keep track of something like $active_theme_root and echo that out to load their own customized theme. As far as I know, you cannot set an HTML include directory, so HTML will need to know the web path to all needed assets
Best solution may be to have them use a global stylesheets folder for all themes ("root/stylesheets"). They would then link to this global folder in a relative manor:
<link rel="stylesheet" type="text/css" href="stylesheets/mytheme/style.css" />
<?php
// This is index.php
ob_start();
include 'tem/u.html';
ob_end_flush();
?>
<html>
<!-- This is u.html -->
<link rel="stylesheet" href="style.css" media="screen" />
<body>
<p> abc </p>
</body>
</html>
Now my problem is when i run h.html -> Ok with style.
But when i run index.php -> Ok without style (because now the index.php include style.css, not tem/style.css)
Need a fix
If possible, refer to a domain relative path to the style.css, for example
<link rel="stylesheet" href="/style.css" media="screen" />
If that is not possible, you need to keep track on the page base in some way, which I cannot tell because I do not know enough about your application. But anyway, like
<link rel="stylesheet" href="<?php echo $pageBase; ?>/style.css" media="screen" />
where $pageBase is a variable containing the url to the root of your application.
I'm assuming that the tem directory is supposed to be for some sort of template, and so you don't want it to be directly exposed to the user; rather, you want to be able to include the files so that they're accessible via index.php, possibly with the option of later changing what files are included.
You could create another PHP file called style.php (in the root directory) which would include tem/style.css. You could do this for any other files that your templates used as well — the idea being that each PHP file in the root directory would correspond to a "role" in the template, not a particular template file, so that the template could later be changed without everything needing to be rewritten.
This might get a bit cumbersome if you had a lot of files required by your template, so it might be better to have a single script that could be instructed which file to load (through a $_GET variable). But in that case, you need to be very careful not to allow the user to specify arbitrary files. I'd suggest avoiding this approach until you're more proficient in PHP.
EDIT: On second thought, I'd suggest using a <base> tag in your template HTML file, as suggested in my comment on #gnud's answer.
This has nothing to do with PHP or include. This has to do with your browser, and how URLs are interpreted.
When your browser is pointed at http://xyz.abc/tem/h.html and asked to load "style.css", it tries to load http://xyz.abc/tem/style.css - this is known as a relative url, relative to the current document location.
When your browser is at http://xyz.abc/index.php and is asked to load the stylesheet in the same way, it tries http://xyz.abc/style.css. Maybe you see the problem?
As for a solution, you might use a domain-relative path for the stylesheet ("/tem/style.css").
just always use absolute path to your css file
<link rel="stylesheet" href="/tem/style.css" media="screen" />
that's all