4

私のサイトの管理エリアには、サイトが使用する mysql データベースのホスト名、ユーザー名、およびパスワード用のフォームがあります。現在、これらの値は php クラスにハードコードされています。しかし、フォームがphpクラスの変数を編集できるように誰がリンクできますか(そして結果をサーバーに保持します。つまり、変数はハードコーディングされます)。私は通常、このようなものをデータベースに保持しますが、明らかにこれはできません。

4

2 に答える 2

5

構成ファイルを作成し、Web サーバーにそのファイルへの書き込みアクセスを許可します。次に、DB 構成をこのファイルに保存するスクリプトを作成するだけです。例えば

$fh = fopen('config.php', 'w');
fwrite($fh, chr(60) . "?php\n");
fwrite($fh, sprintf("define('DB_HOST', '%s');\n", addslashes($_POST['DB_HOST'])));
fwrite($fh, sprintf("define('DB_USER', '%s');\n", addslashes($_POST['DB_USER'])));
fwrite($fh, sprintf("define('DB_PASS', '%s');\n", addslashes($_POST['DB_PASS'])));
fclose($fh);
于 2010-07-25T09:34:28.880 に答える
4

値を構成ファイルに保持します。また、Web からアクセスできないことを確認してください。

最も簡単な解決策は、構成配列に値を保持することです。ユーザーが値を入力し、それから配列を生成してから、file_put_contents("config.php", "<?php $config = " . var_export($config)). このメソッドを使用すると、構成配列が必要なときはいつでも、必要なことはすべてinclude config.phpそこにあります。

これはテストされていないコードであり、例示のみを目的としています。状況によっては、競合状態を解決する必要があるかもしれませんが、それだけでfile_put_contentsは不十分です。上記のコードの主なポイントは次のとおりです:var_export有効な php コードを返します。これはeval(十分に悪意のある場合) またはファイルにエコーして後で含めることができます。

于 2010-07-25T09:36:13.660 に答える