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

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

ただいまの
回答率

87.37%

特定のHTMLファイルでPHPスクリプトを実行させない方法

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,342

score 35

お世話になります。

エックスサーバー上でJavaScriptとPHPを用いたウェブアプリケーションを開発している者なのですが、
特定のHTMLファイル以外のHTMLファイルでPHPスクリプトを実行できるように .htaccess に以下の設定を施しました。

AddHandler x-httpd-php .php .html

# PHPを無効にするファイル
<Files ~ "hoge\.html$">
  RemoveHandler .html
</Files>

ただし、 hoge.html は underscore.js の Template エンジンによって開かれるHTMLファイルとします。

以下は hoge.html

<?php  
  require_once dirname(__FILE__) . '/common.php';
  $commonAction = new CommonAction();
  $title = $commonAction -> GetTitle();
?>
<html>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
  <meta property="type" content="article">
  <link rel="alternate" hreflang="ja" href="http://ja.example.com/" />
  <head>
    <title><?php echo $title; ?></title>
    <script type="text/javascript" src="common.js"></script>
  </head>
  <body>

    <p><%= text %></p>

  </body>
</html>

以下は Template エンジンを利用している JS コードです。

var template = _.template(getTemplate('hoge')); // ajax を利用して引数に指定したHTMLファイルにGET送信しています。また、拡張子は省略。

template({
  text : document.getElementById('contentEditable'); // <- コンテントエディタブルで編集したHTMLコード
});

// 以下はgetTemplate関数
function getTemplate(filename, extFlag = true, cacheFlag = true) {

  if (!tempCache) { 
    tempCache = {};
  }

  if (!tempCache[filename]) {
    var tempFilename = rootDirectoryPath + directory + 'views/' + filename;
    if (extFlag) {
        tempFilename += '.html';
    }
    var tempString;
    $.ajax({
      type: 'GET',
      url: tempFilename,
      cache: true,
      data: '',
      async: false
    }).done(function (data) {
      tempString = data;
    }).fail(function (data) {
      console.log('<b>getTemplate Error</b> -> ファイル ( ' + filename + ' ) のリードに失敗しました。');
    });
    if (cacheFlag) {
      tempCache[filename] = tempString;
    }
  }

  return tempCache[filename];

}

以下はコンテントエディタブルを利用したエディタの画面です。
コンテントエディタブルを利用したエディタの画面

これで、Templateエンジンによって開かれた hoge.html に記述された PHP スクリプトが実行されないよう
.htaccess に記述しました。

しかし、何故か正規表現やファイル名はあっているはずなのに、 PHPスクリプト が実行されてしまいます。

実行させなくする方法はないでしょうか?

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

check解決した方法

0

回答して頂いた皆様、ありがとうございます。

原因が判明致しました。

当該ファイルをAタグでダウンロードする仕組みだったのですが、Aタグでダウンロードを行うと PHP スクリプトが動作されるようです。

よって、Blobを使う事で解決しました。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

いくつか修正すると私の環境下ではhtmlとして読み込まれましたので方針としては間違ってないです。

■.htaccess

AddHandler x-httpd-php .php .html

# PHPを無効にするファイル
<Files ~ "hoge\.html$">
  RemoveHandler .html
</Files>


私の環境下ではAddHandler application/x-httpd-php .php .html としないと動作しなかったのですが、エックスサーバーでは動作確認済みということですよね。Handlerの設定について詳しくないのですが、ぱっとググるといくつかパターンがあったので気になります。

■Template エンジンを利用している JS コード

template({
  text : document.getElementById('contentEditable'); // <- コンテントエディタブルで編集したHTMLコード
});


この部分エラーが出ていたので、;ではなく,にしました。

■.htacessの位置

  var tempFilename = rootDirectoryPath + directory + 'views/' + filename;


この部分って.htaccessのあるディレクトリのサブディレクトリでしょうか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る