読み込み中...

PHPの相対パス、もう迷わない!現役エンジニアが教える6つの実践テクニック

PHPの相対パスの理解と活用方法を解説する記事のイメージ PHP
この記事は約6分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

「相対パスって難しそう…」

なんて思っているPHPエンジニアの方は多いのではないでしょうか?

これ読んでおけば相対パスには困りません!

この記事では、現役エンジニアの私が実践的なコード例を交えながら、相対パスの基礎から応用まで徹底解説します。

●PHPと相対パスの基本

相対パスとは、簡単に言えば「今いる場所からの道順」です。

例えば、あなたが友達に自分の家までの道順を教えるとき、「駅から北に5分」というように説明するでしょう。

PHPの相対パスも根本的には全く同じと思っていいでしょう。

●基本の “き” から始めよう!

現場でよくある場面から、相対パスの使い方を見ていきましょう。

案件に入ったばかりのとき、まず目にするのがこんなコードです。

○サンプルコード1:PHPでの基本的な相対パスの使い方

PHPでの相対パスの基本的な使い方を見てみましょう。

次のコードでは、現在のディレクトリ内にあるファイル”example.txt”を開いています。

<?php
$handle = fopen("example.txt", "r");
?>

このサンプルコードでは、fopen関数を使って、現在のディレクトリにある”example.txt”という名前のファイルを開いています。

現場でよくあるケースとして例を挙げてみました。

configファイルの読み込みなど、同じディレクトリにあるファイルを開くときによく使用します。

🔍 ここがポイント!

  • パスの先頭に「/」や「./」をつけない場合、自動的に現在のディレクトリを指します
  • Windows環境でも「\」ではなく「/」を使うのがベストプラクティス

○サンプルコード2:PHPでのディレクトリ間の移動

次に、PHPでのディレクトリ間の移動方法をお伝えします。

このサンプルコードでは、親ディレクトリに移動してから別のディレクトリ”test”内の”example.txt”を開いています。

<?php
$handle = fopen("../test/example.txt", "r");
?>

この例では、「..」を使って親ディレクトリに移動し、「/test/」を使ってその下のtestディレクトリに移動し、「example.txt」を開いています。

これも、共有のライブラリやテンプレートファイルにアクセスする際によく使うので、覚えておきましょう!

🔍 ここがポイント!

  • ..は親ディレクトリを表します
  • ../../のように、複数階層上に移動することも可能です
  • パスの区切りは必ず「/」を使いましょう

●相対パスの応用例

それでは、相対パスの応用例を見てみましょう。

ここでは、画像の読み込みとファイルのインクルードについて説明します。

○サンプルコード3:PHPでの画像の読み込み

PHPで相対パスを使って画像を読み込む方法を見てみましょう。

このサンプルコードでは、”images”ディレクトリ内の”example.jpg”という画像を読み込んでいます。

<?php
$image = imagecreatefromjpeg("images/example.jpg");
?>

このコードでは、「images/」を使ってimagesディレクトリに移動し、「example.jpg」を読み込んでいます。

🔍 ここがポイント!

  • 画像ファイルは専用ディレクトリにまとめて管理するのが一般的
  • アップロードされた画像の処理でよく使うパターンです

○サンプルコード4:PHPでのファイルのインクルード

また、PHPでは相対パスを使って別のPHPファイルをインクルードすることもできます。

次のサンプルコードでは、”includes”ディレクトリ内の”header.php”というファイルをインクルードしています。

<?php
include("includes/header.php");
?>

このサンプルコードでは、「includes/」を使ってincludesディレクトリに移動し、「header.php」をインクルードしています。

🔍 ここがポイント!

  • 共通部品(ヘッダー、フッターなど)は includes ディレクトリにまとめる
  • requireinclude の使い分けも重要です
    • require -> 必須ファイルの読み込み(エラー時は処理停止)
    • include -> オプションファイルの読み込み(エラー時は警告のみ)

●相対パスの注意点と対処法

相対パスを使用する際の主な注意点は、存在しないパスを指定するとエラーが発生する可能性があることです。

これは、正しくないディレクトリ名やファイル名を指定した場合、または必要なファイルやディレクトリが移動または削除された場合に起こります。

そこで、PHPではエラーハンドリングを行うことで、このような問題を予防または対処することができます。

○サンプルコード5:PHPでのエラーハンドリング

エラーハンドリングの一例として、ファイルが存在するかどうかを確認する方法を見てみましょう。

次のサンプルコードでは、file_exists関数を用いて、指定したパスのファイルが存在するかを確認しています。

<?php
$file_path = "example.txt";

if (file_exists($file_path)) {
    $handle = fopen($file_path, "r");
} else {
    echo "ファイルが存在しません: $file_path";
}
?>

このコードでは、まず変数$file_pathに開きたいファイルのパスを設定しています。

次に、file_exists関数を使ってファイルが存在するかどうかを確認しています。

ファイルが存在すれば、そのファイルを開きます。存在しない場合は、エラーメッセージを表示します。

現場ではファイルパスのタイプミスや、ファイルの権限設定の問題、サーバー移行時のパス違いなどのミスも気をつけるようにしておきましょう!

●相対パスのカスタマイズ

また、PHPでは動的にパスを生成することで、さらに柔軟なファイル管理が可能になります。

○サンプルコード6:PHPでのパスの動的生成

次のサンプルコードでは、dirname(__FILE__)を使って現在のスクリプトのあるディレクトリを取得し、その後ろに特定のファイルへのパスを連結しています。

<?php
$file_path = dirname(__FILE__) . "/example.txt";

if (file_exists($file_path)) {
    $handle = fopen($file_path, "r");
} else {
    echo "ファイルが存在しません: $file_path";
}
?>

この例では、dirname(__FILE__)を使って現在のスクリプトが存在するディレクトリのパスを取得し、その後ろに”/example.txt”を連結して、絶対パスを生成しています。

これにより、スクリプトの実行場所に関係なく、同じディレクトリ内の”example.txt”を開くことができます。

🔍 上級者向けTips

  • __DIR__ 定数を使うとより簡潔に書けます(PHP 5.3以降)
  • 設定ファイルでベースパスを管理するのも良い方法です

まとめ

ここまで見てきた通り、相対パスは現場で必須の知識です。

基本をしっかり押さえて、徐々に応用的な使い方もマスターしていきましょう。

この記事で紹介した方法を使えば、相対パスの扱いにもっと自信が持てるはずです。

実際のプロジェクトでぜひ活用してみてください!