PHP版Web拍手を自作しました。

Web拍手。創作物を公開している方は大抵の方が導入されていると思います。自分も「読んだよ」って程度のお気楽ワンクリックを導入したくて各ページに埋め込んでいますが、もっとシンプルなものが欲しくて自作しました。
機能はこんな感じ。

  • PHP製のプログラム。
  • 簡単でシンプル。ファイル数は極力少なく。
  • 一言コメントがなくてもメールを送信する。
  • どのページからの拍手かわかるようにする。
  • 拍手に必要な項目はform内で設定する。
  • サンクスページはプログラムファイルから独立させる

汎用性が低いので配布は予定していませんが、覚書をかねてプログラムソースと使い方を掲載します。

必須条件

  1. PHPが使えるWebサーバー
  2. sendmailが使えるWebサーバー
  3. 送信先のメールアドレス
  4. 初心者を見守る優しいこころ

スクリプトファイル

<?php
/*=1.[ 設定 ]
==============================================================*/
  $to           = "*****@*****.***"; //メール送信先アドレス
  $from         = "*****@*****.***"; // メール送信元アドレス
  $fromname     = "ウェブ拍手"; //メール送信元の名前
  $subject      = "拍手がありました"; // メールの件名
  $thanks       = "thanks.php"; // サンクスページ
  $charset      = "UTF-8";  // 文字コード
/*=設定ここまで===============================================*/

/*=2.[ プログラム処理 ]
==============================================================*/
//formデータを収集
foreach ($_POST as $key => $value) {
  $contents .= "$key:\n$value\n\n";
}
$contents .= "--------------------------------------------------------\n";
  
// 送信者のアクセス元情報
$referer = getenv("HTTP_REFERER");
$contents.=<<<EOM
リファラ:$referer
EOM;

//おまじない
$main = htmlspecialchars($contents);

//送信処理
if($_POST["impression"] != ""){
  mb_language("Ja");
  mb_internal_encoding($charset);
  $mailfrom = "From:" .mb_encode_mimeheader($fromname) ."<$from>";
  mb_send_mail($to,$subject,$main,$mailfrom);

  header("Location: $Thanks");
  }
  else{
  echo "error!!";
}
?>

呼び出し側(サンプル)

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>小説タイトル -章タイトル-</title>
</head>
<body>
<h1>小説タイトル</h1>
<h2>章タイトル</h2>
<div id="novelStory">
  小説本文 
  <!-- /#novelStory -->
</div>
<form method="post" action="webclap.php">
  感想:
  <select name="impression">
    <option value="面白かった" selected="selected">面白かった</option>
    <option value="いまいち">いまいち</option>
    <option value="続きを書いて">続きを書いて</option>
  </select>
  一言:
  <input type="text" size="50" name="message" />
  <input type="submit" value="拍手!" />
</form>
</body>
</html>

使い方

  1. スクリプトファイルのソースを任意の名前で保存する。サンプルではwebclap.phpとしています。
  2. スクリプトファイルの「1.設定」内を自分用のデータに置き換える。サンクスページでphpファイルを指定していますが、htmlファイルでも問題ありません。
  3. サイトにスクリプトファイル(webclap.php)をアップロードする。
  4. 呼び出し元のファイルに<form>~</form>を挿入する。formタグのactionはスクリプトファイルを指定してください。絶対パス(http://~/webclap.php)でも相対パス(../webclap.php)でも問題ありません。

こんなメールが送られてきます

impression:
面白かった

message:
一言メッセージ本文ですよ!

--------------------------------------------------------
リファラ:http://nekoproject.net/novel/contents/fiori/hikari/30.php

上記ではリファラが正常に表示されていますが、リファラは改ざん可能であることを念頭においてください。
設置個所が少ないのであればformタグ内に<input type="hidden" name="setup" value="設置個所名。日本語OK">を入れても問題ありません。小説書きの人で小説の小人さんを導入している人は、テンプレートの変数と連携すれば確実にページ名を取得できます。

スクリプトの簡単な解説

$to           = "*****@*****.***"; //メール送信先アドレス
$from         = "*****@*****.***"; // メール送信元アドレス
$fromname     = "ウェブ拍手"; //メール送信元の名前
$subject      = "拍手がありました"; // メールの件名
$thanks       = "thanks.php"; // サンクスページ
$charset      = "UTF-8";  // 文字コード

to…メールの宛先。省略不可。
from…どこから送られたか、を設定するアドレス。空欄でも大体のサーバーで動作しますが入れておいてください。送信元と同じアドレスでも良いと思います。
fromname…Fromのアドレスの名前。省略可
subject…メールの件名。省略可ですが省略すると迷惑メール扱いになるかも?
thanks…サンキューページ。省略すると拍手後に真っ白な画面になるのでサンクスページは必ず作成してください。
charset…文字コード。拍手呼び出し元の文字コードを指定してください。間違えると文字化けします。

//formデータを収集
foreach ($_POST as $key => $value) {
  $contents .= "$key:\n$value\n\n";
}

フォームのデータを変数にまとめています。
$key:\n$value\n\nとすることで、メール本文で次の表記になります。

name要素名:
name要素の値

// 送信者のアクセス元情報
$referer = getenv("HTTP_REFERER");
$contents.=<<<EOM
リファラ:$referer
EOM; 

リファラ(呼び出し側のURL)を取っています。さっき記載した通りデータは正常に取れない可能性があります。

//おまじない
$main = htmlspecialchars($contents);

いたずら対策。一言メッセージ内にタグが入ってても無効にします。詳細はこちらへ

//送信処理
if($_POST["impression"] != ""){
  mb_language("Ja");
  mb_internal_encoding($charset);
  $mailfrom = "From:" .mb_encode_mimeheader($FromName) ."<$From>";
  mb_send_mail($to,$subject,$main,$mailfrom);

form要素に組んだselectボックスは必ず文字が入る仕組みになっているので、その値が空っぽでなければメールを送信します。これをかまさないとwebclap.phpにアクセスするだけでメール送信ができちゃいます。要は巡回ボットなど、プログラム用の対策だとお考えください。

header("Location: $Thanks");

メール送信が完了したらサンクスページへ飛ばします。

以上。サンクスページの有無は、今後選べるように加工したいところ。
小説の小人さんとの連携は次の記事で掲載します。

蛇足ですが……

管理機能や連続投稿防止機能は設けていません。高機能なウェブ拍手であればWeb Liberty – フリーCGIスクリプト配布サイトweb拍手公式サイトを使うのが吉です。全力でおすすめします。
プログラムのここが変だよ、とかあればコメントお願いします。

参考サイト

    • 匿名
    • 2015 08/11 6:38pm

    試し

  1. トラックバック 0

return top