FastAdmin 支持 php7.4 的教程
从安装到运行,一条龙走到底。
作者:Violet_Ice紫冰
日期:2020-12-01
1. 前置
默认你们已经安装了 NodeJS
和 Composer
。
php命令行版本:7.4.*
ThinkPHP:5.0.24
1.1. 下载安装
>
表示执行命令
# 设置过国内镜像源的请忽略> npm config set registry https://registry.npm.taobao.org# 安装过bower的请忽略> npm i -g bower# 安装FastAdmin> git clone https://gitee.com/karson/fastadmin.git fa_test> cd fa_test> bower install> composer install
1.2. 运行访问
# 启动FastAdmin> php -S 127.0.0.1:8080 -t public[Tue Dec 1 19:35:46 2020] PHP 7.4.13 Development Server (http://127.0.0.1:8080) started# 出现如上所述,表示 php 内置 Server 启动成功
打开浏览器,访问http://127.0.0.1:8080
出现安装页面。
2. 安装
数据库,管理员信息填写完成,点击安装。出现如下所述。
php7.4开始不再支持使用花括号 {}
来访问数组和字符串成员。
出现问题就要解决,把 {}
改成 []
就可以了。那么改那个文件呢?
引用一下我的开发三步走,后来人就可以站在前辈们铺好的路上了。
第一步,debug
第二步,看文档
第三步,翻源码
2.1. 开启debug
> cp .env.sample .env
编辑.env
,改成如下内容。
[app]debug = truetrace = true[database]# hostname = 192.168.1.101# database = fastadmin# username = root# password = root# hostport = 3306# prefix = fa_
2.2. 找到错误位置
编辑application/admin/command/Install.php: 132-138行
try { $adminName = $this->installation($mysqlHostname, $mysqlHostport, $mysqlDatabase, $mysqlUsername, $mysqlPassword, $mysqlPrefix, $adminUsername, $adminPassword, $adminEmail, $siteName);} catch (PDOException $e) { throw new Exception($e->getMessage());} catch (Exception $e) { thinkLog::error($e); // 在这里打印错误日志 return $output(0, $e->getMessage());}
日志如下:
[ error ] thinkexceptionErrorException::__set_state(array( 'severity' => 8192, 'data' => array ( ), 'message' => 'Array and string offset access syntax with curly braces is deprecated', 'string' => '', 'code' => 0, 'file' => 'thinkphp/library/think/db/Query.php', 'line' => 400, // 后面的就可以忽略了
message
和安装页的错误提示是一样的
错误位置是thinkphp/library/think/db/Query.php
的400行。
找到就可以修改了,把 {}
改成 []
即可。
2.3. 安装成功
修改完后不用刷新页面,直接点击安装。安装成功!
3. 结尾
简单的用了一下,暂时还没发现别的问题。稳定性待测。
FastAdmin 支持 php7.4 教程完毕
Violet_ice紫冰 写于 2020-12-1 21:12:26
4. 番外
写的时候发现了一个小bug。重复安装完成后,由于 $adminName
为空字符串。所以点进入后台是跳到前台的。
文件application/admin/command/Install.php
# 200行$adminFile = ROOT_PATH . 'public' . DS . 'admin.php';# 下面是我加的,都重装了,入口文件还是改个名比较好。# 因为本身工作目录就在public,所以不需要用chdir()。# php的glob能不能使用正则,这一点我没研究明白。有没有懂行的大佬,麻烦告知一下。if (!is_file($adminFile)) { $files = glob('*.php'); foreach ($files as $file) { if (preg_match('/^[a-zA-Z]{10}.php$/', $file, $flag)) { $adminFile = ROOT_PATH . 'public' . DS . $flag[0]; break; } } unset($files); // 数组开销比较大用完就删掉,$file字符串就无所谓了。}# 248行$adminName = '';if (is_file($adminFile)) { $adminName = Random::alpha(10) . '.php'; rename($adminFile, ROOT_PATH . 'public' . DS . $adminName);}
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, Fastadmin, ClassCMS, LeCMS, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。