浏览模式: 标准 | 列表 全部文章

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

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)  版本。

 

 

解决thinkphp5.1在lnmp1.5环境下运行问题

前置条件:有一台运行lnmp1.5的VPS,然后把本机上已经开发好的系统放到该VPS上。

1、使用lnmp vhost add命令创建一个网站,比如blog.is36.com,注意点如下:

  • Default directory修改为/home/wwwroot/blog.is36.com/public后回车;
  • Allow Rewrite rule选择y并输入thinkphp后回车;
  • Enable PHP Pathinfo选择y后回车;

2、把项目放置在/home/wwwroot/blog.is36.com目录下(网站访问入口在public目录下)。

3、此刻直接访问blog.is36.com是会提示诸如“require(): open_basedir restriction in effect”的错误,解决方法如下:

  • 打开/usr/local/nginx/conf/fastcgi.conf文件在末尾增加一行代码后保存:fastcgi_param PHP_ADMIN_VALUE $basedir if_not_empty;
  • 再打开/usr/local/nginx/conf/vhost/blog.is36.com.conf文件在include enable-php-pathinfo.conf;代码上方增加一行代码后保存:set $basedir "open_basedir=/home/wwwroot/blog.is36.com/:/tmp/:/proc/";

4、输入lnmp reload后回车,再次访问网站,项目正常运行。

注意点:上方blog.is36.com是我的域名,你修改为你的项目域名即可

在Mac系统下安装使用composer

关于PHP composer:

  • composer是 PHP 用来管理依赖(dependency)关系的工具。就像是IOS开发时用cocoapods管理第三方依赖库。
mac下开发环境安装方法:
 
A 安装brew
  • /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
  • brew update
 
B 安装composer
  • brew install composer
  • composer self-update
 
C 使用composer安装所需的php包
  • 进入https://packagist.org/搜索需要的依赖包,比如smarty然后复制安装命令
 
D 用终端进入需要安装的目录,然后执行安装命令即可
  • composer require smarty/smarty
 
E 如果使用composer更新包速度慢,则更换源
  • composer config -g repo.packagist composer https://packagist.phpcomposer.com

[转]CentOS 6、7下pptp vpn一键安装脚本

 https://blog.linuxeye.cn/412.html

  • wget http://mirrors.linuxeye.com/scripts/vpn_centos.sh
  • chmod +x ./vpn_centos.sh
  • ./vpn_centos.sh

#!/bin/bash

#

# Author:  yeho <lj2007331 AT gmail.com>

# Blog:  //blog.linuxeye.com

#

# Installs a PPTP VPN-only system for CentOS

# Check if user is root

[ $(id -u) != "0" ] && { echo -e "\033[31mError: You must be root to run this script\033[0m"; exit 1; }

export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

clear

printf "

#######################################################################

#    LNMP/LAMP/LANMP for CentOS/RadHat 5+ Debian 6+ and Ubuntu 12+    #

#            Installs a PPTP VPN-only system for CentOS               #

# For more information please visit //blog.linuxeye.com/31.html  #

#######################################################################

"

[ ! -e '/usr/bin/curl' ] && yum -y install curl

VPN_IP=`curl ipv4.icanhazip.com`

VPN_USER="linuxeye"

VPN_PASS="linuxeye"

VPN_LOCAL="192.168.0.150"

VPN_REMOTE="192.168.0.151-200"

while :; do echo

    read -p "Please input username: " VPN_USER

    [ -n "$VPN_USER" ] && break

done

while :; do echo

    read -p "Please input password: " VPN_PASS

    [ -n "$VPN_PASS" ] && break

done

clear

if [ -f /etc/redhat-release -a -n "`grep ' 7\.' /etc/redhat-release`" ];then

    #CentOS_REL=7

    if [ ! -e /etc/yum.repos.d/epel.repo ];then

        cat > /etc/yum.repos.d/epel.repo << EOF

[epel]

name=Extra Packages for Enterprise Linux 7 - \$basearch

#baseurl=http://download.fedoraproject.org/pub/epel/7/\$basearch

mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=\$basearch

failovermethod=priority

enabled=1

gpgcheck=0

EOF

    fi

    for Package in wget make openssl gcc-c++ ppp pptpd iptables iptables-services

    do

        yum -y install $Package

    done

    echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf

elif [ -f /etc/redhat-release -a -n "`grep ' 6\.' /etc/redhat-release`" ];then

    #CentOS_REL=6

    for Package in wget make openssl gcc-c++ iptables ppp

    do

        yum -y install $Package

    done

    sed -i 's@net.ipv4.ip_forward.*@net.ipv4.ip_forward = 1@g' /etc/sysctl.conf

    rpm -Uvh http://poptop.sourceforge.net/yum/stable/rhel6/pptp-release-current.noarch.rpm

    yum -y install pptpd

else

    echo -e "\033[31mDoes not support this OS, Please contact the author! \033[0m"

    exit 1

fi

echo "1" > /proc/sys/net/ipv4/ip_forward

sysctl -p /etc/sysctl.conf

[ -z "`grep '^localip' /etc/pptpd.conf`" ] && echo "localip $VPN_LOCAL" >> /etc/pptpd.conf # Local IP address of your VPN server

[ -z "`grep '^remoteip' /etc/pptpd.conf`" ] && echo "remoteip $VPN_REMOTE" >> /etc/pptpd.conf # Scope for your home network

if [ -z "`grep '^ms-dns' /etc/ppp/options.pptpd`" ];then

     cat >> /etc/ppp/options.pptpd << EOF

ms-dns 223.5.5.5 # Aliyun DNS Primary

ms-dns 114.114.114.114 # 114 DNS Primary

ms-dns 8.8.8.8 # Google DNS Primary

ms-dns 209.244.0.3 # Level3 Primary

ms-dns 208.67.222.222 # OpenDNS Primary

EOF

fi

echo "$VPN_USER pptpd $VPN_PASS *" >> /etc/ppp/chap-secrets

ETH=`route | grep default | awk '{print $NF}'`

[ -z "`grep '1723 -j ACCEPT' /etc/sysconfig/iptables`" ] && iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 1723 -j ACCEPT

[ -z "`grep 'gre -j ACCEPT' /etc/sysconfig/iptables`" ] && iptables -I INPUT 5 -p gre -j ACCEPT

iptables -t nat -A POSTROUTING -o $ETH -j MASQUERADE

iptables -I FORWARD -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1356

service iptables save

sed -i 's@^-A INPUT -j REJECT --reject-with icmp-host-prohibited@#-A INPUT -j REJECT --reject-with icmp-host-prohibited@' /etc/sysconfig/iptables

sed -i 's@^-A FORWARD -j REJECT --reject-with icmp-host-prohibited@#-A FORWARD -j REJECT --reject-with icmp-host-prohibited@' /etc/sysconfig/iptables

service iptables restart

chkconfig iptables on

service pptpd restart

chkconfig pptpd on

clear

echo -e "You can now connect to your VPN via your external IP \033[32m${VPN_IP}\033[0m"

echo -e "Username: \033[32m${VPN_USER}\033[0m"

echo -e "Password: \033[32m${VPN_PASS}\033[0m"