

Windows 10でXAMPPを使用し、PHPのサイトを作っています。

「htdocs」フォルダ直下に「test」フォルダを作り、その中に「firstPage.php」と「secondPage.php」を作りました。  
今はローカル環境のXAMPPで動かしていますが、いつかはサーバーなどに上げたいと思い(セキュリティーの話は一旦置いておいてください)、リンク先のパスを絶対パスで指定しようとしました。  
ところが、firstPageはちゃんと表示されたのですが、そこからsecondPageに絶対パスを用いて移動することができません。  
相対パスを用いれば移動することはできます。  
firstPageのソースコードは次の通りです。

[code]

    <!DOCTYPE html>
    <html>
    
    <head>
      <meta charset="UTF-8">
    </head>
    
    <body>
    
    // これは移動できない
    <?php echo '<a href='.__DIR__.'/secondPage.php>secondPage</a><br />' ?>
    
    // これは移動できる
    <?php echo '<a href=secondPage.php>secondPage</a><br />' ?>
    
    </body>
    
    </html>
    
[/code]

ブラウザでソースを表示するとリンク部分は

[code]

    <a href=C:\xampp\htdocs\test/secondPage.php>secondPage</a><br />
    
    <a href=secondPage.php>secondPage</a><br />
    
[/code]

と表示されていますが、正直この違いがどう影響しているのかが分かりません。  
なんとなく、Apacheが上手く動いてくれていない気はするのですが・・・  
  

追記

ブラウザ上ではリンク部分は両方とも同じように青くなっているのですが、__DIR__を使った方はクリックしても無反応です。

[code]

    <?php echo '<a href='.__DIR__.'/secondPage.php>secondPage</a><br />' ?>
    
[/code]

の「/secondPage.php」を「\secondPage.php」にしても、変化はありませんでした。  
また、includeやrequire_onceでは、__DIR__を使っても読み込めます。  
今のところ、リンクの場合に問題となるようです。


CC BY-SA 4.0
2018-11-12T13:51:56.647
50256
2021-02-10T08:02:30.247
2018-11-13T06:43:32.137
30114
30114
question
php html apache xampp
PHPでリンク先を絶対パスで指定できない


ファイルのパスを表す方法として「相対パス」と「絶対パス」がありますが、これと合わせて「 **ローカル環境**
」と、`http`または`https`などで始まる「 **インターネットアドレス** (=URL)」の違いを意識する必要があります。

`__DIR__`はあくまでローカル環境でのパスを表現する変数なので、Apacheを経由したインターネットアドレスとしての絶対パスを指定するなら`$_SERVER['SERVER_NAME']`を指定してみてください。

[code]

    <a href ="<?php echo 'http://'.$_SERVER{"SERVER_NAME"}.'/secondPage.php'; ?>">secondPage</a>
    
[/code]

ローカルでテストしておりホスト名が"localhost"であるなら、`$_SERVER{"SERVER_NAME"}`にもそのホスト名が入っているはずです。

参考:  
[PHP: $_SERVER -
Manual](http://php.net/manual/ja/reserved.variables.server.php)  
[PHP($_SERVER)サーバー変数一覧と実用例](https://www.flatflag.nir87.com/server-358)


CC BY-SA 4.0
2018-11-13T01:06:29.113
50268
2018-11-13T06:50:53.617
2018-11-13T06:50:53.617
3060
3060
50256
answer


PHPがApacheのDocument Rootを認識しているわけではありません。__DIR__は、ApacheのDocument
Rootをrootとしたパスで表されたディレクトリではなく、お使いのコンピュータのrootディレクトリをrootとし絶対パスで表されたディレクトリです。


CC BY-SA 4.0
2018-11-13T01:37:58.320
50271
2018-11-13T01:37:58.320
30945
50256
answer