浏览模式: 标准 | 列表 技术归总

[置顶] 自用的linux批处理命令

MotoCMS3在nginx下的重写规则(Rewrite Rules)

购买了一套美国Jetimpex公司运营的MotoCMS模板,模板平时卖199美元,碰上了黑五(Black Friday)和网络星期一(Cyber Monday),只花了109美元就买到了。

跟2个不同的销售聊过天,一个销售给了个0美元的inmotionhosting注册码(免费享受1个免费美国主机1年使用权+1个免费域名),另外一个销售说最低5美元可以享受。秉承节俭的原则,妥妥地用了第一个销售的注册码,注册完成后还要inmotionhosting人工审核,直接跟在线客服拉家常,10分钟后主机开通,域名也注册下来了。

然后我就把买到的这个模板放在了这个美国主机上(位于美国西海岸洛杉矶),一切顺利,可是速度不是很快。

然后我就把主机迁移到了国内服务器上,服务器上的web软件是Nginx,结果MotoCMS就开始“水土不服”了。二级页面都打不开,凭借多年经验我判断是需要给它上个重写规则(Rewrite Rules)。

懒人方法1:上google搜索,无果。

懒人方法2:反正花了钱,而且MotoCMS提供免费的技术支持,发了工单咨询一下,结果被踢皮球,让我找主机商把适用于Apache软件的.htaccess文件转化成适用于Nginx的。服务器都是我自行维护的,这不是让我找自己……

懒人方法3:把客服给的.htaccess扔到这个转换网址上(https://winginx.com/en/htaccess),得到了一个看似适用于Nginx的重写规则。结果还是不行。

最终,经过修改,适用于MotoCMS3在nginx下的重写规则(Rewrite Rules)来了……

  • location / {
  •   if (!-e $request_filename){
  •     rewrite ^(.*)$ /index.php last;
  •   }
  • }

从MSSQL(SQL Server)2008迁移数据至MySQL5.x

有个网站是asp.net+mssql,要改版成php+mysql,要求原来网站里的文章都需要迁移到新网站,那么也就是要把原SQL Server的数据迁移到MySQL数据库。

虽然都是关系型数据库,但是还是有一定差异,最终操作过程如下:

1、备份原数据库(防止数据丢失);

2、比对新老数据库中数据表字段差异,将原数据库中的无用的字段直接删除,仅保留需要导入到新数据库表中的字段(数据);

3、使用Navicat这个万能数据库操作软件连接原数据库,导出原数据库的表数据,生成sql语句形式;

4、导出的sql语句文件都是insert into语句,也就是新增数据,通过Notepad++或者Sublime软件打开该文件替换相关的语句;

5、替换完成后保存,将该sql语句通过phpmyadmin导入至新数据库(请注意如果新数据库对应的表中某些字段是老数据库里没有的话,请设置一个默认值NULL防止因为导入的时候没默认值而失败)。

(完)

支持PHP 5.4.45的phpmyadmin版本:4.4.15.10 2017...

最近某个业务中服务器是windows 2003,因为这个服务器上还有其它服务,所以也没有重装它,只能安装能在这个系统上跑的最高php版本:PHP 5.4.45

而这个版本的PHP,无法支持最新的phpmyadmin,会提示:PHP 5.5+ is required. Currently installed version is: 5.4.45

解决方法1:升级PHP版本(这里是行不通的因为这个系统可以安装的最新版只能是5.4.45)

解决方法2:下载可以支持5.4.45的phpmyadmin。经过测试,最新的支持到5.4.45的phpmyadmin版本是2017-01-23发布的4.4.15.10。下载地址:https://files.phpmyadmin.net/phpMyAdmin/4.4.15.10/phpMyAdmin-4.4.15.10-all-languages.zip

修改它的配置,找到配置文件,位于libraries\config.default.php,包括主机地址$cfg['Servers'][$i]['host']和端口地址$cfg['Servers'][$i]['port']都可以定义。

thinkphp5.1程序:volist中使用自定义函数设定数据集

最近使用ThinkPHP5.1在开发一套程序,之前的项目中大多数是后台管理程序,不需要在控制器里进行大量的数据库查询和调用。而这次因为这个程序是一个监控显示程序,需要在前台调取10+栏目的数据并且分别展示出来。

那么按照正常的思路就是在控制器的方法中写大量的查询语句并用assign函数绑定到模板变量中,然后再模板变量中用volist输出。

这样子操作太麻烦,因为要给这10+栏目的数据设置10个变量名(数组),而且模板中需要进行大量的修改。这样很不程序化……

怎么办呢?打开官方手册地址:https://www.kancloud.cn/manual/thinkphp5_1/354084

手册中给出了一个解决方法:直接使用函数设定数据集,而不需要在控制器中给模板变量赋值传入数据集变量。

那么怎么实现呢?

首先打开\application\common.php文件,写一个公用的调用函数,如下:

function G_data($type){

    $list = Db::table('c')->where('type',$type)->where('status',1)->select();

    return $list;

}

这个函数的意思是查询数据库中c表里符合status=1且type=传参的数据。

那么模板中怎么写?

{volist name=":G_data(0)" id="data"}

<p><a href="{$data.link}" target="_blank">{$data.name}</A></p>

{/volist}

这段代码的意思是查询type=0的数据并显示出它的链接link和内容name。

 

Apache下htaccess重定向代码

参考网址:https://coolestguidesontheplanet.com/redirecting-a-web-folder-directory-to-another-in-htaccess/

解决MOTOCMS系统更换主机后无法访问的问题(空白页或500 error)

MOTOCMS是一套美国公司开发的商业版CMS(内容管理)系统(它采用Zend加密源代码保护版权),它跟国内的米拓(mituo.cn)开发的CMS系统类似。这2套系统都可以创建多语言的页面(比如中文版/英文版),不同之处在于一个适合老外用,一个适合国人用。

最近需要将一个放在美国VPS上运行MOTOCMS系统的网站搬迁到国内虚拟主机上,文件转移以及数据库备份还原都是简单的操作,最坑爹的是搬迁完无法打开,页面提示:Zend Guard Run-time support missing! 这说明没有安装好Zend Guard,需要切换一个PHP版本环境试试看。

查看了原来VPS配置运行环境:PHP 5.5.38 + Zend Engine v2.5.0 + mysql 5.5.56

而新的虚拟主机环境是:PHP 5.5.30 + 无Zend Engine + mysql 5.7.23

在虚拟机管理后台看了一下可切换的PHP版本如下:

  • PHP5.2
  • PHP5.3
  • PHP5.4
  • PHP5.5
  • PHP5.6
  • PHP7.0
  • PHP7.1
  • PHP7.2

直接尝试切换到了最高版PHP7.2,结果错误变成了500 error或者空白页,这说明Zend Engine已经有了只不过有问题,然后查看了phpinfo信息(页面显示为Zend Engine v3.2.0),那怎么还会无法访问?

一般出现问题要去日志里找答案,翻了一下这个网站,找到了日志文件位于:

  • /mt-content/temp/logs/moto.log
  • /mt-content/temp/logs/php_errors.log

这2个日志文件详细记录了网站安装至今的所有错误日志信息,分别摘取这2个文件中的最新记录各1条如下:

  • 2019-09-08T07:51:48+08:00 WARN (4): require_once(/data/home/vhost007/htdocs/mt-includes/library/Moto/Authentication/AuthenticationService.7.2.php): failed to open stream: No such file or directory {"errno":2,"file":"/data/home/vhost007/htdocs/mt-includes/library/Moto/Authentication/AuthenticationService.php","line":1}
  • [08-Sep-2019 07:51:48 Asia/Shanghai] PHP Fatal error:  require_once(): Failed opening required '/data/home/vhost007/htdocs/mt-includes/library/Moto/Authentication/AuthenticationService.7.2.php' (include_path='/data/home/vhost007/htdocs/mt-includes/library:.:/var/www/php72/lib/php') in /data/home/vhost007/htdocs/mt-includes/library/Moto/Authentication/AuthenticationService.php on line 1

从错误信息中可以看出,程序找不到AuthenticationService.7.2.php这个文件,这看起来是程序判断当前php版本为7.2然后引用了这个文件,可是根本没有这个文件。

进入/mt-includes/library/Moto/Authentication/目录看一下到底有哪些文件,以AuthenticationService开头的如下:

  • AuthenticationService.5.3.php
  • AuthenticationService.5.4.php
  • AuthenticationService.5.5.php
  • AuthenticationService.5.6.php

果然是没有AuthenticationService.7.2.php那个文件,自然也就运行出错了(只不过前台没有报具体的错误需要自己看日志文件)。

既然知道答案了,直接在虚拟主机管理页面将php版本改为5.6试试看吧!

结果答案是:Zend Guard Run-time support missing!

继续改为5.3试试,页面显示空白页或500 error。

死马当活马医,选择唯一可选的5.4,网站正常了……

最终跑动这套MOTOCMS系统的配置是:

PHP 5.4.45 + Zend Engine v2.4.0 (with Zend Guard Loader v3.3) + mysql 5.7.23

修改Mysql表名

假定数据库名为is36,其中有个一个user表,要将其变为users,则:

先进入该数据库

use is36;

再执行修改

ALTER TABLE `user` RENAME `users`;

下载最新微软官方Microsoft Remote Desktop for Mac

在Mac下工作是比较高效的,但是有时候还是需要用到windows系统上的数据或者软件,除了使用第三方开发商的远程桌面工具外,微软公司也提供了Mac版(iMac和MacBook)的远程桌面软件(Microsoft Remote Desktop),可是中国区的Apple store无法直接下载到这个软件,通过搜索引擎中找到的第三方网站下载又怕有问题,那么怎么办呢?

直接找到微软官方下载地址:

https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-mac

直接下拉到“the Mac beta client”地方选择下载测试版,下载完成后就可以直接使用了,我下载到的是05 SEP 2019, 06:21发布的10.3.2 (1650)  版本。