• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WordPressの質問(q10072766)の続)

WordPressの質問に関するアドバイスをお願いします

このQ&Aのポイント
  • WordPressの質問についてアドバイスをお願いします。コードを1つにまとめる方法やキーの隠し方について教えてください。
  • WordPressの質問についてアドバイスをお願いします。キーを隠す方法についてモジュール作成や環境変数の使用について調べましたが、よく理解できませんでした。
  • WordPressの質問に関してアドバイスをお願いします。モジュール作成や環境変数の使用など、キーの隠し方について教えてください。

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

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (776/5747)
回答No.26

【2023/1/16 ID】 ・IDと iPの話に戻るのですが、投稿IDを取得して表示する方法についてのアドバイスも頂けると助かります。 投稿IDは無関係です。 いえ、言われている投稿IDとはなんのことでしょうか。 私にはWordPressの投稿記事のIDのことのように聞こえているので質問を理解できないでいます。 投稿記事IDを取得したとしても、それは質問者さまの投稿記事IDなので、 掲示板に書き込みした人を識別することはできません。 そうなると、掲示板への投稿者のIDでしょうか。 つまり、WordPressにログインしたユーザーのIDです。 ログインしていない投稿者にはIDはありませんので取得できません。 もしかするとですが、掲示板投稿のIDでしょうか。 それはつまり、先ほど回答した、自動振りした番号のことになります。 これはただの番号なので、同じ人が掲示板投稿しても次々新しい番号が振られるので役にたちません。 IPアドレスについてですが、表示はしないとしても、 管理上データベースには保存する必要があります。 まず、掲示板のデータに投稿してきたIPアドレスを保存しておきます。 それから、荒らし判定したIPアドレスは「荒らしIPアドレステーブル」に登録します。 投稿してきたIPアドレスが「荒らしIPアドレステーブル」に登録されているものであれば、 エラーにするようにすれば投稿を禁止できます。

php_learn
質問者

お礼

Q.ログインしていない投稿者にはIDはありませんので取得できません。 A.回答ありがとうございます。 複数のまとめサイトにはログイン処理なしでコメントにIDが出ているためコメントの際にvalueでIDを渡せるのではないかと考えております。 両サイトともにコメントすると同じIDが表示されています。wifiが変わるとIDは変更されるようです。 ※参考サイト https://imgur.com/3Ug2WO7.jpg https://imgur.com/yQvQVsh.jpg 別のサイトから名前にIDを設定できる方法を見つけました。 IDも取得したいのですが、IPも別途取得した方がよいかもしれません。 何か問題が生じた際にIPアドレスを取得できないと、大きな問題に発展してしまうリスクがあります。 ※該当コード <input type="hidden" name="id" value="<?php echo substr(base_convert(md5(session_id()), 16, 36), 0, 6); ?>"> // セッションIDをMD5でハッシュ化して、先頭の6文字をIDとして使う echo substr(base_convert(md5(session_id()), 16, 36), 0, 6); ※参考サイト https://web.analogstd.com/tips/posts/php/how-to-mount-comment-func-without-sql.php Q.投稿してきたIPアドレスが「荒らしIPアドレステーブル」に登録されているものであれば、 エラーにするようにすれば投稿を禁止できます。 A.アドバイスありがとうございます。 IDが取得できない場合はIPアドレスを保存するように致します。 質問の期限が切れそうなため下記URLから引き続きよろしくお願い致します。 https://okwave.jp/qa/q10093310.html

その他の回答 (25)

  • dell_OK
  • ベストアンサー率13% (776/5747)
回答No.5

カスタムモジュールについてですが、perlのことはまったくわからないので、私はお役に立てないかも知れません。 「カスタムモジュール」と言う呼び方からすると、すでにあるシステムが持っているもの以外をユーザーが自作するもの、と言う意味かと思います。 WordPressもそうですが、テーマフォルダ内の自分で書いているものはすべてカスタムモジュールに該当する気がします。

php_learn
質問者

補足

回答ありがとうございます。Terminal からコマンドを打ってモジュールのひな型をpublic_htmlと同階層に作りました。MylibMymodというフォルダが作られているのでこの中のMymod.pmというファイルをメモ帳などで開いてコードを記載すればつくれそうです。 $ h2xs -AX --skip-exporter --use-new-tests -n Mylib::Mymod ※参考サイト https://linuxcommand.net/perl-mod/#i-3 https://perlzemi.com/blog/20090513124489.html

  • dell_OK
  • ベストアンサー率13% (776/5747)
回答No.4

・101行目からのechoが続くところに違和感を感じました。 そうですね。 エラーにはなりませんが、期待通りのものは出力されません。 以下のコードで出力されるのは、  echo '<form name="toiawase" method="post" enctype="multipart/form-data" action="<?php echo esc_url( home_url( '/contact/' ) ); ?>">'; このようなもので、PHPのコードがそのまま出力されてしまいます。 <form name="toiawase" method="post" enctype="multipart/form-data" action="<?php echo esc_url( home_url( '/contact/' ) ); ?>"> HTML出力をechoに変えた特別な理由がなければ、元に戻した方がいいような気がします。 echoでするなら、もともとある<?php~?>の部分は.で結合する方法にしてみてください。  echo '<form name="toiawase" method="post" enctype="multipart/form-data" action="'.esc_url( home_url( '/contact/' ) ).'">'; <?phpは'.にして、?>は.'にして、echoと;はなくします。

php_learn
質問者

補足

アドバイスありがとうございます。 元に戻す方法がきれいにコードをまとめられるとは思うのですが、71行目からの成功した場合の処理に代入する方法が分からないため<?php?>は削除する形をとりました。 form.phpのサンプルコードを変えるのは難しそうだなと考えたので、contact-input.php(旧コード)をechoにしました。 // トークンが有効な場合 if ( $result->success ) { return true; // 成功した場合の処理 再度コードを直してみたのですが、120行目の</textarea>が分かりませんでした。アドバイスお願い致します。 echo '<textarea name="message" cols="40" rows="10" required /><?php echo $message_value; ?></textarea>'; ※アドバイスをもとに修正したコード https://wandbox.org/permlink/CM0aEeagDT9D1tmU

  • dell_OK
  • ベストアンサー率13% (776/5747)
回答No.3

index.phpに遷移される前に、エラーが発生しているところで例外をキャッチしたらどうでしょうか。

php_learn
質問者

お礼

説明不足でした申し訳ありません。該当コードをPHPの構文チェッカーで確認したところエラーはなかったのですが、101行目からのechoが続くところに違和感を感じました。 どのようにコードを整理すればよいか分からずdell_okさんにアドバイスを頂きたいです。 ※該当のコード https://wandbox.org/permlink/8tDcYnlzRhmJjbto これとは別件になるのですが、カテゴリーPHPでカスタムモジュールについてお聞きしてしまい申し訳ありませんでした。 以前githubについてアドバイスを頂いた際にTerminalで導入できると教えていただいたので、ファイルを開く方法について知りたく補足に書かせていただきました… perlのファイルをTerminalで作成でき、ファイルも階層から確認できたためこちらを使いカスタムモジュールを作成予定です。 作成方法は参考サイトが多数出ておりますので、そちらを見て作りたいと考えています。 初めから情報の少ないVtigerCRMを無理に使ってカスタムモジュールを作成する方法に固執する必要はなかったです…

php_learn
質問者

補足

アドバイスありがとうございます。個別ファイルで対応するようにします。 VtigerCRMはTerminalで設定できるようですが、情報が少ないため Perlでモジュールを作成することにいたしました。 コードをまとめていきたいのですが、64行目のGoogle reCHAPCHAの認証が成功した場合の処理に入れるべきコードの範囲が分かりません。 アドバイスお願い致します。 // トークンが有効な場合 if ( $result->success ) { return true; ※該当コード https://wandbox.org/permlink/qk60Jjv1D7GNNtpO ※カスタムモジュール https://perlzemi.com/blog/20091116124667.html

  • dell_OK
  • ベストアンサー率13% (776/5747)
回答No.2

【reCAPTCHA その2】 ・contatc-index.php に switch($_POST["action"]): があるので「POStでの遷移」以外はエラー(undefined index)になります。 https://wandbox.org/permlink/XTZwcEAEmKmh5oLZ こちらのコードは「contact-index.php」となっていますが、 「contact-input.php」のものに見えます。 もしこれが「contact-index.php」だとしたら、 壊れています、と言うと大げさですが、元のものに戻してください。 念のため私がいただいたコードを載せておきます。 ---- <?php /* 固定ページ お問い合わせ Template Name: contact-index */ ?> <?php /* ↑↑↑↑↑↑↑↑↑↑ ここから上部は page.php のヘッダーのコピペ ↑↑↑↑↑↑↑↑↑↑  */ // 他のサイトでインラインフレーム表示を禁止する(クリックジャッキング対策) header('X-FRAME-OPTIONS: SAMEORIGIN'); // エラーメッセージと不正アクセスフラグ(メール送信) $error_mes = ""; $noindexaccess = true; //define() - 名前を指定して定数を定義する // メアドに表示する名前 define('WEBMST_NAME', 'サイト名'); // お問い合わせ用メアド define('WEBMST_MAIL', 'xxxxx@xxx.xx'); // 送信先メールアドレス $mailto = WEBMST_MAIL; #-------------------------------------------------------------- # 条件分岐文のひとつswitch() #-------------------------------------------------------------- switch($_POST["action"]): // エラーチェック&確認画面表示 case "completion": ///////////////////////////////////////////////////////////////////////////// // メール送信処理と完了画面を表示,外部ファイルを読み込んで使いまわす方法 include('contact-check.php'); if(!$error_mes){ include('contact-sendmail.php'); include('contact-completion.php'); } else{ die("<p>エラーが発生しました。<br />もう一度送信しなおしてください。</p>"); } break; case "confirm": ///////////////////////////////////////////////////////////////////////////// // エラーがあれば再入力、なければ確認画面表示 include('contact-check.php'); if($error_mes): include('contact-input.php'); else: include('contact-confirm.php'); endif; break; default: ///////////////////////////////////////////////////////////////////////////// // 新規入力画面を表示 include('contact-input.php'); endswitch; /* ↓↓↓↓↓↓↓↓↓↓ ここから下部は page.php のフッターのコピペ ↓↓↓↓↓↓↓↓↓↓  */ ?> ---- ここで以下の設定がされるため、 ---- $noindexaccess = true; ---- 他の「contact-~.php」にある、 ---- // 不正アクセスチェック if(!$noindexaccess){ ---- で不正ではない扱いになります。 ・当初はメニューバーにリンクを設置する予定だったのですが、 パーマリンクを指定しているので設置できるはずです。 https://~/contact/

php_learn
質問者

お礼

POSTデータの有無をチェックしないうちに switch($_POST["action"]): のように $_POST["action"] が存在する前提で書いてはいけない(undefined index になる)。 ということのようです。 なので「POSTデータがないとき」の処理を別途加えるのが適切だとアドバイス頂きました。 参考サイトの方はPOSTデータがない場合、処理されてcontact-input.phpに飛ばされるためコードを書いていないようです。 switch($_POST["action"] ?? ""):として$_POST["action"] が存在しなければ空文字列として扱うように変更いたしました。 ※参考サイト https://nw.myds.me/wprdpress-ad/contact_us/

php_learn
質問者

補足

A.回答ありがとうございます。contact-input.phpですがファイル名を間違えているようです、申し訳ありません。 http://www.last.cfbx.jp/contact/がリンクになっているようですが、テンプレートはcontact-index.phpなので最初のアクセスでswitch($_POST["action"]):だとPOSTされておらず、 エラーになるのではないかという指摘のようです。 ページ移動のときにGET送信かPOST送信を使って任意の値を2ページ間で受け渡す方法。という記事を見つけたためもし初回アクセス時にPOST通信以外はエラーになるというのが本当であれば下記の方法を参考にパーマリンクを渡そうと考えています。 https://memo.ag2works.tokyo/post-2005/ モジュールに関して分からない点があるのですが、アドバイス頂けると助かります。 2つほどカスタムモジュールを作成する方法を見つけました。 1.perlに付属されているh2xsというツールを使ってモジュールを作成する方法 2.データベースを作成してVtigerCRMをディレクトリに配置する方法 アドバイス頂きたい点になるのですが、 1の場合Terminalでモジュールのひな形まで作成できたのですが、作成されたディレクトリに移動に移動してコードを書く方法が分かりませんでした。コマンドプロンプトを使用したことがないため、どのようにコードを書けばよいのかわからない状態です。 2の場合参考サイトのパッケージの展開に書かれていることが調べても理解できませんでした。インストール予定というのがデスクトップを指しているのか、ファイルの階層を指しているのかわかりません。 ①パッケージファイル(現在の最新版は、vtigercrm7.4.0.tar.gz)をサーバーのインストール予定の場所にアップロードします。 ※参考サイト //1のPerl モジュールについて https://linuxcommand.net/perl-mod/#i-3 //2のVtigerCRMについて https://vtiger-mautic.info/vtigercrm-manual-install/ ※補足 Perl モジュールは古いようで最近はModule::Starterが使われているようですが、調べても参考にできるようなサイトがなく選択肢からは外しております。 https://blog.sixapart.jp/2007-02/how-to-make-perl-module.html

  • dell_OK
  • ベストアンサー率13% (776/5747)
回答No.1

【reCAPTCHA その1】 ・モジュール自体はcpanel(レンタルサーバー)から作成できるようですが、 それがキーとして役割を果たすのかというのが心配です。 試しに作成してみてください。 見た感じ、PHPのコードファイルが作られるようなので、 それを読み込むようにすれば大丈夫だと思います。 役割を果たすかですが、 キー(文字列)を変数に代入しているだけだと思うので、 それ以外の方法も思いつきませんし、 十分に役割を果たすと思います。 作成されたコードファイルを見て、 その内容をfunctions.phpに転記して使えるように工夫するのもありですが、 キーを再発行するたびにfunctions.phpを変更するのはメンテナンスに不向きです。 プログラム(処理系)を変更せず、文字列(データ系)を操作する方が、 メンテンナンスが楽ですし、 動作しなくなった際にどちらを変更したかで原因の方向がわけやすいです。 なので、別ファイルであることがいいと思います。 ・環境変数とかにして非公開ディレクトリから読み込むという方法も見つけたのですが、調べても意味が理解できませんでした… .htaccessファイルを使用するということでしょうか? この参考サイトで言っている環境変数はなんのことかわかりませんね。 環境変数と聞くと、WindowsにあるOSが管理している変数などを思い浮かべます。 Linuxにもあるのかどうかわかりません。 非公開ディレクトリと言っているので、なんらかのファイルですね。 ただのテキストファイルでもいいですし、 PHPコードファイルでもいいしって気がします。 .htaccessファイルでもそのようなことができるかどうかはわかりません。

php_learn
質問者

お礼

こちらが最新の質問になります。 現在データベースでのPerlのインストール方法が分かり、Terminalでのvtigercrmのインストール法も途中まで分かったのですが、vtigercrmの設定画面に移れず困っております。 index.phpでエラー文を確認したいのですが、一時的にエラー文を表示させる方法はわかりますでしょうか? 初期のPDO経由で表示する方法が使えないため悩んでおります… function display_maintenance() { echo <<<maintenance <hr> ただいまメンテナンス中です。<br> しばらく時間をおいてアクセスしてください。 <hr> maintenance; }

php_learn
質問者

補足

回答ありがとうございます。 モジュールを作成してみます。dell_okさんに先に聞いておきたいことがありまして、どうやら今のままでは意図するコードが動作していないようです。 当初はメニューバーにリンクを設置する予定だったのですが、POStでの遷移が必須条件だとしたらformのメソッドが必要になる気がします。 通常は検索フォームに使うような<form></form>を初回アクセス時に使うとデザインがよく分かりません… method="POST"をform以外で送る方法はないんでしょうか? contatc-index.php に switch($_POST["action"]): があるので「POStでの遷移」以外はエラー(undefined index)になります。なので、初回アクセス時には真っ当に contact-input.php に遷移しません。 また、contact-input.php も // 不正アクセスチェック if(!$noindexaccess){ header("HTTP/1.0 404 Not Found");exit(); } 直接アクセスを拒否したいのでしょうけど、不正アクセスとして想定している「contact-index.php を経由しないアクセス」だと $noindexaccess が未定義なのでエラーになります。

関連するQ&A