Search code examples
phphtmlcssimagesrc

Using dirname with img src to display a logo on apache webserver


So here is the structure of my basic practice website

/opt
    /lampp
        /htdocs
            /web
                /img
                    logo.png
                /tests
                    HomeView_test.php
                /view
                    HomeView.class.php
                index.php

My initial problem was that I am using auto loading and running HomeView.class.php from index.php and HomeView.class.php from HomeView_test.php would not load my logo image on both if I only hard coded the path from one. So for example if I hard coded the path to work when called from index.php it would not also work when called from HomeView_test.php

Here is what is in HomeView.class.php

<?php
class HomeView {
  public static function show() {  
    $pathDir = dirname(__FILE__);
    $fileName = $pathDir . DIRECTORY_SEPARATOR . "../img/logo.png";
?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <title>Website</title>
    </head>
    <body>
        <header>
            <img src="<?php echo $fileName;?>" alt="Logo" width="150" height="100"/>
            <nav>
                <ul>
                    <li>
                        <a href="#">About</a>
                    </li>
                    <li>
                        <a href="#">Contact Us</a>
                    </li>
                </ul>
            </nav>
        </header>
        <footer>
            <p>
                &copy 2015 Peeps, Inc. All Rights Reserved.
            </p>
        </footer>
    </body>
</html>
<?php
  }
}
?>

I thought that the the php echo of the path inside the src would work but it is still not loading the logo image.

Hard coding in img/logo.png only works when in index.php it calls HomeView.class.php but when I call it from HomeView_test.php it needs ../img/logo.png to show the logo

Does anyone have any idea as to what I am doing wrong? Maybe the img src and php syntax is off since I've never tried using php in conjunction with img src before.


Solution

  • In this case, when you want to show an image from a web page, regardless of what backend language you are using, you need to provide the public server path to the media.

    So when you have this statement:

    <img src="<?php echo $fileName;?>" alt="Logo" width="150" height="100"/>
    

    The variable $filename ought to look something like /img/logo.png when outputted in HTML.

    Your goal is to provide the public web location of the url, not the server location.