PDOException (1040)
SQLSTATE[HY000] [1040] Too many connections PDOException thrown with message "SQLSTATE[HY000] [1040] Too many connections" Stacktrace: #13 PDOException in D:\wwwroot\eme-cn.com\framework\base\db\MysqlPdoDriver.php:224 #12 PDO:__construct in D:\wwwroot\eme-cn.com\framework\base\db\MysqlPdoDriver.php:224 #11 framework\base\db\MysqlPdoDriver:_connect in D:\wwwroot\eme-cn.com\framework\base\db\MysqlPdoDriver.php:255 #10 framework\base\db\MysqlPdoDriver:_getWriteLink in D:\wwwroot\eme-cn.com\framework\base\db\MysqlPdoDriver.php:245 #9 framework\base\db\MysqlPdoDriver:_getReadLink in D:\wwwroot\eme-cn.com\framework\base\db\MysqlPdoDriver.php:32 #8 framework\base\db\MysqlPdoDriver:query in D:\wwwroot\eme-cn.com\framework\base\db\MysqlPdoDriver.php:27 #7 framework\base\db\MysqlPdoDriver:select in D:\wwwroot\eme-cn.com\framework\base\Model.php:97 #6 framework\base\Model:select in D:\wwwroot\eme-cn.com\app\admin\model\ConfigModel.php:19 #5 app\admin\model\ConfigModel:getInfo in D:\wwwroot\eme-cn.com\app\base\controller\BaseController.php:58 #4 app\base\controller\BaseController:setCont in D:\wwwroot\eme-cn.com\app\base\controller\BaseController.php:44 #3 app\base\controller\BaseController:__construct in D:\wwwroot\eme-cn.com\app\home\controller\SiteController.php:14 #2 app\home\controller\SiteController:__construct in D:\wwwroot\eme-cn.com\framework\base\App.php:62 #1 framework\base\App:run in D:\wwwroot\eme-cn.com\framework\core.php:125 #0 require in D:\wwwroot\eme-cn.com\index.php:8
Stack frames (14)
13
PDOException
…\framework\base\db\MysqlPdoDriver.php224
12
PDO __construct
…\framework\base\db\MysqlPdoDriver.php224
11
framework\base\db\MysqlPdoDriver _connect
…\framework\base\db\MysqlPdoDriver.php255
10
framework\base\db\MysqlPdoDriver _getWriteLink
…\framework\base\db\MysqlPdoDriver.php245
9
framework\base\db\MysqlPdoDriver _getReadLink
…\framework\base\db\MysqlPdoDriver.php32
8
framework\base\db\MysqlPdoDriver query
…\framework\base\db\MysqlPdoDriver.php27
7
framework\base\db\MysqlPdoDriver select
…\framework\base\Model.php97
6
framework\base\Model select
…\app\admin\model\ConfigModel.php19
5
app\admin\model\ConfigModel getInfo
…\app\base\controller\BaseController.php58
4
app\base\controller\BaseController setCont
…\app\base\controller\BaseController.php44
3
app\base\controller\BaseController __construct
…\app\home\controller\SiteController.php14
2
app\home\controller\SiteController __construct
…\framework\base\App.php62
1
framework\base\App run
…\framework\core.php125
0
require
…\index.php8
D:\wwwroot\eme-cn.com\framework\base\db\MysqlPdoDriver.php
    {
        $dbArr = [];
        if (false == $isMaster && !empty($this->config['DB_SLAVE'])) {
            $master = $this->config;
            unset($master['DB_SLAVE']);
            foreach ($this->config['DB_SLAVE'] as $k=>$v) {
                $dbArr[] = array_merge($master, $this->config['DB_SLAVE'][$k]);
            }
            shuffle($dbArr);
        } else {
            $dbArr[] = $this->config;
        }
 
        $pdo = null;
        $error = '';
        foreach ($dbArr as $db) {
            $dsn = "mysql:host={$db['DB_HOST']};port={$db['DB_PORT']};dbname={$db['DB_NAME']};charset={$db['DB_CHARSET']}";
 
            try {
                $pdo = new \PDO($dsn, $db['DB_USER'], $db['DB_PWD']);
                break;
            } catch (PDOException $e) {
                $error = $e->getMessage();
            }
        }
 
        if (!$pdo) {
            throw new \Exception('connect database error :'.$error, 500);
        }
        $pdo->exec("set names {$db['DB_CHARSET']}");
 
        return $pdo;
    }
 
    protected function _getReadLink()
    {
        if (!isset($this->readLink)) {
            try {
                $this->readLink = $this->_connect(false);
            } catch (\Exception $e) {
D:\wwwroot\eme-cn.com\framework\base\db\MysqlPdoDriver.php
    {
        $dbArr = [];
        if (false == $isMaster && !empty($this->config['DB_SLAVE'])) {
            $master = $this->config;
            unset($master['DB_SLAVE']);
            foreach ($this->config['DB_SLAVE'] as $k=>$v) {
                $dbArr[] = array_merge($master, $this->config['DB_SLAVE'][$k]);
            }
            shuffle($dbArr);
        } else {
            $dbArr[] = $this->config;
        }
 
        $pdo = null;
        $error = '';
        foreach ($dbArr as $db) {
            $dsn = "mysql:host={$db['DB_HOST']};port={$db['DB_PORT']};dbname={$db['DB_NAME']};charset={$db['DB_CHARSET']}";
 
            try {
                $pdo = new \PDO($dsn, $db['DB_USER'], $db['DB_PWD']);
                break;
            } catch (PDOException $e) {
                $error = $e->getMessage();
            }
        }
 
        if (!$pdo) {
            throw new \Exception('connect database error :'.$error, 500);
        }
        $pdo->exec("set names {$db['DB_CHARSET']}");
 
        return $pdo;
    }
 
    protected function _getReadLink()
    {
        if (!isset($this->readLink)) {
            try {
                $this->readLink = $this->_connect(false);
            } catch (\Exception $e) {
D:\wwwroot\eme-cn.com\framework\base\db\MysqlPdoDriver.php
        return $pdo;
    }
 
    protected function _getReadLink()
    {
        if (!isset($this->readLink)) {
            try {
                $this->readLink = $this->_connect(false);
            } catch (\Exception $e) {
                $this->readLink = $this->_getWriteLink();
            }
        }
 
        return $this->readLink;
    }
 
    protected function _getWriteLink()
    {
        if (!isset($this->writeLink)) {
            $this->writeLink = $this->_connect(true);
        }
 
        return $this->writeLink;
    }
 
    public function __destruct()
    {
        if ($this->writeLink) {
            $this->writeLink = null;
        }
        if ($this->readLink) {
            $this->readLink = null;
        }
    }
}
 
D:\wwwroot\eme-cn.com\framework\base\db\MysqlPdoDriver.php
            } catch (PDOException $e) {
                $error = $e->getMessage();
            }
        }
 
        if (!$pdo) {
            throw new \Exception('connect database error :'.$error, 500);
        }
        $pdo->exec("set names {$db['DB_CHARSET']}");
 
        return $pdo;
    }
 
    protected function _getReadLink()
    {
        if (!isset($this->readLink)) {
            try {
                $this->readLink = $this->_connect(false);
            } catch (\Exception $e) {
                $this->readLink = $this->_getWriteLink();
            }
        }
 
        return $this->readLink;
    }
 
    protected function _getWriteLink()
    {
        if (!isset($this->writeLink)) {
            $this->writeLink = $this->_connect(true);
        }
 
        return $this->writeLink;
    }
 
    public function __destruct()
    {
        if ($this->writeLink) {
            $this->writeLink = null;
        }
D:\wwwroot\eme-cn.com\framework\base\db\MysqlPdoDriver.php
 
    public function __construct($config = [])
    {
        $this->config = $config;
    }
 
    public function select($table, array $condition = [], $field = '*', $order = null, $limit = null)
    {
        $field = !empty($field) ? $field : '*';
        $order = !empty($order) ? ' ORDER BY '.$order : '';
        $limit = !empty($limit) ? ' LIMIT '.$limit : '';
        $table = $this->_table($table);
        $condition = $this->_where($condition);
 
        return $this->query("SELECT {$field} FROM {$table} {$condition['_where']} $order $limit", $condition['_bindParams']);
    }
 
    public function query($sql, array $params = [])
    {
        $sth = $this->_bindParams($sql, $params, $this->_getReadLink());
        Hook::listen('dbQueryBegin', [$sql, $params]);
        if ($sth->execute()) {
            $data = $sth->fetchAll(\PDO::FETCH_ASSOC);
            Hook::listen('dbQueryEnd', [$this->getSql(), $data]);
 
            return $data;
        }
 
        $err = $sth->errorInfo();
        Hook::listen('dbException', [$this->getSql(), $err[2]]);
 
        throw new \Exception('Database SQL: "'.$this->getSql().'". ErrorInfo: '.$err[2], 500);
    }
 
    public function execute($sql, array $params = [])
    {
        $sth = $this->_bindParams($sql, $params, $this->_getWriteLink());
        Hook::listen('dbExecuteBegin', [$sql, $params]);
        if ($sth->execute()) {
            $affectedRows = $sth->rowCount();
D:\wwwroot\eme-cn.com\framework\base\db\MysqlPdoDriver.php
{
    protected $config = [];
    protected $writeLink = null;
    protected $readLink = null;
    protected $sqlMeta = ['sql'=>'', 'params'=>[], 'link'=>null];
 
    public function __construct($config = [])
    {
        $this->config = $config;
    }
 
    public function select($table, array $condition = [], $field = '*', $order = null, $limit = null)
    {
        $field = !empty($field) ? $field : '*';
        $order = !empty($order) ? ' ORDER BY '.$order : '';
        $limit = !empty($limit) ? ' LIMIT '.$limit : '';
        $table = $this->_table($table);
        $condition = $this->_where($condition);
 
        return $this->query("SELECT {$field} FROM {$table} {$condition['_where']} $order $limit", $condition['_bindParams']);
    }
 
    public function query($sql, array $params = [])
    {
        $sth = $this->_bindParams($sql, $params, $this->_getReadLink());
        Hook::listen('dbQueryBegin', [$sql, $params]);
        if ($sth->execute()) {
            $data = $sth->fetchAll(\PDO::FETCH_ASSOC);
            Hook::listen('dbQueryEnd', [$this->getSql(), $data]);
 
            return $data;
        }
 
        $err = $sth->errorInfo();
        Hook::listen('dbException', [$this->getSql(), $err[2]]);
 
        throw new \Exception('Database SQL: "'.$this->getSql().'". ErrorInfo: '.$err[2], 500);
    }
 
    public function execute($sql, array $params = [])
D:\wwwroot\eme-cn.com\framework\base\Model.php
        $limit = $this->options['limit'];
        $this->options['limit'] = '';
 
        $table = $this->_getTable();
        $where = $this->_getWhere();
 
        //Pagination
        if (!empty($this->options['pager'])) {
            $count = $this->getDb()->Count($table, $where);
            $this->_pager(
                $this->options['pager']['page'],
                $this->options['pager']['pageSize'],
                $this->options['pager']['scope'] = 10,
                $count
            );
            $this->options['pager'] = [];
            $limit = $this->pager['offset'].','.$this->pager['limit'];
        }
 
        return $this->getDb()->select($table, $where, $field, $order, $limit);
    }
 
    public function insert()
    {
        if (empty($this->options['data']) || !is_array($this->options['data'])) {
            return false;
        }
 
        return $this->getDb()->insert($this->_getTable(), $this->_getData());
    }
 
    public function update()
    {
        if (empty($this->options['where']) || !is_array($this->options['where'])) {
            return false;
        }
        if (empty($this->options['data']) || !is_array($this->options['data'])) {
            return false;
        }
 
D:\wwwroot\eme-cn.com\app\admin\model\ConfigModel.php
<?php
 
namespace app\admin\model;
 
use app\base\model\BaseModel;
 
/**
 * 网站配置.
 */
class ConfigModel extends BaseModel
{
    /**
     * 获取信息.
     *
     * @return array 网站配置
     */
    public function getInfo()
    {
        $list = $this->select();
        $config = [];
        foreach ($list as $key => $value) {
            $config[$value['name']] = $value['data'];
        }
 
        return $config;
    }
 
    /**
     * 更新信息.
     *
     * @param int $siteId 站点配置ID
     *
     * @return bool 更新状态
     */
    public function saveData()
    {
        $data = request('post.');
        if (empty($data)) {
            $this->error = '数据创建失败!';
 
D:\wwwroot\eme-cn.com\app\base\controller\BaseController.php
        if (!config('APP_SYSTEM')) {
            if (1 != config('APP_STATE') || 1 != config('APP_INSTALL')) {
                $this->error('该应用尚未开启!', false);
            }
        }
        $this->setCont();
 
        //执行初始化
        if (method_exists($this, 'init')) {
            $this->init();
        }
    }
 
    /**
     * 设置站点基本信息.
     */
    protected function setCont()
    {
        // 读取站点配置
        $siteConfig = target('admin/Config')->getInfo();
 
        // 多语言
        if (defined('LANG_OPEN')) {
            // 赋值到模板
 
            $lang_list = unserialize(LANG_CONFIG)['LANG_LIST'];
            foreach ($lang_list as $key=>$item) {
                if (config('REWRITE_ON')) {
                    $url = '/'.$key;
                } else {
                    $url = '?'.http_build_query([
                        'lang' => $key,
                    ]);
                }
 
                // 是否已选择(用于高亮判断)
                $lang_list[$key]['changed'] = ($key == APP_LANG) ? true : false;
                $lang_list[$key]['url'] = $url;
            }
 
D:\wwwroot\eme-cn.com\app\base\controller\BaseController.php
        $lock = ROOT_PATH.'install.lock';
        if (!is_file($lock)) {
            $this->redirect(url('install/Index/index'));
        }
        //引入扩展函数
        require_once APP_PATH.'base/util/Function.php';
        //引入当前模块配置
        $config = load_config('config');
        if (!empty($config)) {
            foreach ((array) $config as $key => $value) {
                config($key, $value);
            }
        }
        //判断模块是否开启
        if (!config('APP_SYSTEM')) {
            if (1 != config('APP_STATE') || 1 != config('APP_INSTALL')) {
                $this->error('该应用尚未开启!', false);
            }
        }
        $this->setCont();
 
        //执行初始化
        if (method_exists($this, 'init')) {
            $this->init();
        }
    }
 
    /**
     * 设置站点基本信息.
     */
    protected function setCont()
    {
        // 读取站点配置
        $siteConfig = target('admin/Config')->getInfo();
 
        // 多语言
        if (defined('LANG_OPEN')) {
            // 赋值到模板
 
            $lang_list = unserialize(LANG_CONFIG)['LANG_LIST'];
D:\wwwroot\eme-cn.com\app\home\controller\SiteController.php
<?php
 
namespace app\home\controller;
 
use app\base\controller\BaseController;
 
/**
 * 前台公共类.
 */
class SiteController extends BaseController
{
    public function __construct()
    {
        parent::__construct();
        //设置手机版参数
        if (isset($_GET['mobile']) || MOBILE) {
            config('tpl_name', config('mobile_tpl'));
        }
 
        //设置常量
        define('TPL_NAME', config('tpl_name'));
 
        //访问统计
        target('duxcms/TotalVisitor')->addData();
        target('duxcms/TotalSpider')->addData();
    }
 
    /**
     * 前台模板显示 调用内置的模板引擎.
     *
     * @param string $name 模板名
     * @param bool   $type 模板输出
     *
     * @return void
     */
    protected function siteDisplay($name = '', $type = true)
    {
        // 多语言
        if (defined('LANG_OPEN')) {
            $tpl = THEME_NAME.'/'.TPL_NAME.'/'.APP_LANG.'/'.$name;
D:\wwwroot\eme-cn.com\framework\base\App.php
            Hook::listen('routeParseUrl', [Config::get('REWRITE_RULE'), Config::get('REWRITE_ON')]);
 
            //default route
            if (!defined('APP_NAME') || !defined('CONTROLLER_NAME') || !defined('ACTION_NAME')) {
                Route::parseUrl(Config::get('REWRITE_RULE'), Config::get('REWRITE_ON'));
            }
 
            if (defined('API_STATUS')) {
                $controller = '\\app\\api\\controller\\IndexController';
                $action = 'index';
            } else {
                $controller = '\app\\'.APP_NAME.'\controller\\'.CONTROLLER_NAME.'Controller';
                $action = ACTION_NAME;
            }
            //execute action
 
            if (!class_exists($controller)) {
                throw new \Exception("Controller '{$controller}' not found", 404);
            }
            $obj = new $controller();
            if (!method_exists($obj, $action)) {
                throw new \Exception("Action '{$controller}::{$action}()' not found", 404);
            }
 
            Hook::listen('actionBefore', [$obj, $action]);
            $obj->$action();
            Hook::listen('actionAfter', [$obj, $action]);
        } catch (\Exception $e) {
            // //关闭调试或者是线上版本,不显示详细错误
            // if (false==config('DEBUG') || 'production' == config('ENV')) {
            //     $home = new \app\home\controller\IndexController();
            //     $home->error404();
            // } else {
            //     throw $e;
            // }
            Hook::listen('appError', [$e]);
        }
 
        Hook::listen('appEnd');
    }
D:\wwwroot\eme-cn.com\framework\core.php
                foreach (glob($fileDIR.'*.php') as $file) {
                    $fileList[$fileDIR][] = $file;
                }
            }
 
            $fileBase = $baseDir.str_replace('\\', DIRECTORY_SEPARATOR, $namespace).DIRECTORY_SEPARATOR.$className;
            foreach ($fileList[$fileDIR] as $file) {
                if (false !== stripos($file, $fileBase)) {
                    require $file;
 
                    return true;
                }
            }
        }
    }
 
    return false;
});
 
App::run();
 
D:\wwwroot\eme-cn.com\index.php
<?php
 
if (version_compare(PHP_VERSION, '5.6.0', '<')) {
    header('Content-Type: text/html; charset=UTF-8');
    echo 'PHP环境不能低于5.6';
    exit;
}
require 'framework/core.php';
 

Environment & details:

Key Value
urlname yuetianxia
empty
empty
empty
empty
Key Value
PATH C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;C:\Go\bin;C:\Program Files\python;C:\Program Files\python\Scripts;;D:\BtSoft\panel\script;
SYSTEMROOT C:\Windows
COMSPEC C:\Windows\system32\cmd.exe
PATHEXT .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
WINDIR C:\Windows
_FCGI_SHUTDOWN_EVENT_ 24980
HTTP_CONNECTION close
SCRIPT_NAME /index.php
REQUEST_URI /yuetianxia/
QUERY_STRING
REQUEST_METHOD GET
SERVER_PROTOCOL HTTP/1.1
GATEWAY_INTERFACE CGI/1.1
REDIRECT_URL /yuetianxia/
REMOTE_PORT 44610
SCRIPT_FILENAME D:/wwwroot/eme-cn.com/index.php
SERVER_ADMIN webmaster@example.com
CONTEXT_DOCUMENT_ROOT D:/wwwroot/eme-cn.com
CONTEXT_PREFIX
REQUEST_SCHEME http
DOCUMENT_ROOT D:/wwwroot/eme-cn.com
REMOTE_ADDR 34.236.152.203
SERVER_PORT 80
SERVER_ADDR 172.31.101.90
SERVER_NAME www.eme-cn.com
SERVER_SOFTWARE Apache/2.4.54 (Win64) OpenSSL/1.1.1p mod_fcgid/2.3.9a
SERVER_SIGNATURE
SystemRoot C:\Windows
HTTP_HOST www.eme-cn.com
HTTP_USER_AGENT claudebot
HTTP_ACCEPT */*
SCRIPT_URI http://www.eme-cn.com/yuetianxia/
SCRIPT_URL /yuetianxia/
REDIRECT_STATUS 200
REDIRECT_SCRIPT_URI http://www.eme-cn.com/yuetianxia/
REDIRECT_SCRIPT_URL /yuetianxia/
FCGI_ROLE RESPONDER
PHP_SELF /index.php
REQUEST_TIME_FLOAT 1710826347.4019
REQUEST_TIME 1710826347
empty
0. Whoops\Handler\PrettyPageHandler