赞
踩
目录
一、PHP5.6连接mysql5.6正常mysql8.0报错
六、It is not safe to rely on the system's timezone settings 错误
十四、xdebug Debug session was finished without being paused
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系统
问题:apt-get update 报NO_PUBKEY时执行(apt-key adv --recv-keys --keyserver keyserver.ubuntu.com <错误里的key>)并根据错误安装依赖
3:安装php扩展 参考 参考官网如果php docker镜像是php-fpm对应文档的 Alpine 系统,如果是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:php -m 查看安装是否成功
5:退出容器并重启
6: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 = Data source sampleMySQL for accessing MySQL database sampleMySQL
Driver = MySQL ODBC 8.0 Unicode Driver
Server = <ip>
Host = <ip>
Database = <name>
Port = 3306
User = <user>
Password = <pwd>
-> isql -v mysql连接成功
其他扩展安装方法参考 https://blog.csdn.net/lggirls/article/details/89395827
5:在文件夹下运行cmd 输入php.exe -v 如果正常输出表示php好使
5版本运行php.exe -v报错可能需要安装VC11运行环境,官网下载地址如下:
VC9-32 http://www.microsoft.com/zh-CN/download/details.aspx?id=5582
VC9-64 http://www.microsoft.com/zh-CN/download/details.aspx?id=15336
VC11-32 https://www.microsoft.com/zh-CN/download/details.aspx?id=30679
VC14-32 https://www.microsoft.com/en-us/download/details.aspx?id=48145
6:修改Apache配置文件 httpd.conf
添加LoadModule切换时每次打开一个
#LoadModule php7_module "/php7/php7apache2_4.dll"
LoadModule php5_module "/php5/php5apache2_4.dll"
#<IfModule php7_module>
# AddHandler application/x-httpd-php .php
# AddType application/x-httpd-php .php .html
# PHPIniDir "D:/Program Files (x86)/php7/php.ini"
#</IfModule>
<IfModule php5_module>
DirectoryIndex index.html index.php
AddHandler application/x-httpd-php .php
PHPIniDir "D:/Program Files (x86)/php5/php.ini"
</IfModule>
7:新建文件phpinfo.php到apache的htdocs目录;内容为<?php phpinfo();?>
访问phpinfo.ph输出对应版本信息说明切换php版本正常
8:win10 64下php7:curl开启后需要将对应版本的php目录下的libssh2.dll文件拷贝到Apache24\bin中否则不起作用;php5:需要拷贝libssh2.dll libeay32.dll ssleay32.dll
方式二:
1:开启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
- <VirtualHost *:80>
- DocumentRoot "${SRVROOT}/htdocs"
- DirectoryIndex index.htm index.html index.php
- ServerName www.xxx.com
- ServerAlias xxx.com
- ErrorLog "logs/xxx-error.log"
- CustomLog "logs/xxx-access.log" common
- <Directory "${SRVROOT}/htdocs">
- Options Indexes FollowSymLinks
- AllowOverride All
- Order allow,deny
- Allow from all
- Require all granted
- </Directory>
- </VirtualHost>
2:开启vhosts后就可以配置不同项目用不同的php了
安装mod_fcgid模块,到apache官网下载对应版本的mod_fcgid模块 地址
下载后解压找到readme文件按照步骤修改配置
1:拷贝mod_fcgid.so文件到Apache24/modules/mod_fcgid.so
2:拷贝httpd-fcgid.conf文件到Apache24/conf/extra/httpd-fcgid.conf
3:修改httpd-fcgid.conf
- <IfModule fcgid_module>
- # 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版本,否则到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,防止php-cgi进程 在处理完所有请求前退出
- FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
- # Global mod_fcgid settings
-
- #40最大执行时间
- FcgidIOTimeout 300
- #10最大空闲时间
- FcgidConnectTimeout 300
- #8php-cgi最大的进程数
- FcgidMaxProcesses 1000
- FcgidOutputBufferSize 64
- ProcessLifeTime 240
- #500php-cgi每个进程的最大请求数
- FcgidMaxRequestsPerProcess 1000
- FcgidMinProcessesPerClass 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
- <Files ~ "\.php$">
- # 此处配置为全局配置会覆盖vhost中的配置导致vhost中配置无效
- #Options ExecCGI
- #映射fcgi执行脚本
- #AddHandler fcgid-script .php
- #php-cgi脚本执行路径
- #FcgidWrapper "D:/ProgramFiles/php5/php-cgi.exe" .php
- #上面3项适用统一php版本,否则到vhosts中配置在不同项目中
- </Files>
- </IfModule>
4:拷贝mod_fcgid.html文件到Apache24/manual/mod/mod_fcgid.html
5:修改httpd.conf
LoadModule fcgid_module modules/mod_fcgid.so
Include conf/extra/httpd-fcgid.conf
6:修改conf/extra/httpd-vhosts.conf
- <VirtualHost *:80>
- DocumentRoot "${SRVROOT}/htdocs"
- DirectoryIndex index.htm index.html index.php
- ServerName www.xxx.com
- ServerAlias xxx.com
- ErrorLog "logs/xxx-error.log"
- CustomLog "logs/xxx-access.log" common
-
- FcgidInitialEnv PHPRC "D:\\php7"
- FcgidInitialEnv PATH "D:\\php7;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;"
- AddHandler fcgid-script .php
- # 此处路径不能包含空格否则无法启动
- FcgidWrapper "D:/php7/php-cgi.exe" .php
- <Directory "${SRVROOT}/htdocs">
- Options Indexes FollowSymLinks ExecCGI
- AllowOverride All
- Order allow,deny
- Allow from all
- Require all granted
- </Directory>
- </VirtualHost>
Options相关配置参考:pache配置Options详解_bit小兵的博客-CSDN博客
7:.htaccess 的重定向配置
以前是这样用的RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]会出现错误,无法重定向到 index.php No input file specified.
修改成RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]就好了
8:apache使用mod_fcgid模块后,php_admin_value open_basedir 参数就不起作用了,防止php脚本跨站必须去php.ini配置文件中设置。
[HOST=www.xxx.com]
[PATH=/wwwroot/]
open_basedir=/wwwroot/:/tmp/
9:重启Apache
1:修改apache的httpd.conf文件
开启deflate_module和headers_module模块
添加如下代码
<IfModule mod_deflate.c>
# 告诉 apache 对传输到浏览器的内容进行压缩
SetOutputFilter DEFLATE
# 压缩等级 9 最低是1,不建议按最大级别进行压缩,压缩率过高会占更多CPU资源
DeflateCompressionLevel 9
# 设置不对后缀gif,jpg,jpeg,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
</IfModule>
2:验证是否开启
在浏览器调试模式下的network中查看请求的Content-Encoding 可以通过右键Name Status标题栏选择Response Headers选择显示
如果Content-Encoding列中显示gzip说明配置成功
1:下载Xdebug
选择和php版本对应的版本下载 Xdebug: Historical Releases
或者通过Xdebug自动匹配页面下载 Xdebug: Support — Tailored Installation Instructions
将下载的dll文件拷贝到php目录 php/ext 下
2:修改php/php.ini添加如下内容:
[Xdebug]
zend_extension="/php5/ext/php_xdebug.dll"
;允许远程IDE调试
xdebug.remote_enable=on
;远程IDE所在HOST和PORT
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
;开启远程调试自动启动
xdebug.remote_autostart = Off
;可以是任意Key,这里设定为PHPSTORM
xdebug.idekey = "PHPSTORM"
;开启自动跟踪
xdebug.auto_trace = On
xdebug.trace_output_dir="/Apache/Xdebug"
;把执行情况的分析文件写入到指定目录中
xdebug.profiler_enable=on
xdebug.profiler_output_dir="/Apache/Xdebug"
3:重启apache
4:idea 配置Xdebug
【File】->【Settings】->【Languages & Frameworks】->【Servers】添加一个server
配置Deployment:如果项目在apache中则不需要此配置,如果项目不在apache需要通过配置这个来上传代码到apache中。此项配置也可以用来远程调试
最后配置一个PHP Web Page服务
最后点击debug图标启动调试即可
在所有环境都成功部署好后,有的在运行应用时,会出现"Primary script unknown"错误,一般这是由于nginx和php-fpm的用户不同导致的。把nginx.conf和php-fpm.d/www.conf 的user设为同一个就可以了。
修改web目录的权限:chown www-data:www-data web目录 -R chmod 755 web目录 -R
1:在页头使用date_default_timezone_set()设置 date_default_timezone_set('PRC'); //东八时区 echo date('Y-m-d H:i:s');
2:在页头使用 ini_set('date.timezone','PRC');或ini_set('date.timezone','Asia/Shanghai');
3:修改 php.ini的date.timezone去掉前面的分号修改为date.timezone = "Asia/Shanghai" (Asia/Shanghai和PRC都可以)
4:重启
1:配置database.php
在默认数据库后面添加 'db2' => ['type'=>'sqlsrv','hostname'=> '127.0.0.1','database'=> '******','username'=> 'sa','password'=> 'root','hostport'=> '1433','prefix'=> '',],
3:使用
Db::connect('db2') -> name('xx') -> where([['xxx','=','0101001']]) -> limit(0, 10) -> select();// prefix生效
Db::connect('db2') -> table('xx') -> where([['xxx','=','0101001']]) -> limit(0, 10) -> select();// prefix不生效
修配置文件 /usr/local/etc/php-fpm.d/www.conf
pm=dynamic 设置为static,系统会开启设置的数量个php-fpm进程;设置为dynamic,系统会在php-fpm运行开始时启动pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。
pm.max_children=30 最大进程数量
pm.start_servers=10 动态方式下的起始进程数量。
pm.min_spare_servers=10 动态方式空闲状态下的最小进程数量。
pm.max_spare_servers=24 动态方式空闲状态下的最大进程数量
pm.max_requests=500 所有子进程重启时间为300s一次,并发量为50,max_children设置为30,max_requests = 300*50/30=500,如果想让进程每隔一小时重生一次,则是3600*50/30=6000。如果pm.max_requests没有设置重启参数,默认为不限制最大服务次数,也就是子进程永远不重启,长时间不重启子进程会导致系统负载异常,处理时间变长等现象。
重启服务
echo Debug::getUseTime(); // 统计从开始到统计时的时间
echo Debug::getUseMem(); // 统计从开始到统计时的内存使用情况
dump(Debug::getFile(true)); // 获取文件加载信息
echo User::getLastSql(); (new User())->fetchSQL(true)->find(); // 打印sql语句
1、控制器漏洞:修改library/think/App.php
// 获取控制器名
$controller = strip_tags($result[1] ?: $config['default_controller']);
// 添加
if (!preg_match('/^[A-Za-z](\w)*$/', $controller)) { throw new HttpException(404,'controller not exists' . $controller); }
出现这个问题是因为之前用id拼接的方式传参数,后期因为数据量增大导致报错
修改php.ini中的max_input_vars默认是1000
可以通过Log::info('xxxx')的方式来记录日志
1:Warning: ZipArchive::getFromName(): Invalid or unitialized Zip object 版本问题解决方法
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
if(!$objReader->canRead($file)){$objReader = PHPExcel_IOFactory::createReader('Excel5');}
$objPHPExcel = $objReader->load($file,$encode='utf-8');
2:phpExcel导出,在本地正常,在服务器乱码
ob_end_clean(); // header之前先清除缓存区的内容
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$fileName.'.xls"');
header('Cache-Control: max-age=0');
请求域名要和PHPStorm中的debug servers配置的域名相同
PHP中的一种模板文件PHPStorm要支持打开需要配置一下settings->File Types->Smarty->添加*.dwt
$arr = Array('0','1','2','3','4');echo count($arr);
1:Deprecated: preg_replace()报错
return preg_replace("/{([^\}\{]*)}/e", "\$this->select('\\1');", $source);改为
return preg_replace_callback("/{([^\}\{]*)}/", function($r) { return $this->select($r[1]); }, $source);
2:EcShop使用Smarty模板
3:Parse error: syntax error 指的是语法错误
需开启短标签支持,打开php.ini文件,搜索 short_open_tag = Off 他默认的就是关闭的 ,将他改为On,然后重启apache就可以了
4:在5.3版本之后已经不允许在程序中使用”=&”符号。如果你的网站出现了Deprecated: Assigning the return value of new by reference is deprecated in 错误,别着急,先定位到出错的文件,查找下是不是在程序中使用了”=&”,例如刚才定位到网站程序中发现了下图的程序,发现使用了”=&”符号,去掉‘&’符号之后程序运行正常
5:Declaration of phpbb::set_cookie() should be compatible with integrate::set_cookie...解决办法:把function set_cookie ($username="") 改为function set_cookie ($username="", $remember = NULL)
6:Strict standards: Non-static method cls_sql_dump::get_random_name() should not be called statically把 cls_sql_dump的 function __construct()改到 function cls_sql_dump()的前面把cls_sql_dump的 function get_random_name()改成 static function get_random_name()
7:Strict Standards: Redefining already defined constructor for class alipay in有两种构造函数,一种是跟类同名的函数,一种是 __contruct()。从PHP5.4开始,对这两个函数出现的顺序做了最严格的定义,必须是 __construct() 在前,同名函数在后
8:Strict Standards: mktime()把 mktime() 改成 time()
9:Strict Standards: Non-static method cls_image::gd_version() should not be called staticallyfunction gd_version 改成 static function gd_version
10:Strict Standards: Only variables should be passed by reference in找到提示错误的文件 cls_template.php 及行号把 $tag_sel = array_shift(explode(' ', $tag));改成:$tag_arr = explode(' ', $tag);$tag_sel = array_shift($tag_arr);并且删除 D:\wamp\www\ecshop\temp\caches下所有的文件
11:数据字典 ecshop数据字典_shooke的博客-CSDN博客
<?php
header('Content-Type: image/png'); // 添加
include('phpqrcode.php'); //引入phpqrcode库文件
$picUrl = 'www.baidu.com'; //二维码扫描出的链接
ob_clean(); // 添加
QRcode::png($picUrl,false(是否生成文件),'L',4);
apache自带压测工具可用进行压力测试
\bin\ab -n 800 -c 800 url (-n发出800个请求,-c模拟800并发,相当800人同时访问,后面是测试url)
\bin\ab -t 60 -c 100 url (在60秒内发请求,一次100个请求)
\bin\ab -t 60 -c 100 -T "text/plain" -p p.txt url p.txt 是和ab.exe在一个目录p.txt 中可以写参数,如 p=wdp&fq=78
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。