色々な意見をもとにwordpressのファイル構成を決めたのですが、わからない点があります。
以下が決めた内容となっております。
データベース関連→db.php
共通部分→データベースの接続とページナビはfunctions.php
表示部分→page.php
index.php→目次の役割?page.phpがエラーが出ているときにメンテナンス中表示されるもの
※わからない点
データベースに接続する際の処理(try文)をfunctions.phpに書きたいのですが、別のファイルで使う際に、require_onceを使って読み込ませる以外の方法はありますでしょうか?
functions.phpそのものを読み込ませてしまうとfunctions.phpに記載しているデータベースと関係ないコードまで読み込んでしまいます。
※functions.phpに記載するもの
<?php
try {
$dsn = 'mysql:dbname=hlxclitx_wp1;host=localhost';
$user = 'hlxclitx_wp1';
$password = 'E.HrypHWxNmltXgC5eS26';
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //エラーが発生した時に、例外を投げる
echo 'データベースへの接続が出来ました';
} catch (PDOException $e) {
echo $e->getMessage(); // err時はメッセージを表示
exit;
}
※接続から先の処理(page.php)
$sql = 'DELETE FROM rss_feed WHERE date < ?';
$stmt = $dbh->prepare($sql);
$delete_date = date('Y-m-d H:i:s', strtotime('-1 week')); //※削除対象日付
$stmt->execute([$delete_date]);
//RSS保存
$url1 = [
'http://nns2ch.net/index.rdf',
'http://aqua2ch.net/index.rdf',
'https://worldfn.net/index.rdf',
];
$stmt = $dbh->prepare('insert into rss_feed (title, link, date, img) values (?, ?, ?, ?) on duplicate key update title=?, link=?, date=?, img=?');
…
…
…以下略
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
ちょっと話それちゃっていますが、参考にしたページはこれですか?
https://simple-was-best.com/blog-entry-wordpress …
これ、明らかに不必要な説明になっていますね。
外部の仕組みから強引にWordpressのDBを操作しようとしているように見えます。
Wordpressの仕組みに乗っかっているなら、意図的にrequireなんてする必要ありません。
もしかしてやろうとしていることは、Wordpressのカスタマイズやそのプラグインの作成とかじゃなくて、Wordpressの機能を都合よく利用した独自システムの構築ですか?
そうであるならば私から回答することはもはやありません。
なお改めですが、wp-load.phpをrequireするしないに関わらず、セキュリティ情報がどこかのファイルに存在して、そのファイルがドキュメントルート配下に存在するならば、ファイル名について推測されやすい、されにくいの度合は異なりますが、セキュリティのザルさは変わりません。
攻撃者は何もWordpressにだけ焦点を当てて攻撃してくるわけではないので。
つまりこれはどこまで行っても、レンタルサーバの制約がある以上、『wordpressから推奨されないドキュメントルート内に設置して対策する』と同義です。
そちらの方を参考にいたしました。
つまりはどの方法を使用してもドキュメントルート下にある場合はセキュリティの対策が必要だということですね…
wordpressの機能を都合よく使って作りたいわけではなく、RSSを外部から取得してデータベースに保存したものを表示させるプラグインのようなものを作りたいだけです。
$wpdbのみで特定のデータベースやテーブルにどのようにアクセスするのでしょうか?
config.phpを通すか、create tableを使用するしか方法はない気がするのですが。ページごとに読み込む必要がない場合、必要ないと思いますがページごとに異なるRSSを表示させるにはload.phpのようにDB接続する必要があります。
No.3
- 回答日時:
wp-load.phpではなく、セキュリティ情報が含まれるwp-cofig.phpがドキュメントルート下にあるのがセキュリティ上よろしくないということだと思います。
これは、そういう制約のレンタルサーバであるならば回避しようがありません。
せいぜい適切なパーミッションの設定と、htaccessで直接アクセスを拒否するなど程度に落ち着くでしょう。
そういった方法論が最大限の対策になります。
それを言い出したら、index.php以外がドキュメントルート下にあるのがおかしいのです。
(そういう風にするための方法論をHPに載せてる方もいる)
それを理由に他のファイルにセキュリティ情報を書いてたら問題としては同じことです。
むしろWPの仕組みとしてもセキュリティとしても悪化させます。
よって、そんなことをする意味がありません。
WP自体はセキュリティに対する思想が弱いですから、そこを可能な限り完璧を求めようとするなら、融通の利くレンタルサーバに乗り換えて、index.php以外はドキュメントルート外に配置して適切なパーミッションを設定することです。
どこでコードを書こうとしているのかわかりませんが、WPのルーティングの流れに乗ってる中での処理なら、wp-load.phpをrequireせずとも、DB操作を必要とするタイミングで、
global $wpdb;
を宣言するだけで済むはずです。
$wpdbにアクセスするためというよりも、wordpressのデータベースにアクセスするためのアクセス情報がありますよね?SQLサーバのURLだったり、ユーザ/パスワードであったりと。
こういった情報をプラグインのPHPなどのコードに直接書き込むのは正直セキュリティ的にも良くないですし、何よりも冗長になります。
WordPressではこういったDB情報は全てwp-config.phpに纏められているので、これを使いましょう。wp-config.phpの中身ではこんな感じでDB情報を纏められています。
上記のようにどうしてもwp-load.phpは必要なようです。
wordpressのほうでも作成するつもりなので、その際はよろしくお願いします。
セキュリティの対策は多すぎてきりがないと思い、方法を切り替えました。
wordpressから推奨されないドキュメントルート内に設置して対策するのと、wordpressの関数を避けて特定されないようにする?のはどちらが良いかと考えたうえで後者を選びました。
不適切な発言があり申し訳ありませんでした。
No.2
- 回答日時:
$wpdbを使えばいいと思いますが、全く別のDBへ接続して制御を行いたいのですか?
利用しているWordpressのDBを利用したいなら、接続処理なんて書く必要ありませんよ。
INSERTやDELETEなどの命令も用意されています。
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83% …
ファイルの在り方やお作法を無視してごりごり書きまくっていて、もはや手が付けられない状態に陥っているなら、それがそのシステム作り方、として確立されてしまっているので、よほど大掛かりに修正しなければどうしようもないと思います。
説明不足ですみません。$wpdbを扱う方法で初期コードは完成していたのですが、ドキュメントルート内からwp-load.phpを通すのはセキュリティの問題上絶対にダメだとご指摘がたくさんあり断念しております。
ドキュメントルート外からモジュールを通すことはレンタルサーバーのプラン上コストを考えて不可能なので、1からphpを使いDBを扱っております。
この時点でルールを無視しているのは承知ですが、ウイルスの危険がありレンタルサーバーからも推奨されていない方法で組むことはできません。
No.1
- 回答日時:
案1
「データベースに接続する際の処理」を connect_db.php に移し、
「データベースと関係ないコード」を functions.php に残す。
案2
functions.php には関数定義だけさせて、
require_once の後で必要な分だけ関数呼び出しする。
案1はページナビの機能のみをfunctions.phpに残して、データベースに接続する処理をconnect_db.php に移し、表示をindex.php(固定ページ)で行う方法ということですね。
案2はfunctions.phpにすべての機能を入れて、require_onceをindex.phpで使いデータベースに接続した後に関数呼び出しで表示させる方法ですね。
案2の方法で1つの問題がありまして、functions.phpにはすでに管理画面などの追加コードが入っており、データベースのためだけに贅沢に扱えません。過去のアドバイスからすると、require_once functions.phpとするのはwordpressのルール違反のようです。本来はwp-load.phpを使いデータベースに接続をして、そのほかの記載はindex.php(固定ページ)に書くとこべきですが。
レンタルサーバーのルールでドキュメントルート外にwp-load.phpを置けないため、セキュリティを考慮してRSSを取得する機能を自作いたしました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- PHP 【PHP/MySQL】コード上で生成したクエリを基に集計クエリを作りたい 1 2022/07/28 15:06
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP php エラー 2 2022/10/23 16:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【初心者】XAMPPのapacheの(恐...
-
プログラミング言語で、使える...
-
PHP8を使うと、大量のWarningが...
-
ワードプレスサイト PHP8.0.25...
-
ファイルの書き込みについて教...
-
if(preg_match("/[^0-9]/",$gu_...
-
アマゾンのような評価の星を選...
-
phpでcookieがうまく保存されない
-
ファイルアップロードの上限を...
-
PHPで訪問回数を表示するカウン...
-
PHPSpreadsheetを使って関数を...
-
記述のおかしいところを教えて...
-
php テーブルが作成できない
-
PHPのエラーの解消法について教...
-
【スプレッドシート】順位のつけ方
-
PHP MySQLに画像を直接保存
-
Q&Aサイトを作成していてURLの...
-
アップロードファイルの数に応...
-
PHPのセッション有効期限について
-
php 確認表示画面で値をSESSION...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WordPressのLighting(テーマ)に...
-
アップロードファイルの数に応...
-
WP/ 記事タイトルをクリックさ...
-
PHPのソース変更が反映されない
-
ワードプレスでカテゴリー毎に...
-
URL短縮ツール「楽々URL」をさ...
-
ワードプレス index.phpの差し...
-
曜日毎に読み込むphpを変更...
-
Wordpressで記事がない場合にメ...
-
PHP初心者です。
-
Smarty コンバートエラー??
-
変数で日付を指定し、新しい順...
-
PHPのクッキーによるリダイレクト
-
国語の感想文(いのうえひさし...
-
ワードプレス。lightning ペー...
-
ワードプレステーマkatawaraのCSS
-
意見文のテーマ
-
ワードプレスのプラグイン
-
ワードプレスの403エラーについて
-
こんな素敵なサイトって、WordP...
おすすめ情報