1

サイトの実行に必要な情報を保持する、サイトの 1 つの config.php ファイルがあります。次のようになります。

<?php

$site_name="The Site";
$base_url = "http://site.com";
$upload_path = "/images";

?>

そこから値を取得するのは簡単です。require を使用するだけです'config.php';が、html フォームからこれを追加するオプションを指定するにはどうすればよいですか? どうすれば値を更新できますか? 私が念頭に置いている方法の 1 つは、次のように fopen と fsave を使用することです。

<?php
$filename = 'config.php';
$somecontent = "config here";


if (is_writable($filename)) {


    if (!$handle = fopen($filename, 'w')) {
         echo "Cannot open file ($filename)";
         exit;
    }

    // Write $somecontent to our opened file.
    if (fwrite($handle, $somecontent) === FALSE) {
        echo "Cannot write to file ($filename)";
        exit;
    }

    echo "Success, wrote ($somecontent) to file ($filename)";

    fclose($handle);

} else {
    echo "The file $filename is not writable";
}
?>

しかし、これはこれを行う標準的な方法ですか?これは、これらすべての cms が構成ファイルを記述する方法ですか?

4

7 に答える 7

4
$cfg['sitename'] = $_POST['sitename'];

$file     = "config.php";
$contents = "<?php\r\n\$cfg=".var_export($cfg,1).";\r\n?>";

file_put_contents($file,$contents);
于 2010-08-07T08:57:16.967 に答える
3

まあ、私は PHP スクリプト (config.php) を書き直すという考えは好きではありません。

より良い解決策は、config.ini ファイル (ファイルへのアクセスを保護する必要があります。.htaccess ファイルを介して行うか、ファイルを document_root スコープから移動することができます) を用意し、ファイルを読み取ることだと思います。

config.ini コンテンツ:

 key1 = value
 key2 = value
 key3 = value
 key4 = value

ノート:

  • config.ini は config.php よりも少し遅くなりますが、重要でないサイトでは問題ありません。
  • config.ini は、データベースを使用するよりも優れたオプションである必要があります
  • config.ini の利点として、誰も config.php に php スクリプトを追加できないという事実がわかりました。
  • PHP には、ini ファイルを解析するための関数parse_ini_fileが含まれています (使用例)
  • ini ファイルの内容をセクションとモードに分割できます。

 [Production]
 mysql_server = value
 mysql_username = value
 ...

[Development] mysql_server = value mysql_username = value ...

于 2010-08-07T08:44:15.480 に答える
2

.php ファイルへの書き込みは、まったくお勧めできません。構成をデータベース、.ini ファイル、または xml ファイルに保存することをお勧めします。この「ストレージ」を構成に使用すると、読み書きが非常に簡単になります。

注意: Web からのアクセスを避けるために、.ini、.xml ファイルをドキュメント ルート ディレクトリから配置する必要があることに注意してください。

また、Zend Config http://framework.zend.com/manual/ru/zend.config.htmlをチェックして、構成への書き込みが OOP MVC フレームワークでどのように実装されているかを確認することをお勧めします。

于 2010-08-07T08:43:00.897 に答える
1

私はしばらくの間tszmingのテンプレートソリューションを使用してきましたが、それは正常に機能します-Smartyまたは他のテンプレートシステムにすでに慣れている場合は、構成を保存するだけでは手間がかかりすぎる可能性があります。

より簡単な解決策は、すべての構成オプションを配列に入れ、JSONとしてエンコードされたファイルに保持することです。各スクリプトの開始時に、ユーザーfile_get_contents()json_decode()設定ファイルを配列に追加します。現在のオプションを保存するときはいつでもjson_encode()、options配列を使用して、を使用して設定ファイルに書き込みますfile_put_contents()。これにより、PHPは最小限の手間で構成の読み取りと書き込みを行うことができますが、必要に応じてテキストエディターで構成を編集することもできます。

于 2010-08-07T20:30:29.963 に答える
1

Smartyなどのテンプレートエンジンを使用して、config.phpのテンプレートを作成できます。

config.tpl

<?php
     // DB Settings
     $db_host = "{$db->host}";
     $db_user = "{$db->user}";
     $db_password = "{$db->password}";
     ...

そして、Smartyを使用してconfig.phpをレンダリングし、出力をキャプチャして実際の構成ファイルに保存します。

<?php
      $smarty->assign('db', $db);
      $output = $smarty->fetch('config.tpl');
      // ...save the output into config.php

このアプローチを使用する利点は、構成ファイルのレイアウトとコンテンツを分離できることです。たとえば、構成ファイルにコメントを追加したり、アイテムの順序を簡単に並べたりできます。

また、このアプローチを使用すると、他の人が提案しているように、 INIXML形式などの他の形式に簡単に移行できます。

于 2010-08-07T09:13:18.760 に答える
0

個人的な経験からの私の提案は、最も基本的なものを構成ファイル(データベース接続)に保持し、その他すべてをデータベーステーブルに保持することです。本当に必要な場合を除いて、サーバーに何かを書き込まないようにする必要があります。そうしないと、アクセス許可の問題、セキュリティの問題などが発生します...

このようなスクリプトを配布したい場合、それは大きくなりつつあります。

残りは、上記の答えと非常によく似ています。

<?php
$config = "<?php\r\n";

$file     = "/path/to/config.php";

foreach ( $_POST [ 'config' ] as $config_label => $config_value ):
    $config .= "$$config_label = '{$config_value}'\r\n";
endforeach;

file_put_contents($file,$config);

幸運を。

于 2010-08-07T11:17:52.203 に答える
0

これが、ほとんどのCMSの管理パネルで構成ファイルに直接書き込むことができる方法だと思いますが、次のようになります。

  • これを行う前に、送信者が管理者として認証されていることを絶対に確認する必要があります。
  • REGISTER_GLOBALSできればオフにすることもお勧めしますが、これは特にこれに関連するものよりも一般的なセキュリティ上の懸念事項です。
于 2010-08-07T08:18:24.627 に答える