1:错误
SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
2:修改
修改mysql配置文件(ProgramData\MySQL\MySQL Server 8.0\my.ini)指定配置项
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
#MySQL8中用户的认证类型(Authentication type)默认为cacheing sha2 password
default_authentication_plugin=mysql_native_password
3:重启mysql
方式一:
1:下载5和7版本的PHP
下载对应版本的php(php-Win32-VC):windows.php.net - /downloads/releases/archives/
2:解压下载的文件到指定目录
3:修改配置
拷贝文件夹下的 php.ini-developement 文件改名为php.ini然后编辑
extension_dir = "php5/ext"
date.timezone = Asia/Shanghai
4:开启一些php扩展文件(bz2;curl;fileinfo;gd2;gettext;mysqli;pdo_mysql;mbstring;shmop)
windowns:把对应的扩展前面的注释去掉(win10 64下 php7:curl开启后需要将对应版本的php目录下的libssh2.dll文件拷贝到Apache24\bin中否则不起作用;php5:需要拷贝libssh2.dll libeay32.dll ssleay32.dll)
docker方式进入容器后使用 docker-php-ext-install -j$(nproc) mysqli
官方支持的扩展(通过php -m可查看现有扩展):(bcmath, calendar, exif, gettext, sockets, dba,mysqli, pcntl, pdo_mysql, shmop, sysvmsg, sysvsem, sysvshm)
bz2 扩展的安装, 读写 bzip2(.bz2)压缩文件
apt-get update
apt-get install -y --no-install-recommends libbz2-dev
rm -r /var/lib/apt/lists/* && \
docker-php-ext-install -j$(nproc) bz2
gd 扩展的安装. 图像处理
$ apt update && \
apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev && docker-php-source extract && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-webp-dir=/usr/include/webp/ --with-png-dir=/usr/include/ && \
docker-php-ext-install -j$(nproc) gd
php7报错需要修改命令:docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ --with-webp=/usr/include/webp/
zip 扩展的安装
$ apt-get update && \
apt-get install -y --no-install-recommends libzip-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-install -j$(nproc) zip
redis 扩展安装
下载对应版本的扩展 注意版本一定要和php版本对应否则按照不成功:
igbinary windows.php.net - /downloads/pecl/releases/igbinary/
redis windows.php.net - /downloads/pecl/releases/redis/
解压下载的扩展分别把 php_igbinary.dll和php_redis.dll拷贝到php安装目录下的ext文件夹中
修改php.ini:
添加 extension=php_igbinary.dll和extension=php_redis.dll
重启
sqlserver drivers:
Windows:
1:下载对应版本的压缩包
2:解压文件到ext目录
3:修改php.ini
添加 extension=php_sqlsrv_74_ts.dll和extension=php_pdo_sqlsrv_74_ts.dll
4:下载安装对应版本的ODBC
docker方式:
1:进入容器
2:安装odbc 参考 参考官网如果php docker镜像是php-fpm对应文档的 Debian 系统,如果是php-fpm-alpine对应Alpine Linux系统
问题&#xff1a;apt-get update 报NO_PUBKEY时执行(apt-key adv --recv-keys --keyserver keyserver.ubuntu.com <错误里的key>)并根据错误安装依赖
3&#xff1a;安装php扩展 参考 参考官网如果php docker镜像是php-fpm对应文档的 Alpine 系统&#xff0c;如果是php-fpm-alpine对应 Alpine 系统
方式二、通过docker-php-ext-install安装
docker-php-source extract # 创建并初始化 /usr/src/php目录
cd /tmp
curl -L -o /tmp/pdo_sqlsrc.tgz https://pecl.php.net/get/pdo_sqlsrv-5.9.0.tgz
curl -L -o /tmp/sqlsrc.tgz https://pecl.php.net/get/sqlsrv-5.9.0.tgz
tar zxvf pdo_sqlsrv-5.9.0.tgz
tar zxvf sqlsrv-5.9.0.tgz
mv pdo_sqlsrv-5.9.0 /usr/src/php/ext/pdo_sqlsrv
mv sqlsrv-5.9.0 /usr/src/php/ext/sqlsrv
docker-php-ext-install pdo_sqlsrv
docker-php-ext-install sqlsrv
4&#xff1a;php -m 查看安装是否成功
5&#xff1a;退出容器并重启
6&#xff1a;sqlserver 通过odbc连接mysql
下载unixODBC -> cd /opt -> tar -zxvf unixODBC-2.3.9.tar.gz -> cd unixODBC-2.3.9 -> ./configure -> make -> make install -> odbcinst –j查看
下载对应版本mysql Connector/ODBC安装包 -> dpkg -i xxx.deb -> odbcinst -q -d查看是否安装成功 -> vi /etc/odbc.ini
[mysql]
Description &#61; Data source sampleMySQL for accessing MySQL database sampleMySQL
Driver &#61; MySQL ODBC 8.0 Unicode Driver
Server &#61;
Host &#61;
Database &#61;
Port &#61; 3306
User &#61;
Password &#61;
-> isql -v mysql连接成功
其他扩展安装方法参考
https://blog.csdn.net/lggirls/article/details/89395827
5&#xff1a;在文件夹下运行cmd 输入php.exe -v 如果正常输出表示php好使
5版本运行php.exe -v报错可能需要安装VC11运行环境&#xff0c;官网下载地址如下&#xff1a;
VC9-32 http://www.microsoft.com/zh-CN/download/details.aspx?id&#61;5582
VC9-64 http://www.microsoft.com/zh-CN/download/details.aspx?id&#61;15336
VC11-32 https://www.microsoft.com/zh-CN/download/details.aspx?id&#61;30679
VC14-32 https://www.microsoft.com/en-us/download/details.aspx?id&#61;48145
6&#xff1a;修改Apache配置文件 httpd.conf
添加LoadModule切换时每次打开一个
#LoadModule php7_module "/php7/php7apache2_4.dll"
LoadModule php5_module "/php5/php5apache2_4.dll"
#
# AddHandler application/x-httpd-php .php
# AddType application/x-httpd-php .php .html
# PHPIniDir "D:/Program Files (x86)/php7/php.ini"
#
DirectoryIndex index.html index.php
AddHandler application/x-httpd-php .php
PHPIniDir "D:/Program Files (x86)/php5/php.ini"
7&#xff1a;新建文件phpinfo.php到apache的htdocs目录&#xff1b;内容为
访问phpinfo.ph输出对应版本信息说明切换php版本正常
8&#xff1a;win10 64下php7&#xff1a;curl开启后需要将对应版本的php目录下的libssh2.dll文件拷贝到Apache24\bin中否则不起作用&#xff1b;php5&#xff1a;需要拷贝libssh2.dll libeay32.dll ssleay32.dll
方式二&#xff1a;
1&#xff1a;开启Apache的vhost模式
编辑httpd.conf
打开LoadModule vhost_alias_module modules/mod_vhost_alias.so
打开Include conf/extra/httpd-vhosts.conf
打开LoadModule access_compat_module modules/mod_access_compat.so
编辑httpd-vhosts.conf
添加一个vhost如下
重启apache访问ServerName
2&#xff1a;开启vhosts后就可以配置不同项目用不同的php了
安装mod_fcgid模块&#xff0c;到apache官网下载对应版本的mod_fcgid模块 地址
下载后解压找到readme文件按照步骤修改配置
1&#xff1a;拷贝mod_fcgid.so文件到Apache24/modules/mod_fcgid.so
2&#xff1a;拷贝httpd-fcgid.conf文件到Apache24/conf/extra/httpd-fcgid.conf
3&#xff1a;修改httpd-fcgid.conf
# Fast CGI module Settings (PHP 5.3, 5.4)#FcgidInitialEnv PHPRC "D:\\php5"#FcgidInitialEnv PATH "D:\\php5;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;"#上面两项适用统一php版本&#xff0c;否则到vhosts中配置在不同项目中FcgidInitialEnv SystemRoot "C:\\Windows"FcgidInitialEnv SystemDrive "C:"FcgidInitialEnv TEMP "C:\\WINDOWS\\TEMP"FcgidInitialEnv TMP "C:\\WINDOWS\\TEMP"FcgidInitialEnv windir "C:\\WINDOWS"#设置PHP_FCGI_MAX_REQUESTS大于或等于FcgidMaxRequestsPerProcess&#xff0c;防止php-cgi进程 在处理完所有请求前退出FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
# Global mod_fcgid settings#40最大执行时间FcgidIOTimeout 300#10最大空闲时间FcgidConnectTimeout 300#8php-cgi最大的进程数FcgidMaxProcesses 1000FcgidOutputBufferSize 64ProcessLifeTime 240#500php-cgi每个进程的最大请求数FcgidMaxRequestsPerProcess 1000FcgidMinProcessesPerClass 0#限制最大请求字节FcgidMaxRequestLen 2097152#php程序最大文件上传限制50MBfastcgi模式下默认上传文件大小只有131072字节128kb,在php.ini中修改upload_max_filesize等参数无效MaxRequestLen 52428800
# Global Config Example
# Comment out next 4 lines to use per-Directory or per-VirtualHost configuration
4&#xff1a;拷贝mod_fcgid.html文件到Apache24/manual/mod/mod_fcgid.html
5&#xff1a;修改httpd.conf
LoadModule fcgid_module modules/mod_fcgid.so
Include conf/extra/httpd-fcgid.conf
6&#xff1a;修改conf/extra/httpd-vhosts.conf
Options相关配置参考&#xff1a;apache配置Options详解_bit小兵的博客-CSDN博客
7&#xff1a;.htaccess 的重定向配置
以前是这样用的RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]会出现错误&#xff0c;无法重定向到 index.php No input file specified.
修改成RewriteRule ^(.*)$ index.php [L,E&#61;PATH_INFO:$1]就好了
8&#xff1a;apache使用mod_fcgid模块后&#xff0c;php_admin_value open_basedir 参数就不起作用了&#xff0c;防止php脚本跨站必须去php.ini配置文件中设置。
[HOST&#61;www.xxx.com]
[PATH&#61;/wwwroot/]
open_basedir&#61;/wwwroot/:/tmp/
9&#xff1a;重启Apache
1&#xff1a;修改apache的httpd.conf文件
开启deflate_module和headers_module模块
添加如下代码
# 告诉 apache 对传输到浏览器的内容进行压缩
SetOutputFilter DEFLATE
# 压缩等级 9 最低是1&#xff0c;不建议按最大级别进行压缩&#xff0c;压缩率过高会占更多CPU资源
DeflateCompressionLevel 9
# 设置不对后缀gif&#xff0c;jpg&#xff0c;jpeg&#xff0c;png的图片文件进行压缩
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
# AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-Javascript application/x-httpd-php
# AddOutputFilter DEFLATE js css
2&#xff1a;验证是否开启
在浏览器调试模式下的network中查看请求的Content-Encoding 可以通过右键Name Status标题栏选择Response Headers选择显示
如果Content-Encoding列中显示gzip说明配置成功
1&#xff1a;下载Xdebug
选择和php版本对应的版本下载 Xdebug: Historical Releases
或者通过Xdebug自动匹配页面下载 Xdebug: Support — Tailored Installation Instructions
将下载的dll文件拷贝到php目录 php/ext 下
2&#xff1a;修改php/php.ini添加如下内容&#xff1a;
[Xdebug]
zend_extension&#61;"/php5/ext/php_xdebug.dll"
;允许远程IDE调试
xdebug.remote_enable&#61;on
;远程IDE所在HOST和PORT
xdebug.remote_host&#61;localhost
xdebug.remote_port&#61;9000
xdebug.remote_handler&#61;dbgp
;开启远程调试自动启动
xdebug.remote_autostart &#61; Off
;可以是任意Key&#xff0c;这里设定为PHPSTORM
xdebug.idekey &#61; "PHPSTORM"
;开启自动跟踪
xdebug.auto_trace &#61; On
xdebug.trace_output_dir&#61;"/Apache/Xdebug"
;把执行情况的分析文件写入到指定目录中
xdebug.profiler_enable&#61;on
xdebug.profiler_output_dir&#61;"/Apache/Xdebug"
3&#xff1a;重启apache
4&#xff1a;idea 配置Xdebug
【File】->【Settings】->【Languages & Frameworks】->【Servers】添加一个server
配置Deployment&#xff1a;如果项目在apache中则不需要此配置&#xff0c;如果项目不在apache需要通过配置这个来上传代码到apache中。此项配置也可以用来远程调试
最后配置一个PHP Web Page服务
最后点击debug图标启动调试即可
在所有环境都成功部署好后&#xff0c;有的在运行应用时&#xff0c;会出现"Primary script unknown"错误&#xff0c;一般这是由于nginx和php-fpm的用户不同导致的。把nginx.conf和php-fpm.d/www.conf 的user设为同一个就可以了。
修改web目录的权限&#xff1a;chown www-data:www-data web目录 -R chmod 755 web目录 -R
1&#xff1a;在页头使用date_default_timezone_set()设置 date_default_timezone_set(&#39;PRC&#39;); //东八时区 echo date(&#39;Y-m-d H:i:s&#39;);
2&#xff1a;在页头使用 ini_set(&#39;date.timezone&#39;,&#39;PRC&#39;);或ini_set(&#39;date.timezone&#39;,&#39;Asia/Shanghai&#39;);
3&#xff1a;修改 php.ini的date.timezone去掉前面的分号修改为date.timezone &#61; "Asia/Shanghai" (Asia/Shanghai和PRC都可以)
4&#xff1a;重启
1&#xff1a;配置database.php
在默认数据库后面添加 &#39;db2&#39; &#61;> [&#39;type&#39;&#61;>&#39;sqlsrv&#39;,&#39;hostname&#39;&#61;> &#39;127.0.0.1&#39;,&#39;database&#39;&#61;> &#39;******&#39;,&#39;username&#39;&#61;> &#39;sa&#39;,&#39;password&#39;&#61;> &#39;root&#39;,&#39;hostport&#39;&#61;> &#39;1433&#39;,&#39;prefix&#39;&#61;> &#39;&#39;,],
3&#xff1a;使用
Db::connect(&#39;db2&#39;) -> name(&#39;xx&#39;) -> where([[&#39;xxx&#39;,&#39;&#61;&#39;,&#39;0101001&#39;]]) -> limit(0, 10) -> select();// prefix生效
Db::connect(&#39;db2&#39;) -> table(&#39;xx&#39;) -> where([[&#39;xxx&#39;,&#39;&#61;&#39;,&#39;0101001&#39;]]) -> limit(0, 10) -> select();// prefix不生效
修配置文件 /usr/local/etc/php-fpm.d/www.conf
pm&#61;dynamic 设置为static&#xff0c;系统会开启设置的数量个php-fpm进程&#xff1b;设置为dynamic&#xff0c;系统会在php-fpm运行开始时启动pm.start_servers个php-fpm进程&#xff0c;然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。
pm.max_children&#61;30 最大进程数量
pm.start_servers&#61;10 动态方式下的起始进程数量。
pm.min_spare_servers&#61;10 动态方式空闲状态下的最小进程数量。
pm.max_spare_servers&#61;24 动态方式空闲状态下的最大进程数量
pm.max_requests&#61;500 所有子进程重启时间为300s一次&#xff0c;并发量为50&#xff0c;max_children设置为30&#xff0c;max_requests &#61; 300*50/30&#61;500&#xff0c;如果想让进程每隔一小时重生一次&#xff0c;则是3600*50/30&#61;6000。如果pm.max_requests没有设置重启参数&#xff0c;默认为不限制最大服务次数&#xff0c;也就是子进程永远不重启&#xff0c;长时间不重启子进程会导致系统负载异常&#xff0c;处理时间变长等现象。
重启服务
echo Debug::getUseTime(); // 统计从开始到统计时的时间
echo Debug::getUseMem(); // 统计从开始到统计时的内存使用情况
dump(Debug::getFile(true)); // 获取文件加载信息
echo User::getLastSql(); (new User())->fetchSQL(true)->find(); // 打印sql语句
1、控制器漏洞&#xff1a;修改library/think/App.php
// 获取控制器名
$controller &#61; strip_tags($result[1] ?: $config[&#39;default_controller&#39;]);
// 添加
if (!preg_match(&#39;/^[A-Za-z](\w)*$/&#39;, $controller)) { throw new HttpException(404,&#39;controller not exists&#39; . $controller); }
出现这个问题是因为之前用id拼接的方式传参数&#xff0c;后期因为数据量增大导致报错
修改php.ini中的max_input_vars默认是1000
可以通过Log::info(&#39;xxxx&#39;)的方式来记录日志