【Apache】フリーのホームページサービスのようにhtmlファイルに広告を自動付加させたい

このQ&Aのポイント
  • フリーのホームページサービスのように、htmlファイルに広告を自動的に付加させる方法を探しています。Apacheの設定やモジュールの追加などが必要なのでしょうか?特に、Apache 2.0.63で、httpd.confを編集することができるVPS環境の場合について教えてください。
  • auto_prepend_fileとauto_append_fileディレクティブを使用する方法も試しましたが、メインのphpファイルでのバッファリングの処理やexitの影響などで問題がありました。また、htmlファイルには効果がないようです。そこで、他の方法をご存知の方がいらっしゃれば、教えていただきたいです。
  • ただし、.htaccessファイルが有効な場合には、htmlファイルがphpファイルとして認識されない場合があることに注意してください。この点も解決方法をお教えいただければ幸いです。
回答を見る
  • ベストアンサー

【Apache】フリーのホームページサービスのようにhtmlファイルに広告を自動付加させたい

フリーのホームページサービス(たとえばライブドアのブログ)の場合、 htmlファイルをアップロードして、それをブラウザでみると、 html中のある箇所に自動的にバナーが埋め込まれています。 これはどうやって実現できるのでしょうか? なお、Apache 2.0.63で、 httpd.confをいじれます。 (レンタルサーバのVPS環境) Apacheのアップデートや、モジュールの追加もできます。 apache関係をなんか設定する必要があるのだろうという想像はつきますが・・・ (php なら・・・以下のようにできそうなのですが。。。) //----------------------------------------------------------- ●auto_prepend_file ディレクティブ  (メインファイルの前に自動的に付加されるファイルの名前を 指定します) ●auto_append_file ディレクティブ  (メインファイルの後に自動的に追加されるファイルの 名前を指定します。) を設定し、 auto_prepend_fileで指定したファイルを以下のように: <?php //-----------------------------------------------------------     ob_start(); //----------------------------------------------------------- ?> auto_append_fileで指定したファイルを以下のように: <?php //-----------------------------------------------------------    //ob_get_length 関数は、出力のバッファリングがアクティブでない場合には、FALSE を返します    if( ob_get_length() === FALSE ) {      //エラー      echo "バッファがアクティブでないです。";      exit;    }     $buffer = ob_get_contents();     $pattern = '/(<body[^>]*>)/i';     $replacement = '$1' . '<div>ここに広告バナー!!!</div>';     $replaced_buffer = preg_replace($pattern, $replacement, $buffer);     //バッファを消去し、バッファリングを非アクティブにする     ob_end_clean();     //ブラウザに出力して終了     print $replaced_buffer;     exit; //----------------------------------------------------------- ?> でもこれだと、 ●メインのphpファイルのなかでbufferを扱うときにいろいろめんどいですし、 ●メインのphpファイルでexitをよばれると、auto_append_fileは使用されないそうですし、 ●htmlファイルに対して効果がない・・・phpファイルとして拡張子を認識させれば、効果ありますが・・・  なんか気持ち悪い(<?phpとかくとそこからphp構文になってしまう)   &  「.htaccess」が有効だと、「.htaccess」によって、htmlはphpじゃない、とされてしまうケースがある。 といったかんじです。 //----------------------------------------------------------- ご存じのかた、どうぞ、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

Apache用のモジュールでmod_layoutというのがあります ↓のサイトにインストールの例があります http://www.starwars.ac/2007/06/apache22_mod_layout.html

daisuke_dm
質問者

お礼

ありがとうございます。 まさにこれですね。 あと、OS言ってなかったですね。すみません。 CentOS4.4です。 で、調べてみたところ、 mod_layoutとは@はてなダイアリー http://d.hatena.ne.jp/keyword/mod_layout にCVSの情報があり、 はじめての自宅サーバ構築 Fedora/CentOS - Webページヘッダー及びフッター自動挿入(mod_layout) http://kajuhome.com/modlayout.shtml に、Fedora/CentOS に特化した情報がありました。 上記リンクによると、 Apacheが2.0系か2.2系か(さらには、ディストリによって)導入方法が異なるようです。 そこで、 念のために、 【Apacheが2.0系の場合に限り】、mod_layoutを有効にする。というようにしたいのですが、 そんな設定(apache側で?mod_layout側で?あるいは両方必要?)は可能でしょうか? 【Apacheが2.0系の場合に限り】という意味合いのことをhttpd.confにかければ、すごいラクなのですが・・・ もしご存知でしたら、お教えいただければ幸いです。 また、もしご存じでしたら・・・ content negotiationをしている場合に このモジュールをつかっても、 特に問題はないのでしょうか? あるいは問題があるとしたら、対処方法はご存じないでしょうか? よろしくお願いいたします。

関連するQ&A

  • .htaccessの設定で,auto_prepend_fileを画像に対応させるには。

    今PHPでWebを作成しています。 サーバーはAPACHEで,.htaccessに <IfModule mod_php4.c> php_value include_path ".:./include php_value auto_prepend_file "login.inc" php_value auto_append_file "close.inc" </IfModule> Addtype application/x-httpd-php .html .php .inc .ihtml と書いて,.htaccess以下のディレクトリのphpや.incファイルに対して入るときはauto_prepend_fileを使用してlogin.incを呼ぶようにしています。 これに.gifを加えたいのですが,そのまま, Addtype application/x-httpd-php .html .php .inc .ihtml .gif とするとauto_prependは効くのですが,.gifファイルが文字として認識されます。 .gifに対してauto_prependを効かすにはどうすればいいのでしょうか。 よろしくお願いします。

  • PHPでredeclareのエラーがでるのですが...

    こんにちわ、 現在PHP4でweb作成をしています。それで認証はPHPLIBを使用しているのですが、 「Fatal error: Cannot redeclare class db_sql in /usr/local/apache/phplib-7.4/php/db_pgsql.inc on line 12」 というエラーがでます。 ただ、DB_Sqlというクラスはこのdb_pgsql.incでのみしか使用しておらず(class DB_Example extends DB_Sqlはlocal.inc内で使用しています)、原因が解りません。 おそらく、.htaccess内でprepend.phpをauto_prepend_fileと指定していて、そのprepend.phpのなかで、 (前略) require($_PHPLIB["libdir"] . "db_pgsql.inc"); require($_PHPLIB["libdir"] . "ct_sql.inc"); require($_PHPLIB["libdir"] . "session4.inc"); require($_PHPLIB["libdir"] . "session4_custom.inc"); require($_PHPLIB["libdir"] . "auth4.inc"); require($_PHPLIB["libdir"] . "perm.inc"); require($_PHPLIB["libdir"] . "user4.inc"); require($_PHPLIB["libdir"] . "menu.inc"); require($_PHPLIB["libdir"] . "local.inc"); require($_PHPLIB["libdir"] . "page4.inc"); : (後略) としているために、毎回db_pgsqlがよみこまれるためだとおもいますが、よくわかりません。 質問として漠然としていますが、もしもエラーについてすこしでもなにかしっている方、アドバイスの方、宜しくお願いします。 ちなみにphplib-7.4をインストールしてからかえたのは、 -- .htaccessをかえた(auto_prepend_fileをかえた) -- prepend.phpのdb_mysqlをdb_pgsqlにかえた くらいです。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHPとAPACHEのエラー「Warning: Cannot modify header information」について

    こんばんわ、 現在APACHEとPHPを使用してWEBを作成しています。 PHPLIBを使用して認証頁を作成しようとしているのですが、そのさいに下記のエラーがでます。 Warning: Cannot modify header information - headers already sent by (output started at /home/XXXXXXXXXX/include/login.inc:14) in /usr/local/apache/phplib-7.4/php/session.inc on line 479, 480, 481, 482, 483 です。 ちなみに/home/XXXXXXXXXX/include/login.inc:14には、 1 <?php 2 include ("prepend.php"); 3 page_open( 4 array("sess" => "Example_Session", 5 "auth" => "Example_auth", 6 "perm" => "Example_Perm", 7 "user" => "Example_User")); 8 ?> 9 10 11 12 13 としかなく、14行目はありません。 prepend.phpとsession.incはデータベースをpgslにかえた以外はなにもしておりません。 478 default: 479 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 480 header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 481 header("Cache-Control: no-cache"); 482 header("Cache-Control: post-check=0, pre-check=0", false); 483 header("Pragma: no-cache"); 484 break; となっています。 以前までは、prepend.phpのみを.htaccessのauto_prepend_fileに指定していましたが、その部分をこのlogin.incに指定しなおしただけでこのエラーがでました。 なにがわるいのかよく解りません。なにの設定がわるいのでしょうか。 初歩的な質問ですが、宜しくお願いします。

  • 別プロセス、別ポートで Apache を起動すると、php が実行されない

    別ポートで複数(二つ)の apache を常駐されようとしています。 正常にPHPのページが見れている Apache (以下 A) の設定ファイルの Listen ErrorLog CustomLog のディレクティブを変更したものを別ファイルに保存(以下 B.conf)し、B.conf を設定ファイルとする Apache (以下 B)を起動しました。 二つのプロセスが動いており、B.conf で指定したポートで http アクセスできる事も確認しました。 しかし、php Aから見ることのできる php ファイルが、 Bからでは見れません(ソースが表示されます)。 このような場合における解決策を教えていただけませんでしょうか。

    • 締切済み
    • PHP
  • Apacheで、アクセスさせたくないファイルがある

    PHPで、「データベース接続ファイル」と「main.php」があります。 main.phpからアクセスして、DBの内容を表示するページがあります。 ・DB接続ファイル(database.php) <?php // MDB2 ライブラリの読み込み require_once("MDB2.php"); // エラー発生時の処理 PEAR::setErrorHandling( PEAR_ERROR_CALLBACK, 'handleError' ); function handleError( $error ) { die('エラーが発生しました。管理者までお問い合わせ下さい。'); } // データベースへの接続 $dsn = array( "phptype" => "mysql", "username" => "root", "password" => "", "hostspec" => "localhost", "database" => "test", ); $mdb2 =& MDB2::connect( $dsn, $options ); // 文字コードの指定 $mdb2->setCharset( "utf8" ); ?> ・main.php(DBの内容を表示) require_once("database.php");     ~処理~ 質問: 当然、main.phpからアクセスして、DBの内容を表示します。 アドレスとしては、「http://localhost/main.php」とアクセスするのですが、 「http://localhost/database.php」とアクセスしてもページの遷移が可能です。 この「http://localhost/database.php」にアクセスしソースファイルを見ることが可能で DBへの、接続ユーザー・パスワードがみられてしまうことが問題だと思っています。 この、 「一部ファイルへの直叩き」or「制限」をかけて、直接アクセスできなくなる方法を探しております。 (ただ、別のphpファイルから参照は許しておきたい。main.phpからアクセスできなくなっては意味がないの。) アパッチでどのような設定をすればいいでしょうか。 参考になるページ等をご存知でしたら ご教授お願いします。

    • ベストアンサー
    • PHP
  • ローカルPC上に対象ファイルを自動保存する方法

    Apache+PHP+Windowsの環境です。 サーバー上にある指定ファイルを、クライアントPCのWindowsディレクトリ(フォルダ定数)に自動保存させたいのです。 <a href='指定ファイル'></a>でダウンロードすることはできますが、 自動的にダウンロード先を指定する方法が分かりません。 教えてください。 宜しくお願いします。

    • 締切済み
    • PHP
  • ファイルの読み込み方法について

    サーバファイルなどを読み込む際、PHPではバッファを設けたfopen()、file_get_contents()という2つの方法のどちらかが採用されると思います。 しかし、ファイル内容などを全て取得したい場合、どちらも同じ動作をし、かつfile_get_contents()の方が簡潔な記述になります。 よく何かのサンプルだとfopen()を利用してバッファ指定で全ての内容を取得しているのですが、それに意図はあるのでしょうか? 明確な答えが知りたいです。

    • ベストアンサー
    • PHP
  • 同じPHPの処理を必ず通るようにしたい

    お手上げ状態となってしまったので質問させてもらいました。。 行いたいことは、あるサイトのドキュメントルート下のどのファイル(html,php)がリクエストされた場合でも必ず /hoge.php という phpを通り、フィルタ的な処理が行えるようにしたいという事です。(しかも、CGIとしてではなくモジュールとして) .htaccess でphp_value auto_prepend_file などを使用すればいけそうだというところまでは辿り着いたのですが、問題が二つあり、 ・できればだが、クライアントに出力結果が送出される直前に処理をしたい ・上記設定が制限されているケースがあるかが心配 というものです。 つまり、これ以外に今回やりたいことを満たす方法はないかどうかを知りたいのです。 apache php に詳しい人がいたら是非教えてください! よろしくお願いします! ちなみに環境は様々なWEBサーバのデフォルト環境で動作するようにしたいです。サーバの設定を変更したり、httpd.conf を触ったり、 何かをインストールする必要があったりは無理です・・。(apache以外は考慮する必要はありません)

    • ベストアンサー
    • PHP
  • Emacs Lisp: 関数に引数が渡せない?

    お世話になります。 ----------------------------------------- ; -*- lisp-interaction -*- ; このファイルはtest.elisというファイル名で、そのファイルを開いたバッファで実行 (buffer-name) ;;; ミニバッファに以下のように表示される ;;; "test.elis" (buffer-name "test.elis") ;;; ★引数を与えるとそのバッファ名を返すはず ;;; エラーになる ;;; Debugger entered--Lisp error: (wrong-type-argument bufferp "test.elis") (get-buffer "test.elis") ;;; ミニバッファに以下のように表示される ;;; #<buffer test.elis> (buffer-file-name) ;;; ミニバッファに以下のように表示される ;;; "/home/userName/test.elis" (buffer-file-name "test.elis") ;;; ★引数を与えるとそのバッファのファイル名を返すはず ;;; エラーになる ;;; Debugger entered--Lisp error: (wrong-type-argument bufferp "test.elis") ----------------------------------------- Emacs Lispの勉強として、上のようなファイルを開いて、各関数の括弧綴じ)の後ろでC-x C-eとタイプして実行し、挙動を調べています。 ★をつけたbuffer-nameおよびbuffer-file-name関数は、それぞれ引数を渡したバッファ名、および、そのバッファのファイル名が返ると思われるのですが、実際には上記のようにエラーになります。 これはどうしてでしょうか。 Emacsは23.4.1を使っています。 よろしくお願いします。

  • PHPLIBでのエラー

    こんばんわ, 現在自分のHPをPHPLIBを使用したセッション認証を取り入れようとしているのですが,エラーがでてしまいます。 エラーの内容は, Warning: main(db_pgsql.inc): failed to open stream: No such file or directory in /XXXXXXXXXXX/prepend.php on line 30 Fatal error: main(): Failed opening required 'db_pgsql.inc' (include_path='.:./include:./template') in /XXXXXXXXXXX/prepend.php on line 30 という内容が出ています。 そのprepend.phpの中は, 25 #ORIGINAL 26 $_PHPLIB["libdir"] = ""; 27 28 29 30 require($_PHPLIB["libdir"] . "db_pgsql.inc"); となっています。 また,同ディレクトリにある.htaccessには 3 DirectoryIndex index.php 4 5 <IfModule mod_php4.c> 6 php_value include_path ".:./include:./template" 7 8 php_value auto_prepend_file "prepend.php" 9 </IFModule> 10 11 AddType application/x-httpdphp .php .inc .ihtml となっています。 おそらく初歩的な質問だとは思いますが, よろしくお願いします。

    • ベストアンサー
    • PHP