外部ファイル (css、js)内でPHPを実行する方法です。
厳密には、cssやjsファイルの拡張子をphpに変更して、そのPHPファイルをcssやjsとして読み込む方法になります。
サンプル
以下のようなサンプルを作成しました。
■ サンプル /css └ styles.php /js └ alert.php index.html
通常styles.cssのところをstyles.phpに、alert.jsのところをalert.phpに変更しています。
index.htmlの中身は、
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>サンプル</title> <link rel="stylesheet" href="css/styles.php"> <script src="js/alert.php"></script> </head> <body> <h1>テストです</h1> </body> </html>
このようになっており、通常の外部ファイルと同じようにlinkタグ、scriptタグでPHPファイルを読み込みます。
styles.phpの中身は、
<?php header('Content-Type: text/css; charset=utf-8'); ?> <?php $color = 'skyblue'; ?> h1 { color: <?php echo $color; ?>; }
このようになっており、1行目でstyle.phpをcssとして読み込むことを指示しています。
変数colorに skyblue を代入し、h1の色を skyblue にしています。
alert.phpの中身は、
<?php $color = "skyblue"; ?> alert( 'h1タグの色は ' + '<?php echo $color; ?> ' + 'です。' );
このようになっており、cssとは違い、ファイルのタイプを宣言する必要がありません。
変数colorに skyblue を代入し、アラートで表示しています。
パラメータで受け取った値をセッションを使って外部ファイルに渡す
外部ファイル内で直接 $_GET でパラメータを受け取ることはできませんので、セッションを使用する形になります。
indexでセッションを使用するので拡張子はphpです。
index.phpの中身は、
<?php session_start(); $_SESSION["color"] = $_GET["color"]; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>サンプル</title> <link rel="stylesheet" href="css/styles.php"> <script src="js/alert.php"></script> </head> <body> <h1>テストです</h1> </body> </html>
このようになっており、セッションに skyblue を保存しています。
styles.phpの中身は、
<?php header('Content-Type: text/css; charset=utf-8'); ?> h1 { color: <?php echo htmlspecialchars($_SESSION["color"], ENT_QUOTES, "UTF-8"); ?>; }
このようになっており、悪意のある値が渡される可能性があるので、エスケープを行う必要があります。
alert.phpも同じく、
<?php session_start(); ?> alert( 'h1タグの色は ' + '<?php echo htmlspecialchars($_SESSION["color"], ENT_QUOTES, "UTF-8"); ?> ' + 'です。' ); <?php unset($_SESSION["color"]); ?>
このようになっており、エスケープを行う必要があります。
使い終わった $_SESSION[“color”] は unset で破棄しておきます。
(index.php で unset を行うと外部ファイル内で $_SESSION[“color”] が使用できなくなるようです)
最後に・・・
以上、外部ファイル (css、js)内でPHPを実行する方法(厳密には、cssやjsファイルの拡張子をphpに変更して、そのPHPファイルをcssやjsとして読み込む方法)でした。
使用するシーンはあまりないとは思いますが、こういった方法があることを知っておくことは悪くないかと思います。