PHP工房トップ

HOME > 【PKOBO-vote01】PHP投票・アンケートシステム(連続投票防止付き)CMS フリー(無料)版

【PKOBO-vote01】PHP投票・アンケートシステム(連続投票防止付き)CMS フリー(無料)版

まえがき

管理画面から登録、管理できる投票、アンケートなどに最適なシステムです。テキストのほか、画像もアップできますので様々な要件に対応可能です。たとえば、一般的なテキストのみのアンケート「このページは役に立ちましたか?」や、デザイン画や写真の投票システムとしても使用可能です。

ただし、このシステムは重複投票をクッキーによって制御していますが、完全な1人1票ということはできませんので予めご了承下さい。詳細は以下をご確認下さい。
2重投票を完全に防止できるものではありません

こちらでも十分に検証を行なっておりますが、配布直後は未知のバグが無いとも限りません。不具合やお気づきの点がございましたら遠慮なくご連絡いただけますと幸いです。また使用感やこのページでの間違い、分かりにくい点等ありましたらお知らせいただけたら大変ありがたいです。いずれもお問い合わせよりご連絡いただければと存じます。

主な特徴

  • 個人・商用問わずどんなサイトでも無料でご使用いただけます。
    クライアントへの納品などでももちろんOKです。
    ただ実際に導入してみてもし気に入っていただけましたら「
    」していただけるとさらにより良いものへと進化する可能性があります(笑)
    デフォルトでは全ページ下部に著作権リンク(クレジット)が表示されます。著作権リンク(クレジット)の削除申請についてはこちらをご参照下さい。
  • データベースは不要です。PHPが動作する環境であればほとんどのサーバーで動作し、また軽量なため軽快に動作します。
    (基本的にPHPのバージョンは問いません。PHP4.3.9~5.5まで動作確認済)※5.3以上推奨。
  • 管理画面からブログ感覚で更新できます。商用サイトへの導入を前提に、クライアントが投稿することを想定しシンプル&分かり易さを追求しています。
    複数のアンケート、投票を登録できますので、たとえばページごとに別々のアンケートを設置することも可能です。(表示するアンケートを指定できます ※設置法参照下さい)
    また管理画面にはページング機能が付いていますのでどんなに投稿が増えても問題ありません。(デフォルトは100件/1ページあたり)
    ※投稿数に上限はありません。
  • テキストのみ、または画像のみ、または両方を表示することが可能なため様々な要件に対応できるでしょう。画像(jpg、gif、png)はサイズも自動縮小します(サイズ、画質とも設定ファイルにて設定可)。デフォルトは横写真の場合は幅、縦写真の場合は高さでいずれも600pxで画質は90。サーバーにもよりますが、デジカメ写真のような大きいファイルサイズでもそのまま登録OKです。クライアントにいちいち縮小してから登録してねーとか面倒ですよね^^;
    ※サーバーのphp.iniの設定によりアップロード容量の制限値が異なります。デフォルトは2MBとしています。
    変更方法や詳細はこちらを参考下さい

    ※iPhoneで縦で撮った写真が横写真として認識されてしまう問題も対策しています。
    ※透明pngにも対応しています。
    ※管理画面内に現在のサーバーの設定値を確認できるページを用意してますのでそちらで現在の容量の制限値等をご確認下さい。
  • 投票、アンケート項目の上限は1投稿あたりデフォルトでは「20」としています。(設定ファイルで設定可)これは一度にアップできる画像(ファイル)の数がphp.iniのデフォルトの上限値では「20」に設定されているためです。画像もアップする場合でかつ項目が20を超えるアンケートを作成したい場合は設定ファイルの変更だけでなくphp.iniの設定変更も必要です。 (php.iniのmax_file_uploadsの値(デフォルト20)を任意の数値に変更下さい。 ※PHP 5.2.12 以降で利用可能。php.iniの変更方法はサーバーによっても異なりますので割愛いたします)
    逆に画像はアップせずテキストのみであればphp.iniの変更は不要で上限もありません。設定ファイルでデフォルトの上限20を任意の値に変更するだけでOKです。(無制限です)
  • 表示期間の設定も可能。
  • 投稿データの表示・非表示が可能。
  • 投票数のカウントを管理画面からリセットできます。
  • 新規投稿時にのみデータファイルをバックアップ用ディレクトリ(backup/)にコピー保存します。(デフォルトはOFF)万が一のデータファイルの上書きや何らかの不具合によるデータ消失を防ぎます。テキストデータのため容量は大きくありませんのでONにしておくことをオススメします。(設定ファイルで可)
  • その他オプション等の設定はすべて設定ファイル(config.php)で行えますのでファイル内のコメントを参考に設定ください。
  • 動作確認済ブラウザ:Firefox、Chrome、IE9~IE11、iPhone(Safari)、Android
    特殊な処理は特に行なっていないため基本的にはブラウザ間の問題は非常に出にくい仕様としています。
    ただし、投票時のメッセージ表示にのみJS(ライブラリ不要のいたってシンプルなもの)を使っているため、ガラケーのJS非対応機種はメッセージが表示されません。(まぁ今の時代あまり問題にならないと思いますが念のためです)
  • 項目ごとにリンク設定が可能です。(バージョン1.0.1(2016/2/5公開)~より追加しました)

サンプルデモ

ユーザID:admin
パスワード:13971397
テスト投稿してみてください。下記のページに反映されます。削除も可能です。

表示側サンプル

※この一覧部分はvote_list.phpをiframeで表示しています。実際にはこの一覧ページを使う機会はあまり無いでしょう。実際には「投票する」を押した後のページを表示することがほとんどかと思います。
※またサンプルでは再投票可能までの期間を10秒に設定しています。

プログラムダウンロード

事前にご利用規約をご確認、ご同意下さい。
クリックで自分のPCにダウンロード保存して下さい。または右クリック⇒「対象をファイルに保存」

PKOBO_vote01.zip(約55KB) 

表示側はUTF-8、Shift-JIS、EUC-JPに対応。デフォルトはUTF-8。
直接埋め込む場合で埋め込みページがUTF-8以外の場合、埋め込み用ファイル(vote.php)内で文字コードを設定可能です。
※PCはUTF-8、携帯はShist_JISのように別々の文字コードでも問題ありません。

設置方法

ファイルの文字コードはUTF-8です。必ず対応したエディタで開いてください。
メモ帳(UTF-8非対応)は使用禁止です。TeraPad(無料)やDreamWeaver等で開いてください。
(そこまで意識する機会はありませんが、必ずBOM無しで保存して下さい。※多くのエディタのデフォルトはBOM無しのはずです。BOMについて詳しく知りたい方はこちら
※ PHPでは、スラッシュ2回「//」の後からその行の末尾までがコメント扱いとなります。「#」、「/**/」もです。

1.  ダウンロードファイルを解凍する

zipファイルになっていますので解凍下さい。解凍ソフトは何でも構いません。Windowsであれば標準で付いている「展開」などでもOKです。

2. ファイル構成と各ファイルの説明

一般的なサイトの階層構造を意識して配置しています。要するにvote.phpがある階層がサイトのトップページの階層と同じということですね。

■色のものはパーミッション変更が必要なものです。

vote.php、
vote_radio.php

投票、アンケートデータの表示ページです。登録した投票、アンケート項目が表示され、実際に投票も行うページです。これを一般ユーザーに公開することになります。
表示する投票、アンケートデータのID番号をファイル内、またはパラメータにより指定下さい。これで該当のアンケートのみを表示できます。
指定方法はファイル内にも記載しています。
iframeでの指定方法はこちらもご参考下さい。

vote.phpは各項目ごとに投票ボタンが付きワンクリックで投票出来ます。
vote_radio.phpはラジオボタンを選択してからの投票となります。
お好きな方を使用下さい。逆に違いはこれだけですので使わないほうは無視して下さい。

既存のページ(既存ページを複製したものなど)に直接埋め込みでもOKですし、iframeでもOKです。
直接埋め込みの場合は埋め込み先のファイルの拡張子が.phpである必要があります。 また直接埋め込みの場合にはコピペ箇所がコメントにて指示してありますので参考下さい。
投票、アンケートという性質上SEO的な意味あいはあまり無いのでiframeで表示してしまうのが最も手っ取り早いかと思います。
vote_list.php ページング機能が付いた一覧ページです。このページはほとんどの場合、使用することは無いでしょう。必要に応じて使用下さい。
iframe.html iframeで埋め込む場合用のHTMLタグです。あくまでコピペ用ですので削除いただいて構いません。
┗ pkobo_vote/ システム全体のディレクトリです。リネームは可能ですが、変更した場合、各表示側ファイルのパス部分も変更が必要です。検索、置換などで対応下さい。
自信が無い場合、特に理由が無い場合は変更しないことをオススメします。
 ┗ admin/index.php 管理画面です。登録や変更、削除を行います。クライアントにはこのURLだけを教えることになるかと思います。
  ┗ include/config.php 設定ファイル。管理画面ログイン情報の設定やその他設定が可能です。
エディタで開きコメントを参考に必要に応じて設定下さい。
特にログイン情報は必ず変更下さい。
セキュリティ上の観点から念のためパーミッションを「444」に設定下さい。
(ただし、444だとFTPソフトでも上書きできなくなることがあるので、その場合は一時的に666等に変更する必要があります)
  ┗ その他ファイル すべて必要なファイルになりますが意識する機会はないと思います。特に触らずそのままアップ下さい。特に「copy.inc」は触らないで下さい。システムエラーが発生します。
 ┗ data/ データ保存用ディレクトリ(パーミッションを777等書き込み可能なものに)
  ┗ data.dat データを保存するファイル(パーミッション666等書き込み可能なものに)
  ┗ backup/ データファイルのバックアップを保存するディレクトリです。
(パーミッションを777等書き込み可能なものに)
バックアップはオプションです。デフォルトはOFF。
バックアップをONにすると新規投稿時にだけbackupディレクトリ内に「backup年月日時分秒_○○.dat」のファイル名で最新のdata.datが複製されて保存されます。古いものは自動で削除されます。保存期間は指定可能です(デフォルトは3ヶ月 ※本日から3ヶ月前までのデータを保存します)。このあたりは設定ファイル内にも詳しく記述しています。
 ┗ upload/ アップロードファイル保存用ディレクトリです。
(パーミッションを777等書き込み可能なものに)

3, ユーザID、パスワードを設定する

admin/include/config.phpをエディタソフトで開き、ログインのためのID、パスワードを変更してください。
初期値は
ID:admin
パスワード:13971397
になっています。必ず変更してください。(半角の英数字、記号が設定可能です)
※パスワードはできるだけ13文字以上かつ大文字、小文字のローマ字、数字、記号(+_?*等)などを含めて下さい。
その他必要に応じてコメントを参考に設定してください。

4, FTPでアップ

pkobo_voteフォルダ、及び表示先のページなどすべてアップしてください。
上記の色のファイル、ディレクトリのパーミッションを変更下さい。
(ただし、config.phpは444だとFTPソフトでも上書きできなくなることがあるので、その場合は一時的に666等に変更する必要があります。ってことで戸惑われる方もいると思うので本当はややこしいので「444」にして下さいとかあまり言いたくは無いのですが、WPの改ざん問題とかもありましたので、念のため変更しておいたほうがいいでしょうっていう程度のことです)

サーバーによっては変更自体が不要な場合があります。また値もサーバーにより異なることがあります。
パーミッションが異常の場合には、管理画面で警告メッセージが表示されますので、すぐに気づくことができます。 逆に正常に管理画面にアクセできて、登録もできていれば、正常なパーミッションになっていると考えてOKです。ちなみにエックスサーバーの場合、今のところパーミッション変更は不要です。
極々稀にPHPファイル自体のパーミッション変更が必要なサーバーもあります。

5,ブラウザで確認

「あなたのサイトのURL(設置した階層)」/pkobo_vote/admin/を表示し、管理画面にログイン後、登録、変更、削除を行ってみてください。正常に登録、編集、削除ができればOKです。

表示側のページも確認下さい。 登録データが反映されていればOKです。

6, ページの調整

必要に応じてスタイルシート、HTML等で見た目の調整を行ってください。じゆ~です!
特にvote.phpのデフォルトは画像での投票を考慮したCSSとしています。実際の要件に合わせて自由に編集下さい。

こちらでも十分に検証を行なっておりますが、配布直後は未知のバグが無いとも限りません。お気づきの点がございましたら遠慮なくご連絡下さい。大変ありがたいです。

インラインフレーム(iframe)使用時のタグ例

同梱のiframe.htmlにも書いていますが、以下のタグをページの表示させたい場所に貼り付ければOKです。必要に応じて幅、高さ、パス等を調整してください。 ただ、実際には表示するアンケート、投票を指定することがほとんどかと思います。 (パラメータを省略した場合にはID番号「1」のアンケートを表示します)
通常は以下のようにパラメータを設定することがほとんどでしょう。
パラメータを設定することで指定のデータを表示可能です。例 「vote.php?id=2」とすればID番号「2」のデータが表示されます。ID番号は管理画面で確認可能です。(管理画面トップの「ID」欄) たとえば以下の様にですね。 (この場合、ID番号が「2」のアンケートが表示されます)

投票制限用クッキーの初期化方法について

テスト時などにはカウント用のクッキーを削除したい場合もあると思います。
ブラウザにより方法は異なりますが削除は可能です。

Firefoxの場合

ツール → オプション → プライバシー → Cookie を個別に削除
にて検索ボックスに「pvote_」と入力して検索して下さい。
該当のクッキーが表示されますので、 それを選択し、下部の「選択されたcookieを削除」を押すことで削除できます。

著作権表示リンク削除について(2,000円+消費税/1サイト)

デフォルトでは全ページの下部に著作権表示リンク(クレジット)表示があります。
無断での削除は禁止となります。
クライアントへの納品やリンクが煩わしい、または寄付の意味でなどクレジットを削除されたい場合には、
1サイトあたり2,000円+消費税のライセンス料金が必要になります。申請いただければ開発の励みにもなります。

お支払いいただければ場合、すべてのページでクレジットが削除されます。
2サイト目以降は都度料金が必要になります。
尚、プログラム自体に変更を要するものではございませんので、すでに導入済みであればそのままお使いいただけます。まだ導入されていない場合でも、導入作業を行なっていただいて問題ございません。
※システムには無関係の1ファイルを差替えしていただくだけになります。

※差替えするファイルはご入金確認後にメールにてお送りいたします。

動作確認済PHPバージョン

PHP4.3.9~PHP8.1

動作確認済レンタルサーバー

  • エックスサーバー [PR]
    ※個人的にはここが好きで、もうずっとここです。このサーバーで困ることはまずないでしょう。
  • ロリポップ! [PR]
    ※ただしここはWAF機能がONの場合、CMSプログラムで問題が発生する可能性が高いです。詳細はこちら
    またサーバーがブラックリストに登録されてしまいメール系のプログラムで受信できない大問題も多々確認されています。詳細はこちら
     ただコスパ的には有りだと思います。
  • カゴヤのレンタルサーバー [PR]
    ここは高機能、高スペック、良心的な価格でありながら風俗系のサイトがOKという非常に貴重なサーバーです。個人的には風俗系のサイトであればこのサーバー以外の選択肢はないと思ってます。
  • さくらのレンタルサーバ [PR]

その他一般的なレンタルサーバーであれば問題なく動作するはずですが、
すべての環境(サーバー)での動作を保証するものではありませんのでご了承下さい。

問題が出る可能性が高い、またはそのままでは必ず問題が出ることが分かっているサーバー

※現状私自身が把握している範囲です。(実際に確認していますのでちゃんと根拠もあります)
1,Yahoo系(ジオプラス、ウェブホスティングとも)※Softbankも含む
2,KDDI系(CPI含む)
3,NTT系(WebArena(suiteX)、NTTビズリンク(BizLink))
※プロバイダー系は特に問題が多いです。(個人的には絶対に借りてはいけないと考えています)
4,スマイルサーバー
5,ファーストサーバ

特にCPI、NTT系、スマイルサーバー、ファーストサーバで問題がある場合はこちらも参照下さい

経験上、結局は「餅は餅屋です」。プロバイダー系はプラン、金額に関係なく特に問題が多いです。サーバーの問題で時間を取られるのは非常に無駄ですし、その先ずっと影響しますのでサーバー選びは慎重にされることをオススメします。 特に理由がなければあえてこれらのサーバーは借りないほうが得策でしょう。高いから良い、安いからダメという安易なものでもありませんので難しいところですね。(まぁ安いには安いなりの理由があるのですが・・)

よくある質問

まずデフォルトで20に設定している理由はPHPのデフォルト(※PHP 5.2.12 以降で利用可能)では一度にアップできるファイル数がMAX20に設定されているためです。
そのためこの上限を上げるにはサーバーのphp.iniの設定が必要です。(php.ini または httpd.confで設定可能)
ただし、ファイル(画像など)のアップは行わずテキストのみの投票の場合には、この制限は無関係になりますので設定ファイル(config.php)でいくつにでも設定可能です。(無制限)※この場合php.iniの変更も不要です。

画像アップも含む場合で上限を20以上に上げるにはphp.iniの変更も必要になります。 php.iniの変更方法はサーバーにより異なりますが、 主にサーバー管理画面上で変更できたり、php.iniというファイルを該当ディレクトリに設置することが多いと思います。(この設定変更はhtaccessでは基本的に不可) その際の記述は主に以下です。
※例 100に設定する場合。
max_file_uploads = 100
※またこの場合、当然設定ファイル(config.php)のほうも上限を変更して下さい。

ただし、これはあくまでもサーバー側で設定変更が許可されている場合のみ有効です。このあたりはサーバーマニュアルやサーバー会社にご確認下さい。

また上限を上げたとしても今度は一度にアップできるファイル容量の問題も絡みます。
複数回に分けてアップするなどが必要になります。
またはこれの上限を上げる場合には詳細は以下を参照下さい。
http://www.php-factory.net/trivia/05.php

詳細は投票制限用クッキーの初期化方法についてをご参考下さい。

ご利用について

HTMLやCSSなどをある程度理解されている方を対象としています。
設置、カスタマイズ方法などのサポートは行っておりませんのでご了承ください。
設置法、HTMLタグ、CSS等に関するサポートは申し訳ありませんが有料にて承ります。
カスタマイズについてもすべてお見積りの上で有償対応となります。
もちろん不具合などがありましたら遠慮なく何でもご相談ください。

ご利用規約

・無料版プログラムはフリーウェアです。ただし、著作権は放棄するものではありません。
・プログラムの著作権表示リンク(ページ下部にある当サイトへのリンク)を無断で削除することはできません。
(一律2,000円+消費税の削除依頼をいただいた場合を除く)
・プログラムの再配布、再販売は禁止です。
 ※ただしクライアントへの納品などでシステム費用、設置費用として請求されるのは問題ありません。
・プログラムによって何らかの不利益、損害が生じても一切の責任を負いません。
 あらかじめご了承の上ご使用ください。
 もし何らかのトラブルがあった場合には、ご相談いただければ解決策が見つかるかもしれません。
 (クライアントへの原因の説明など)
・プログラムは全ての環境(サーバー)での動作を保証するものではありません。
・改変等は自由ですが、自己責任でお願いします。
・有料版をご購入いただいた場合、初期不良を除き、ご使用後の返金には応じ兼ねます。
・有料版(著作権リンク削除含む)は1サイト(同一ドメイン)内であれば複製の上で複数利用可能です。
 2サイト目以降は都度サイトより購入申込みが必要になります。
 ※サブドメインはその性質上、別サイト(別ドメイン)とみなします。  

 ダウンロードいただいた時点で利用規約に同意したものとみなされます。

カスタマイズ、設置代行について

どのようなカスタマイズでもまずはお気軽にご相談下さい。お見積りをお出しします。

2重投票を完全に防止できるものではありません

PHPのクッキーによりユーザーを判別し連続送信防止を制御しています。クッキーはブラウザの機能を利用しています。そのため簡単に言ってしまうとブラウザを変えてしまえば同じ人間が2回も3回も投票できてしまいます。(またはブラウザのクッキーを削除しても同じことになります。)

要するに完全に1人1票というのは非常に難しいのが現状です。現実的には「不可」と言ってしまって差し支え無いと思います。逆にこれができればすべての投票がネットで行えることになりますね。
(個人的には選挙もこれにしてしまえば莫大なお金を節約できてすごく良いことだと思うんですけどね)

このシステムはあくまでもそういった厳密な投票には対応できませんのでご了承下さい。

IPアドレスも基本的には定期的に変わるため(スマホの場合は特に頻繁に)、実装しても意味が無い上に可能性は低いですが、正規のユーザーを弾いてしまうリスクがあるため、あえて実装していません。
その他より厳密にする方法としては、メールアドレスを登録してもらう、携帯番号を登録してもらう、Facebookのアカウントを申請してもらうなども考えられますが、 いずれも完全ではありませんし、そもそも手間がかかってしまうデメリットも有りますのであまり現実的ではありません。

最近出てきたマイナンバーを利用すれば多少は良くなるかもしれませんが、なりすましもあるだろうし、名前、住所なども申請してもらったところでその情報とマイナンバーが一致するかどうかも個人では判断できないでしょう。

こういった理由から厳密に1人1票のシステムは非常に難しいのが現状です。

実施しているセキュリティ対策について

当プログラムで行なっている対策をご紹介します。
一般的に考えうるリスクには対策を施しています。無料版だからこのぐらいでいいだろうというような妥協は一切していません。

注意事項(大前提としまして)

このシステムは管理者が更新を行うCMSシステムです。管理画面での更新は特定の人間(社内や管理者のみなど)のみが行うことを前提としています。不特定多数の人間が管理画面に入って投稿できるような一般公開型の掲示板のような使用は絶対に行わないで下さい。(第三者が投票を行うことはもちろん問題ありません)

更新履歴

2020.07.30 v1.0.2リリース
認証不備の脆弱性の指摘と修正方法について

-- 脆弱性に該当する製品名およびバージョン
※ver.1.0.1及びそれ以前
(バージョンはReadmeまたはconfig.php内に記載しています)

確認済対象ブラウザ:(Firefox/Chromeで確認)

-- 脆弱性の内容
特定の条件下において、遠隔の第三者に管理者権限で当該製品にログインされる問題。
この条件が成立するには第三者があなたのサイトのサーバー上に無断でファイルを設置する必要があることから、この問題が実際に発生する可能性は限りなく低いと思われます。これまでに実害の報告などは届いておりません。

ユーザーにとって利便性が良いため、あえてそうしていたということもありますので、 非常に判断が難しいものでしたが、今回の指摘を真摯に受け止め、また利便性よりも安全性を優先するという判断としました。

-- 脆弱性への対応方法と適用方法
以下手順で修正を行なってください。

1,pkobo_vote/admin/内直下にある7つのPHPファイル(index.phpやregist.php)をエディタソフトで開いていただき、
session_start();」を見つけて下さい。(ファイル内に1箇所しかないため検索すればすぐに見つかります)

2,この「session_start();」の上に以下1行をコピペして下さい。

※「PHPSystem」部分の文字は変更して下さい。英数字のみとして下さい。


session_name('PHPSystem123');
session_start();


※順番に注意して下さい。必ずsession_start();の上に追加下さい。

以上、これだけです。

もしすでに「session_name()」がある場合はすでに対策済のバージョンですので変更不要です。

尚、当サイトの管理画面があるプログラムを複数設置している場合で一度のログイン認証で相互に行き来出来たほうが良い場合はsession_nameの文字列を同じものとして下さい。

-- 謝辞
ご報告いただきました「三井物産セキュアディレクション株式会社 東内様」、
並びに情報処理推進機構 IPA様、JPCERT/CC 脆弱性ハンドリングチーム様にはこの場を借りて感謝申し上げます。

2016.02.06 v1.0.1 定期アップデート実施 データファイルの区切り文字をタブに変更。項目ごとにリンク設定可能に。

2015.10.05 v1.0.0 配布開始

PHPメールフォーム(無料版)

PHPメールフォーム(有料版)

新着情報・更新履歴CMS(無料版)

投票・アンケートシステム(無料版)

テロップCMS(無料版)

写真ギャラリーCMS(無料版)

営業日カレンダーCMS(無料版)

営業日カレンダーCMS(有料版)

カレンダー予約フォーム(無料版)

カレンダー予約フォーム(有料版)

リンク集ページCMS(無料版)

アクセスカウンター(無料版)

ダウンロードカウンター(無料版)

その他

メールフォームの各種カスタマイズならお任せ下さい
業務効率化が可能なPHPオリジナルCMS制作します

役立つかも?なもの

豆知識や役立ち事など

PHPについて

各種情報