質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.64%

PHPの共通ヘッダで言語ボタンを押した時、サブディレクトリの中の同名のファイルにリンクさせたい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 190

auau3700

score 6

お世話になります。

現在企業HPを作っておりまして、グローバルナビヘッダとフッタはPHPで共通化しております。
同時に英語版のページも準備しており、ディレクトリ構成としてはルートディレクトリ直下に「en/」というサブディレクトリを作って、その中に日本語版と全く同名のPHPファイルをテキストだけ配置してあります。

しかし、この方法だとヘッダーの「英語」ボタンを押したときに、
〇〇.com/en/index.phpを開いてしまいます。

PHPでの該当リンク部分の記述は以下のようになっております。

<ul class="lang">     <li class="now">JP</li>     <li>/</li>     <li><a href="/en/">EN</a></li> </ul>

これをうまくen/ディレクトリの同名ファイルを参照できるようにする方法はありませんでしょうか??

簡単にググりましたが結局方法について書いているサイトは見つからず・・・
初心者で恐縮ですが質問させていただきます。

何卒よろしくお願い致します。

<追記>
ご指摘がありましたので追記させていただきます。

PHPのバージョンは7を入れております。

質問について補足すると、
共有ヘッダのリンクについて、例えば今〇〇.com/aaa.phpにいるなら、
ヘッダのリンクから〇〇.com/en/aaa.phpに飛びたいという旨です。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2019/02/18 16:04

    もし記事も静的なものなのであれば、WordPress入れて多言語対応したほうがやりやすくなるかもしれません(どのようなスケジュール感でされているか分かりませんし、納期の問題や工数や要件の問題もあるでしょうし。これがベストかと言うと分かりません。)

    キャンセル

  • auau3700

    2019/02/18 16:10

    なるほど、存じませんでした!勉強になります。。
    今後はもっと便利なフレームワークやテンプレートエンジンを検討するように致します。
    質問が具体性に欠けており申し訳ありません。
    意図は「そのファイルをURLとする」ということです。
    例えば日本語のページで〇〇.com/aaa.phpを開いていた場合、ヘッダのリンクから
    〇〇.com/en/aaa.phpにリンクさせたいという旨です。

    PHPのバージョンは7を導入しております。

    キャンセル

  • m.ts10806

    2019/02/18 16:13

    たぶん7.1以上ですよね(7.0は既にサポート終了)
    であればなおさら勿体無いですね・・・。
    現状を解決するだけであれば簡単ですが、私であればまるっと作り直しますね。特にコーポレートサイトはセキュリティ面も考える必要がありますし、テンプレート的な使い方しかしていないのであれば尚更です。
    お問い合わせフォームも必要でしょうし、お問い合わせフォームのようなものは初心者段階で作るにはリスクが高すぎます。

    キャンセル

回答 2

checkベストアンサー

+2

現状を解決したいだけならこう。

<ul class="lang">
    <li class="now">JP</li>
    <li>/</li>
    <li><a href="/en/<?php echo pathinfo($_SERVER["SCRIPT_NAME"],PATHINFO_BASENAME); ?>">EN</a></li>
</ul>


※もちろん作りとしてはあまり好ましくはない

'SCRIPT_NAME'
現在のスクリプトのパス。 スクリプト自身のページを指定するのに有用です。 FILE 定数には、カレント(すなわち読み込まれた)ファイルのパスとファイル名が 含まれます。

要は「現在実行しているスクリプトのファイルパスからファイル名(拡張子付)だけ取り出す」というやり方です。
逆にen→jpにも使えます。

※もし、クエリストリングまで持ってくるならREQUEST_URIの方がいいかもしれませんが。

ただ、既に書いたとおり、コーポレートサイトでセキュリティまで担保する必要があるのは間違いないので、できればフレームワーク、さいあくでもCMS(WordPressなど)での構築しなおしを検討してください。
何か問題があってからでは遅いです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/18 16:25

    非常に迅速かつ的を射た経験者からのアドバイス、非常に勉強になりました。
    XSSを考えると確かに好ましくない解決方法になってしまいますね。
    Webサイトの構築の仕方について考える非常に良い機会になりました。
    ありがとうございました。

    キャンセル

  • 2019/02/18 16:29

    XSSの問題はPHP_SELFの方ではないでしょうか?
    いずれにしてもhtmlspecialchars()をかませば良い話ではありますし、
    昨今、ファイル拡張子がでるようなサイト自体珍しいので(特にPHP)、
    早急に対応は必要と思います。
    おそらく、ご自身が思っているよりも大きな事故になります。

    キャンセル

+2

こういうことかな?

<a href="/en/<?= basename($_SERVER['SCRIPT_FILENAME']) ?>">EN</a>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.64%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる
  • トップ
  • PHPに関する質問
  • PHPの共通ヘッダで言語ボタンを押した時、サブディレクトリの中の同名のファイルにリンクさせたい