故障检查:

服务器工具---事件查看器----Windows日志----应用程序----mysql,会在右侧看到一个红色的error

出现类似InnoDB: Attempted to open a previously opened tablespace.的报错
1.jpg

解决办法:

找到mysql数据的存放位置 如mysql/data,你会看到ib_logfile0 和ib_logfile1 这两个InnoDB表的日志文件,删除然后再重启服务,即可解决

2.jpg

【故障问题】:
thinkphp框架开发过程中或生产环境中,出现以下报错,并且success和error无返回的情况
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

【排查发现】:

√因为文件编码而出现的故障 默认文件编码应为无bom+的utf8编码格式,不知道是用了什么编辑器打开,保存的时候就默认变成了带+bom utf-8的编码格式 所以json解析的时候会带bom的如空格等返回,就不是纯粹的json,所以报错json解析错误。

【修正解决】

使用Editplus,另存为,将带bom的编码改为utf8即可,见下图
47.png

【editplus破解版下载】
https://pan.baidu.com/s/1AGpGN3HdRXslHtc5uuQgCw (链接失效,请联系#395617441#企鹅邮箱)

//验证测试
$filename = 'file.txt';
if(!is_writable($filename)){
chmod($filename,0777);
}
$pam = time();
$fh = fopen($filename, "a");
$data =json_encode($pam)."n";
echo fwrite($fh,$data);
fclose($fh);

/etc/init.d/httpd restart #重启
/etc/init.d/httpd stop #停止
/etc/init.d/httpd start #开启

1、申请免费的ssl
目前可以免费申请的ssl证书的有以下的服务商
A、腾讯云 (TrustAsia Technologies, Inc.) 可免费一年 (具体看官网的ssl产品)
B、阿里云 DigiCert Inc(具体看官网的ssl产品)
C、Let's Encrypt(免费3个月,可自动续期)

申请成功后,会得到以下这种文件
范例1:阿里云forapache
58.jpg
范例2:腾讯云for all(apache Nginx iis)
40.jpg

2、下面是Apache配置教程

2-1 apache conf 下创建ssl目录及站点目录用于存放证书某站点或域名的证书文件,比如D:/Apache/conf/ssl/kinmor-com

2-2 将以上注册成功后的证书文件上传到该目录下:
举例如:
D:/Apache/conf/ssl/kinmor-com/1_root_bundle.crt
D:/Apache/conf/ssl/kinmor-com/2_www.kinmor.com.crt
D:/Apache/conf/ssl/kinmor-com/3_www.kinmor.com.key

2-3 配置apache的http.conf,
A、把LoadModule ssl_module modules/mod_ssl.so前面的#注释去掉————启用ssl
B、把Include conf/extra/httpd-vhosts.conf前面的#注释也去掉————启用虚拟目录域名绑定。
C、在Include conf/extra/httpd-ssl.conf的位置,默认是带#注释的,为不影响使用,我另外创建一个vhostssl.conf文件放在apache/conf/extra/下,保存。看下图:68.jpg

2-4 将以下代码贴到vhostssl.conf文件,具体的路径要进行修改,换成您的位置,保存

Listen 443
<VirtualHost *:443>
    DocumentRoot "D:\www\www.kinmor.com"
    ServerName www.kinmor.com
    ServerAlias www.kinmor.com
SSLEngine on
SSLProtocol TLSv1 TLSv1.1 TLSv1.2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLCertificateFile  "D:\Apache\conf\ssl\kinmor-com\public.pem" 
SSLCertificateKeyFile "D:\Apache\conf\ssl\kinmor-com\214272553820512.key"
SSLCertificateChainFile "D:\Apache\conf\ssl\kinmor-com\chain.pem"
  <Directory "D:\www\www.kinmor.com">
      Options FollowSymLinks ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all
      Require all granted
  </Directory>
</VirtualHost>

说明:我的项目路径为D:wwwwww.kinmor.com\

2-5 重启Apache

3、测试.

浏览器输入:https://www.kinmor.com 看到下面表示测试成功。
788.jpg

4、重定向 http:\ ☞ https:\
在.htaccess文件中添加以下内容

RewriteEngine On
RewriteBase /
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]

下面粘贴thinkcmf下的.htacess文件

<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On
RewriteBase /
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]
</IfModule>

基本环境:ffmpeg安装在usr/local/bin/ffmpeg
使用函数:exec

在检查exec在disble_functions没有禁用,safe_model也关闭了,ffmpeg也加入全局变量
在终端上测试命令没有问题,可php用exec执行就出现127,郁闷中。
127.jpg

<?php
exec("ffmpeg -version",$log,$ffmpeg_status);
echo $ffmpeg_status; //返回127
print_r($log); //返回空白
?>

猜测:全局变量的所有者和所有组可能和应用的用户不一致,linux本身的安全机制受影响,可能不允许这么执行外部的依赖程序命令。

假设:不用全局变量,直接找到该程序的安装路径,直接调用看是否可行?
/usr/local/bin/ 为ffmpeg安装的路径
测试效果:

<?php
exec("/usr/local/bin/ffmpeg -version",$log,$ffmpeg_status);
echo $ffmpeg_status; //返回0
print_r($log); //返回字符串
?>

总结:执行外部命令 /usr/local/bin/ exec可行 记之