从自定义Web应用程序创建安装脚本

时间:2017-07-19 11:56:03

标签: php install

我正在寻找使用 install.php 的选项,其中用户放置所有需要的数据,例如db host,db username,db pwd等。脚本必须将它放到名为config的php类中。

public function __construct(){
    $this->site_address = '';
    $this->db_prefix = '';
    $this->site_desc = '';
    $this->site_title = '';
    $this->hash = '';
    $this->sidebar = false;
    $this->db_host = '';
    $this->db_name = '';
    $this->db_pass = '';
    $this->db_user = '';
    $this->db_port = 3306;
    $this->folder = NULL;
    $this->mailserver = '';
    $this->mailport = '';
    $this->mailuser = '';
    $this->mailpassword ='';

}

如何将 install.php 页面上的数据放到此类构造函数中? 我正在考虑获取内容 - >查找$this->db_host =并从表单中替换'' '.$_POST['db_host'].',然后将内容放入文件并保存,但我不知道具体如何。请帮忙。

1 个答案:

答案 0 :(得分:0)

只需将变量添加到__construct()

即可
public function __construct($site_address='',$db_prefix='',$site_desc='',$site_title='',$hash='',$sidebar=false){
    $this->site_address = $site_address;
    $this->db_prefix = $db_prefix;
    $this->site_desc = $site_desc;
    $this->site_title = $site_title;
    $this->hash = $hash;
    $this->sidebar = $sidebar;

    // And so on 

}

然后从表单中执行new yourAwesomeClassName('http://hello','$_POST['db_prefix']',...)

不要忘记一些事情:

  • 绝不信任用户输入
  • 在使用之前清理/检查所有数据/输入格式
  • 不要用纯文本保存密码,至少哈希,当然除了那些之外,更好的是使用盐。

根据评论更新

(以下可能不是一个好习惯,但我可以接受建议,因为这是my current work的一部分)

如果您需要保存数据,我建议您使用通用文件,例如......

通用文件

Source

class Database
{

    /**
     * Database host
     * @var string Default: 'your-database-host'
     */
    const DB_HOST = 'your-database-host';

    /**
     * Database name
     * @var string Default: 'your-database-name'
     */
    const DB_NAME = 'your-database-name';

    // And so on

}

然后你需要一个写数据的函数

写入默认数据

Source

public static function writeDatabaseConfig($data)
    {
        if (is_array($data)) {
            $root = static::getRoot();
            $databaseFile = $root . 'App' . DIRECTORY_SEPARATOR . 'Config' . DIRECTORY_SEPARATOR . 'Database.php';
            $currentFile = file_get_contents($databaseFile);
            if (strpos($currentFile, 'your') !== false) {
                $oldToNew = array(
                    'host' => 'your-database-host',
                    'name' => 'your-database-name',
                );
                foreach ($oldToNew as $key => $value) {
                    if (isset($data[$key])) {
                        $currentFile = str_replace($value, $data[$key], $currentFile);
                    }
                }
                if (file_put_contents($databaseFile, $currentFile)) {
                    return true;
                }
                return false;
            }
            return false;
        }
        return false;
    }

__construct()的最后,您只需致电writeDatabaseConfig()即可撰写您的数据。完成后,您可以拨打ConfigClass::DB_HOST来获取您的信息,例如......