質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2150閲覧

PHPで設定ファイルの一部をフォームから更新できますか?

greenisland

総合スコア20

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/06/29 07:01

編集2015/06/29 09:22

PHPで設定ファイルを作って、そこへ設定項目を記入して
require_onceにより他のファイルに読み込ませています。
例えば以下のようなconfig.phpがあったとします。

config.php

lang

1<?php 2 3define("SITE_TITLE","サイトタイトル"); 4define('DATE_CHECK', true); 5define('LAST_DAYS', 30);

上記の項目の一部をウェブ上のフォームから更新したい場合、どのような手段がありますでしょうか?
DBを利用した更新ではなく、直接config.phpの一部を書き換えたいと思っています。

###みなさんご回答ありがとうございます!

回答を見てこのやり方は通常ではない、やるべきではない方法だということがわかりました。

でもちょっとした設定をまとめておきたい、
そして気軽に読み込ませたい、とすれば、
通常はどのように設定ファイルを作るものなのでしょうか?

ちなみにフォームで更新できること、
全部のページに読み込ませることを想定した設定です。
データベースにすると全ページで接続するのは不自然なのかなと感じています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

var_export でPHPの値のコード上での表現が得られるので、単純に書き戻せば大丈夫ですが、

lang

1<?php 2require_once __DIR__ . '/config.php'; 3 4$SITE_TITLE = var_export("修正したサイトタイトル", true); 5$DATE_CHECK = var_export(DATE_CHECK, true); 6$LAST_DAYS = var_export(LAST_DAYS, true); 7 8$config = <<<EOS 9<?php 10define("SITE_TITLE",$SITE_TITLE); 11define('DATE_CHECK', $DATE_CHECK); 12define('LAST_DAYS', $LAST_DAYS); 13EOS; 14 15file_put_contents(__DIR__ . '/config.php', $config);

常識的に考えてこんなことはやらないほうがいいです。

外部(フォーム)からくる値を元に PHP のコードを出力するとか、やらなくていならなるべくやらないほうがいいです。

config.json などとしてJSON形式で保存するようにしたほうがはるかに安全です。

投稿2015/06/29 08:24

ngyuki

総合スコア4514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

greenisland

2015/06/29 08:47 編集

ご回答ありがとうございます。 具体的なやり方から、セキュリティ面のご指摘まで大変参考になります。 こういうファイルはwordpressとかでも見かけるので、 何らかの更新する手段があるのだろうかと思って質問してみたのですが、 あまり良くない方法なんですね。 JSON形式だとコメントが書けないと思うので、 私の場合あまり実用的ではないかもしれません。
ngyuki

2015/06/29 08:53

あぁ・・たしかに WordPress なんかはインストーラー的なやつで wp-config.php を生成できますね・・・ なるべく簡単にWebアプリの利用を開始できるようにするための施策だと思いますが、WordPress のような、非エンジニアでもセットアップできるようにしたい、とか出ない限り真似しないほうが良いと思います。
greenisland

2015/06/29 12:43

ありがとうございます。 やはり通常ではあまり使われない手法になるんですね。 なるべくフォームから更新できるようにしたいので、そうなると データベースを使うしか無いのかなと思っています。
guest

0

config.php をfile関数で読み取り、物理ファイルとして上書きする方法になるのではないでしょうか。

ただ、書き換えた設定値が上書きでデフォルト値などに戻らないように、フォームパラメータに既存の設定値が自動で表示するなど、しておく必要があります。
(define設定なので、値の呼び出しは簡単かと思います)

また、書き換えを実行した直後のdefine値は、書き換え前のものになっているため、フォーム上に設定値を表示させる場合は、POSTされた値を表示する必要があるかと思います。

それと、config.phpは、define設定のみを記述し、ロジック等の記述はしない方が無難です。

投稿2015/06/29 07:21

KenjiObata

総合スコア440

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

greenisland

2015/06/29 08:35

ご回答ありがとうございます。 フォームの値に表示させることは出来たのですが、 その読みこんでいるファイルの一部を変更する方法がわかりませんでした。 file関数を勉強してトライしてみようと思います。
KenjiObata

2015/06/29 11:19

もし、私が同様のことをするならば、config.php はデフォルト値としてそのままにしておき、別ファイルで ini.php というような、設定専用のファイルを作ります。 呼び出し毎に以下の処理を行い、ini.phpが消えていてもエラーにならないようにしておきます。 ini.php ---------- $site_title = "ini設定タイトル"; $date_check = false; $last_days = 20; ------------------------- // 設定値をでファインからセット $site_title = SITE_TITLE; $date_check = DATE_CHECK; $last_days = LAST_DAYS; if (file_exists(ini.php) == true) // 設定ファイルが存在するかチェック { // ini.php の値をセット $site_title = $site_title_ini; $date_check = $date_check_ini; $last_days = $last_days_ini; }
greenisland

2015/06/29 12:40

なるほど、初期設定ファイルがあれば値をセットして、 無ければデフォルトの設定ファイルの値が適用されるわけですね。 そういうやり方もあるんですね、大変参考になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問