知道的越多,不知道的就越多。
弱小和无知不是生存的障碍,傲慢才是。
//TODO ------------待解决问题-------------
mysql 函数 svn node.js 数据库循环添加数据,中间出问题回滚怎么控制; hadoop
python
docker打包
分布式服务器搭建
//已经解决问题----
http://www.cnblogs.com/zhengwk/p/5807346.html // 安装出现缺少vcruntime140dll的解决方法 http://www.cnblogs.com/zhengwk/p/5807293.html // Apache的下载安装 http://wenku.baidu.com/view/af4681bcfd0a79563c1e7289.html // 80端口被占用 http://www.jb51.net/article/95023.htm // mysql 5.7.16 安装 http://www.111cn.net/database/mysql/44142.htm //1045 MySQL数据库cmd运行时的错误 http://www.cnblogs.com/lookphp/p/b15af85f67dc7df59a970d905713262a.html //composer安装问题 http://www.viphper.com/?p=1159 //win7系统下安装yii2步奏
composer : http://blog.csdn.net/cs958903980/article/details/52023727
https://my.oschina.net/inuxor/blog/750717
数据库字段包含某一字符串:$map["concat(',',zhuanye,',')"] = array('like',"%,$zhuanye,%"); array_sum(array_column($datacount, 'num')); array_merge 合并数组并可以重置数组下标
PC操作【win】+ D 显示桌面 PC操作【win】+ L 锁屏
//小程序问题 1.tabBar 底部菜单栏不显示 :比较好的解决方法是让 tabBar 中包含 index 初始页面这一项。 2.判断是否登录:登录->request用户信息->storage到本地 未登录->获取微信用户授权->storage到本地
jsonp 跨域问题:https://www.jiangweishan.com/article/js8908093284092384.html
x前端js:
$(document).ready(function(){
var url=“xxx.com/data”;
$.ajax({
url:url,
dataType:‘jsonp’,
jsonp:“callback”, //Jquery生成验证参数的名称
processData: false,
type:‘get’,
success:function(data){
console.info(data);
},
error:function(XMLHttpRequest, textStatus, errorThrown) {
console.log(XMLHttpRequest.status);
console.log(XMLHttpRequest.readyState);
console.log(textStatus);
}
});
});
服务器端 :
public function index()
{
$return=array(
'code'=>'200',
'msg'=>'this is index'
);
return gis_callback($return);
}
function gis_callback($arr)
{
$json = json_encode($arr);
$callback = $_GET['callback'];
return $callback."($json)";
}
netstat -apn|grep 9502
安装docker toolbox:
xxxxxxxxxx
Q:显示 Downloading C:\Users\Administrator\.docker\machine\cache\boot2docker.iso fro,此为找不到boot2docker.iso文件;
A:将 Docker的目录\Docker Toolbox 下的boot2docker.iso复制到C:\Users\用户的名字.docker\machine\cache,重启。
xxxxxxxxxx
Q:进入BIOS后发现,电脑已开启虚拟化。运行 docker quickstart terminal 仍然是相同的报错,出现问题:“This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory”
A:设置 docker-machine create default --virtualbox-no-vtx-check
xxxxxxxxxx
Docker Hub官网操作默认demo指令:
docker run -itd --name centos-test centos:centos7
git clone https://github.com/docker/doodle.git
cd doodle\cheers2019 ; docker build -t jxzssy/cheers2019 .
docker run -it --rm jxzssy/cheers2019
切换为root权限 sudo -i 或者 sudo su root
window上安装的boot2docker的默认用户名和密码:docker/tcuser 192.168.99.100
docker network ls 查看docker网卡
docker network rm 网卡id 删除docker网卡
docker network inspect 网卡id 查看docker网卡的相关详细信息
docker inspect test001 |grep -w IPAddress
xxxxxxxxxx
#下载Docker依的赖环境,想安装Docker,需要先将依赖的环境全部下载下来,就像Maven依赖JDK一样
yum -y install yum-utils device-mapper-persistent-data lvm2
#指定Docker镜像源,默认下载Docker会去国外服务器下载,速度较慢,可以设置为阿里云镜像源,速度更快
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装Docker
yum makecache fast
yum -y install docker-ce
#安装成功后,需要手动启动,设置为开机启动,并测试一下 Docker
#启动docker服务
systemctl start docker
#设置开机自动启动
systemctl enable docker
#测试
docker run hello-world
xxxxxxxxxx
#从中央仓库拉取镜像到本地
docker pull 镜像名称[:tag]
#举个栗子:docker pull daocloud.io/library/tomcat:8.5.15-jre8
xxxxxxxxxx
#指定端口运行镜像,会自动创建容器
$ docker run -d -p 8080:80 nginx
23e725098712d061a1382f33d6fe54da23ae37597a62f8debdd3731b5f9cc4b9
#创建一个容器,并加载数据卷
docker run -p 8080:80 -d --name shanlei-nginx -v /usr/share/nginx/html nginx:1.5
端口 主机:容器 容器命名 创建数据卷 指定容器内的数据路径 镜像名称:标签
#创建数据卷后,默认会存放在一个目录下/var/lib/docker/volumes/数据卷名称/_data
xxxxxxxxxx
#查看镜像
$ docker images
#查看当前正在运行的容器
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
23e725098712 nginx "nginx -g 'daemon ..." 8 seconds ago Up 6 seconds 0.0.0.0:8080->80/tcp frosty_ptolemy
#查看运行过的容器
$ docker ps -a
#运行镜像,自动生成容器
docker run -itd --name centos-test centos:centos7
#进入容器
$ docker exec -it dce17d43b95f /bin/bash
#重命名 docker 容器名
$ docker rename 原容器名 新容器名
#删除镜像
$ docker rmi 镜像id
#删除docker中的容器
$ docker rm 容器id
#运行容器
$ docker start 容器名/ID
#停止运行容器
$ docekr stop 容器名/ID
xxxxxxxxxx
#将宿主机的文件复制到容器内部的指定目录
docker cp 文件名称 容器id:容器内部路径
#创建数据卷后,默认会存放在一个目录下/var/lib/docker/volumes/数据卷名称/_data
docker volume create 数据卷名称
#查看全部数据卷信息
docker volume ls
#查看数据卷的详细信息,可以查询到存放的路径,创建时间等等
docker volume inspect 数据卷名称
#删除指定的数据卷
docker volume rm 数据卷名称
#通过数据卷名称映射,如果数据卷不存在。Docker会帮你自动创建,会将容器内部自带的文件,存储在默认的存放路径中。
docker run -d -p 8080:8080 --name tomcat -v 数据卷名称:容器内部的路径 镜像id
#通过路径映射数据卷,直接指定一个路径作为数据卷的存放位置。但是这个路径下是空的。
docker run -d -p 8080:8080 --name tomcat -v 路径(/root/自己创建的文件夹):容器内部的路径 镜像id
通过数据卷volume映射到VM虚拟主机,可以访问到容器内部的项目文件路径,用本地FTP链接到VM 虚拟机的数据卷路径 :/var/lib/docker/volumes/数据卷名称/_data,即可实现,本地更改文件自动同步到容器项目中。
xxxxxxxxxx
docker inspect 容器名称/容器ID
xxxxxxxxxx
CentOS 下载地址http://mirrors.aliyun.com/centos/
CentOS 安装说明 :https://www.cnblogs.com/zhizu2/p/12050340.html
phpstudy安装 : yum install -y wget && wget -O install.sh https://notdocker.xp.cn/install.sh && sh install.sh
宝塔安装 : yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
压力测试:ab -c 5000 -r -n 40000000 http://json.com/
xxxxxxxxxx
#查看网卡信息
ifconfig -a
#若 -bash: ifconfig: 未找到命令,执行 yum install -y net-tools
找到对应的配置文件:etc/sysconfig/network-scripts/
xxxxxxxxxx
#修改配置文件信息
vim /etc/sysconfig/network-scripts/ifcfg-em4
xxxxxxxxxx
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" # 使用静态IP地址,默认为dhcp
IPADDR="192.168.2.103" # 设置的静态IP地址
NETMASK="255.255.255.0" # 子网掩码
GATEWAY="192.168.2.1" # 网关地址
DNS1="192.168.2.1" # DNS服务器
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="95b614cd-79b0-4755-b08d-99f1cca7271b"
DEVICE="ens33"
ONBOOT="yes" #是否开机启用
xxxxxxxxxx
#重启网卡
service network restart
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
#查看驱动
dmesg|grep ttyUSB0
[546072.956140] usb 3-14: pl2303 converter now attached to ttyUSB0
#如出现类似信息,则说明驱动已正常
xxxxxxxxxx
[root@101 ~]# stty -a -F /dev/ttyUSB0
speed 9600 baud; rows 0; columns 0; line = 0;
#如上9600,就是速率了
xxxxxxxxxx
#安装minicom
yum -y install minicom
xxxxxxxxxx
#minicom -s #设置
1.选择Serial port setup 并回车进入修改
A - Serial Device : /dev/ttyUSB0
E - Bps/Par/Bits : 9600 8N1 #刚才查出的波特率
修改好后回车返回主菜单
2.选择Save setup as dfl 保存为默认设置
xxxxxxxxxx
#minicom 操作
ctrl+a 是功能菜单,按出此功能后,再按z,可以查看帮助
crtl+x,是退出
xxxxxxxxxx
#卸载 minicom
#查找已经有安装的minicom信息
[root@json ~]#rpm -qa|grep minicom
minicom-2.1-3.i386
[root@json ~]# rpm -e --nodeps minicom-2.1-3.i386 #卸载
xxxxxxxxxx
stty -F /dev/ttyS0 speed 115200 cs8 -parenb -cstopb
#115200波特率 8数据位 1停止位 无校验位
xxxxxxxxxx
# CentOS中文乱码问题:
# 查看系统是否安装了中文安装包:
locale -a |grep "zh_CN"
# 查看当前系统语言环境:
echo $LANG
# 若不是中文,修改配置locale.conf配置文件:
vim /etc/locale.conf
LANG="zh_CN"
#(进入编辑页面,输入i开始编辑,编辑完成输入esc到底行模式,然后输入:wq,保存并退出)
#centos系统更新时间 :
#设置上海时区 :
timedatectl set-timezone 'Asia/Shanghai'
#有网直接更新当前时区时间 :
hwclock --systohc --localtime
#查看网关 :
ifconfig -a
#-bash: ifconfig: 未找到命令
yum install -y net-tools
#ls的输出颜色不止3种,有以下几种,
#####白色:表示普通文件
####蓝色:表示目录
###绿色:表示可执行文件
##红色:表示压缩文件
#浅蓝色:链接文件
#红色闪烁:表示链接的文件有问题
#黄色:表示设备文件
#灰色:表示其他文件
#查看全部信息:
$ uname -a
Linux localhost.localdomain 4.18.0-147.el8.x86_64 #1 SMP Wed Dec 4 21:51:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
#查看linux内核信息:
$uname -r
4.18.0-147.el8.x86_64
#查看linux的系统版本号:
$cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)
重启php: sudo service php-fpm restart
重启nginx: nginx -s reload
Linux centos重启命令:
1、reboot
2、shutdown -r now 立刻重启(root用户使用)
3、shutdown -r 10 过10分钟自动重启(root用户使用)
4、shutdown -r 20:35 在时间为20:35时候重启(root用户使用)
如果是通过shutdown命令设置重启的话,可以用shutdown -c命令取消重启
Linux centos关机命令:
1、halt 立刻关机
2、poweroff 立刻关机
3、shutdown -h now 立刻关机(root用户使用)
4、shutdown -h 10 10分钟后自动关机
重启网络 : systemctl restart network
防火墙状态 :systemctl status firewalld
打开防火墙 :systemctl start firewalld
关闭防火墙 :systemctl stop firewalld
重启防火墙 : sudo firewall-cmd --reload
查看端口开放情况 :sudo firewall-cmd --list-all
防火墙开放8080端口 : sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-port=8080/tcp --permanent
xxxxxxxxxx
CentOS下实现普通用户和管理员权限的切换 :
使用“su”命令实现用户属性的转换 :
普通用户切换到root用户 : 1)su ->回车 ->输入root密码
2)su ->root ->回车 -> 输入root密码
root用户切换到普通用户 : su "普通用户名"
x
文件操作:
cd .. 返回上一级目录
cd 返回主目录
mkdir new 创建文件夹
rm 文件 删除文件
rm -rf 目录 删除目录及目录下的文件
cp -r 目录名 目标目录名 复制目录到指定目录(该目录下的所有东西都会被复制)
mv A B 将目录A重命名为B:
find -name file 查找文件
chmod -R 777 文件夹
vim是vi的升级版
xxxxxxxxxx
#未安装vim
#-bash: vim: 未找到命令
#安装vim
yum -y install vim*
vim php.ini //打开php.ini
#输入 /str 回车 在文件中查找字符串str
#输入 i 进入编辑模式
#esc 退出编辑模式
#输入 /str 回车 查找字符串
#esc 退出编辑模式
:wq 回车 保存
:q! 回车 不保存
:w 回车 保存文件但不退出vi
命令 | 命令功能 |
---|---|
/str | 查找字符串 |
:wq | 保存 |
:q! | 不保存 |
:w | 保存文件但不退出vi |
:n | 光标定位到n行 |
(n)h 或 (n)← | 光标向左移动一位,添加n移动n位,n为数字 |
(n)j或 (n)↓ 或 (n) | 光标向下移动一行,添加n移动n位,n为数字 |
(n)k 或 (n)↑ | 光标向上移动一行,添加n移动n位,n为数字 |
(n)l 或 (n)→ | 光标向右移动一位,添加n移动n位,n为数字 |
0 或 ^ | 光标移动至当前行的行首 |
$ | 光标移动至当前行的行尾 |
Ctrl + f | 屏幕“向下”移动一页,相当于 [Page Down]按键 |
Ctrl + b | 屏幕“向上”移动一页,相当于 [Page Up] 按键 |
Ctrl + d | 屏幕“向下”移动半页 |
Ctrl + u | 屏幕“向上”移动半页 |
shift+ g (G) | 光标移动至文件末尾 |
gg | 光标移动到文件开头 |
zip操作
xxxxxxxxxx
支持ZIP yum install -y unzip zip
解压zip文件 unzip 文件名.zip
压缩一个文件成zip zip
文件名.zip 文件夹名称或文件名称
xxxxxxxxxx
在windows下编辑然后上传到linux系统里执行的 .sh 文件的格式为dos格式。而linux只能执行格式为unix格式的脚本。
安装dos2unix
yum install -y dos2unix
dos2unix xxx.sh
Linux中dos2unix的批量转换命令:
在Linux中将DOS 格式转换为Unix格式的文件可以使用dos2unix,如果一个文件夹中有多个文件需要转换,则可以使用如下命令:
find -type f | xargs dos2unix --dos2unix --safe
或者
find -type f | xargs dos2unix -o
xxxxxxxxxx
CentOS下安装nvm(node版本管理),nrm:
从git 克隆nvm到本地的当前用户目录的nvm文件夹中
git clone git://github.com/creationix/nvm.git ~/nvm
把nvm添加到环境变量中
echo "source ~/nvm/nvm.sh" >> ~/.bashrc
source ~/.bashrc
查询可安装的版本
nvm list-remote
安装指定版本的node
nvm install v14.10.1
查看已经安装的node
nvm ls
使用指定版本的node
nvm use v14.10.1
查看当前npm 的所有配置
npm config list
npm config get registry
npm config set registry https://registry.npm.taobao.org
查看是否设置成功
npm config get registry
npm i -g nrm
xxxxxxxxxx
下载cmake
wget https://cmake.org/files/v3.6/cmake-3.6.2.tar.gz
tar xvf cmake-3.6.2.tar.gz && cd cmake-3.6.2/
./bootstrap
解压,编译安装
gmake
gmake install
查看新版本
/usr/local/bin/cmake --version
删除原来cmake版本,建立软连接,测试
yum remove cmake -y
ln -s /usr/local/bin/cmake /usr/bin/
cmake --version
Git基本操作流程:
xxxxxxxxxx
#查看git配置信息
git config --list
#编辑系统配置
git config -e
#编辑用户配置
git config -e --global
#设置用户名和账号:
git config --global user.name "Jxzssy"
git config --global user.email "3341118485@qq.com"
xxxxxxxxxx
#操作仓库流程:
mkdir fpapp
cd fpapp
git init
git remote add origin https://gitee.com/Jxzssy/fpapp.git //关联git服务器
git pull origin master 从远程获取最新版master并merge到本地
touch test.txt
#编辑文件 $ vi a.txt 'i'开始编辑, esc退出编辑,shift+:+wq 保存退出
git add . //添加文件
git commit -m "备注"
git push -u origin master //上传到远程仓库
git status //仓库当前的状态
git diff readme.txt //查看修改
git reset --hard HEAD^ //回退到上一个版本
git log //历史记录
git merge origin/master //手动合并
git remote rm name # 删除远程仓库
git remote rename old_name new_name # 修改仓库名
#查看远程信息
git remote -v
#先下载再合并,等同 git pull origin master
git fetch origin
git merge origin/master
#下载分支 lm_test 到 aa 文件夹
git clone -b lm_test https://gitee.com/Jxzssy/lm.git aa
# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 列出所有本地分支和远程分支
git branch -a
# 新建一个分支,但依然停留在当前分支
git branch [branch-name]
# 切换到指定分支,并更新工作区
git checkout [branch-name]
# 新建一个分支,并切换到该分支
git checkout -b [branch]
# 合并指定分支到当前分支
git merge [branch]
# 删除分支
git branch -d [branch-name]
# 删除远程分支
git branch -dr [remote/branch]
关于 “RPC failed; curl 18 transfer closed with outstanding read data remaining”错误在使用git bash下载超大资源的时候可能会出现 ,这时候需要设置 git bash 加大缓存区 git config --global http.postBuffer 542428800
修改提交缓存大小为500M,或者更大的数字
git config --global http.postBuffer 524288000
git config --global http.postBuffer 1024288000
xxxxxxxxxx
The remote end hung up unexpectedly,公司网络比较缓慢情况下,就断开了
git config --global http.lowSpeedLimit 0
git config --global http.lowSpeedTime 999999
增加最低速度时间,总算把代码克隆下来了
xxxxxxxxxx
GitHub下载速度太慢:
sudo vim /etc/hosts
151.101.108.249 github.global.ssl.fastly.net
13.229.188.59 github.com
52.216.78.148 github-cloud.s3.amazonaws.com
/etc/init.d/network restart
xxxxxxxxxx
连接mysql(有一个数据表python,表job_inf1,job_inf2)
mysql -u root -p
Enterpassword:root
mysql>show databases; 查看所有数据库
mysql>use python;
mysql>show tables;
mysql>select * from job_inf1;
mysql> show variables like 'port'; 查看数据库使用端口
mysql> select database(); 查看当前使用的数据库
mysql> show variables like 'character%'; 查看数据库编码
mysql> show variables like '%datadir%'; 查看数据文件存放路径
mysql> grant all privileges on *.* to 'root'@'%' identified by '8lieMi520;wn' with grant option; 设置外网访问
mysql> flush privileges;刷新
mysql5.7报err 1055错误 sql_mode=only_full_group_by
xxxxxxxxxx
vim /etc/my.cnf
末尾增加
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
systemctl restart mysqld
xxxxxxxxxx
对单个的表——导出(数据):
查看是否有导出到文件的权限 secure_file_priv :show variables like '%secure%';
设置 secure_file_priv=F:/000000000/phpStudy/MySQL/back,重启;
SELECT * FROM job_inf1 INTO OUTFILE 'F:/000000000/phpStudy/MySQL/bin/job_inf1.txt';
xxxxxxxxxx
对单个的表——导入(支持b,a,c换位):
LOAD DATA LOCAL INFILE "F:\\aaa.text" INTO TABLE job_inf1 (b,a,c);
xxxxxxxxxx
mysqldump (导出 SQL 格式):
导出creat table 结构)mysqldump -u root -p --tab=F:\\000000000\\phpStudy\\MySQL\\bin python job_inf2
(导出整个数据库)mysqldump -u root -p python >F:\\000000000\\phpStudy\\MySQL\\bin\\dump.sql
(备份所有数据库)mysqldump -u root -p --all-databases >F:\\000000000\\phpStudy\\MySQL\\bin\\all.sql
数据库——导出:
mysqldump -u root -p python --default-character-set=utf8 > F:\\000000000\\phpStudy\\MySQL\\bin\\dump.sql
数据库——导入:
mysqldump -u root -p python < F:\\000000000\\phpStudy\\MySQL\\bin\\dump.sql
导入到远程服务器上:
mysqldump -u root -p database_name | mysql -h other-host.com database_name
获取远程服务器上数据库:
mysqldump -h 118.25.227.220 -P 3306 -u myceshi -p myceshi > F:\\000000000\\phpStudy\\MySQL\\bin\\al.sql
xxxxxxxxxx
导入:
1.mysql 命令导入:
mysql -u root -p try < F:\\000000000\\phpStudy\\MySQL\\bin\\al.sql
2.source
source F:\\000000000\\phpStudy\\MySQL\\bin\\al.sql
3.LOAD DATA
4.mysqlimport 必须以.txt文件命名的表必须存在且表结构和之前表结构一样才能完全导入数据
mysqlimport -u root -p --local try F:\\000000000\\phpStudy\\MySQL\\bin\\dump.txt
*清除数据表news中content字段中的空格 : update `news` set `content`=replace(`content`,' ','');
mysql 时间格式化函数 :
以不同的格式显示日期/时间数据 : DATE_FORMAT(data,'%Y-%m-%d') as ctime
以 INT 存储的时间转换成日期: FROM_UNIXTIME(unix_timestamp , "%Y-%m-%d %h:%i") AS ttime
日期的数据转换成时间戳 : UNIX_TIMESTAMP(data)
centos8 卸载mysql:
xxxxxxxxxx
查看之前已安装的Mysql
rpm -qa |grep mysql
卸载之前已经安装的Mysql
rpm -e mysql-community-server-5.7.30-1.el7.x86_64
yum update
yum -y remove mysql-libs-*
移除mariadb程序文件
yum remove -y mariadb*
查询mysql相关文件并删除
find / -name "mysql*" |xargs rm -rf
find / -name "mariadb*" |xargs rm -rf
centos7.2 安装mysql5.7:
xxxxxxxxxx
没有wget的先安装wget
yum install wget
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server
yum -y install mysql-devel
systemctl start mysqld.service 启动mysql
systemctl status mysqld.service 查看运行状态
mysql --version 查看Mysql版本
修改密码:
service mysqld start
cat /var/log/mysqld.log | grep password // 复制mysql初始密码 7zi;e3lNXV,
mysql -uroot -p
Enter password: // 输入初始密码 7zi;e3lNXV,进入mysql
mysql>set global validate_password_policy=0;
mysql>set global validate_password_length=1;
mysql> alter user 'root'@'localhost' identified by '8lieMi520;wn';
mysql>\q
service mysqld restart
yum -y install mysql-community-server
Error: Unable to find a match: mysql-community-server
解决:
先执行:yum module disable mysql
再执行:yum -y install mysql-community-server
xxxxxxxxxx
#https://www.cnblogs.com/itwlp/p/12004150.html
# 安装EPEL yum存储库
#yum list installed | grep php #查看已安装的PHP,查到后rpm -e 卸载
#yum repolist all | grep php
yum install epel-release -y
# 安装Remi存储库
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
#查看可以安装的php版本
yum repolist all | grep php
#设置默认安装的php版本
yum-config-manager --enable remi-php74
#若提示:-bash: yum-config-manager: 未找到命令表明未安装yum-utlis包,yum -y install yum-utils 即可
#安装PHP
yum -y install php
#安装PHP扩展
yum search php74-php
#设置开机启动
yum -y install php-fpm
systemctl enable php-fpm
systemctl start php-fpm # 启动
systemctl stop php-fpm # 停止
systemctl reload php-fpm # 重载
yum -y remove php* 清理 旧php
yum list php* 查看可以安装的php版本
查找php.ini
sudo find /* -name 'php.ini'
https://blog.csdn.net/ltstud/article/details/78476333
当使用phpize的时候出现Can't find PHP headers in /usr/include/php The php-devel package is required for use o
xxxxxxxxxx
yum info php-devel
yum search php-devel
yum install php-devel
which phpize
/usr/bin/phpize
xxxxxxxxxx
cd /opt 下载composer-setup.php到当前目录
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
php composer-setup.php 安装
mv composer.phar /usr/local/bin/composer 将composer设置成全局
composer config -g repo.packagist composer https://packagist.phpcomposer.com 替换成原有的镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 替换成阿里云的镜像
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ 腾讯云镜像
composer self-update 更新composer
F1 打开 Python 帮助文档 Python文件窗口和Shell 均可用 Alt+/ 自动补全前面曾经出现过的单词,如果之前有多个单词具有相同前缀,可以连续按下该快捷键,在多个单词中间循环选择 Python 文件窗口和 Shell 窗口均可用 Ctrl+Z 撤销一步操作 Python 文件窗口和 Shell 窗口均可用 Ctrl+Shift+Z 恢复上—次的撤销操作 Python 文件窗口和 Shell 窗口均可用 Ctrl+S 保存文件 Python 文件窗口和 Shell 窗口均可用
Alt+P 浏览历史命令(上一条) 仅 Python Shell 窗口可用 Alt+N 浏览历史命令(下一条) 仅 Python Shell 窗口可用 Ctrl+F6 重新启动 Python Shell 仅 Python Shell 窗口可用
Alt+3 注释代码块 仅 Python 文件窗口可用 Alt+4 取消代码块注释 仅 Python 文件窗口可用 Alt+g 转到某一行 仅 Python 文件窗口可用 Ctrl+] 缩进代码块 仅 Python 文件窗口可用 Ctrl+[ 取消代码块缩进 仅 Python 文件窗口可用
============================================================= python文件读写模式 r,r+,w,w+,a,a+ 简介
模式 可做操作 若文件不存在 是否覆盖 r 只能读 报错 - r+ 可读可写 报错 是 w 只能写 创建 是 w+ 可读可写 创建 是 a 只能写 创建 否,追加写 a+ 可读可写 创建 否,追加写
f = open("poem.txt","a+")#打开文件以便写入 print('沧海月明珠有泪',file=f) print('蓝回日暖玉生烟',file=f) f.close()
============================================================= python中取余%
a=5 n=3 print(str(a)+"%"+str(n)+"的值为:", a % n)
r=a-n*(a//n) print(r)
============================================================= 位运算(32位):
原码:符号位为 0 代表正数,符号位为 1 代表负数; 反码:符号位保持不变,对原码按位取反; 补码:正数的补码和原码完全相同,负数的补码是其反码 +1;
与&:二进制码都是1,取1 或|:有1位1 异或^:相同位0,不同位1 ~取反:对补码取反 <<:对补码左移 (左边溢出的丢弃,右边以 0 来填充)
:对补码右移 (左边以符号位来填充,右侧溢出丢弃)
============================================================= Scrapy 安装 pip install scrapy 官网下载对应python 版本的Twisted (www.lfd.uci.edu/~gohlke/pythonlibs/) pip install Twisted-18.9.0-cp36-cp36m-win_amd64.whl
使用工具:scrapy、pip、 Xpath
============================================================= 爬虫 1.cmd cd 到project项目下执行新建项目 scrapy startproject NewSpider 2.爬取信息
https://www.zhipin.com/c101280100/h_101280100 3.提取节点内容 response.xpath ('//div[@class="job-primary"]/div/h3/a/div/text()').extract() 4.cd NewSpider目录下,创建蜘蛛 Spider:scrapy genspider job_position "zhipin.com" 5.启动蜘蛛 scrapy crawl job_position
=============================================================
response.xpath ('//div[@class="masonry-brick"]/img/@src').extract()
redis-server.exe //打开服务端窗口
redis-cli //打开一个客户端窗口
redis-cli.exe -h 127.0.0.1 -p 6379 //打开一个客户端窗口
set myKey abc get myKey
CONFIG GET * //获取所有配置项
xxxxxxxxxx
查看是否设置了密码验证: config get requirepass
设置密码 : config set requirepass "password"
设置了密码之后要使用密码操作 :auth password
xxxxxxxxxx
事务命令:
multi 标记一个事务块的开始
exec 执行所有事务块内的命令
discard 取消事务,放弃执行事务块内的所有命令
watch 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断
unwatch 取消 WATCH 命令对所有 key 的监视
xxxxxxxxxx
linux上安装redis扩展,make & make install 后
执行了make test
报错了:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/src/phpredis-develop/modules/redis.so' - /usr/local/src/phpredis-develop/modules/redis.so: undefined symbol: json_globals in Unknown on line 0
这是因为和json扩展加载顺序冲突导致的
解决方法:
不要在php.ini里加入extension=redis.so这行,可在php.d文件夹下创建新文件redis.ini,在redis.ini里加入extension=redis.so这行.
重启php
php -m 发现redis扩展加载上了
在windows环境中安装‘VMware Workstation Pro’并配置“CentOS”:
VMware 下载地址 :https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html VMware Workstation Pro 15 激活许可证,获取秘钥 :
xxxxxxxxxx
UY758-0RXEQ-M81WP-8ZM7Z-Y3HDA
VF750-4MX5Q-488DQ-9WZE9-ZY2D6
UU54R-FVD91-488PP-7NNGC-ZFAX6
YC74H-FGF92-081VZ-R5QNG-P6RY4
YC34H-6WWDK-085MQ-JYPNX-NZRA2
VZ182-0NDE6-0817Y-KMMZZ-YKAC4
ZC75R-0YW5P-H809Y-QYWQZ-NZ8G8
ZV7XK-02D56-480JZ-ENZEX-YF8XD
YC588-FTDDL-H852Y-UXYGE-YZKE2
VM安装CentOS6.8正常使用了一段时间,突然无法联网问题的解决(https://blog.csdn.net/weixin_41659707/article/details/80466025)
xxxxxxxxxx
#百度查找类似问题的解决方案,很多这样问题的帖子都是说让cd /etc/sysconfig/network-scripts/
#在这个目录下,找到一个ifcfg-ens*的文件,然后修改这个文件里的内容onboot=no 为 onboot=yes。
此电脑——>右键管理——>设备管理器——>网络适配器
使用ftp远程登录VM里的centos虚拟主机:
xxxxxxxxxx
$ ifconfig
使用ens33中的局域网ip登录FTP
1.安装node.js(https://nodejs.org/en/) D:\nodejs 2.添加系统路径path环境变量 D:\nodejs 3.添加系统路径path环境变量 新建文件夹node_global node_cache npm config set prefix "D:\nodejs\node_global" npm config set cache "D:\nodejs\node_cache" 4.npm config set registry=http://registry.npm.taobao.org 配置镜像站 检查镜像是否可用 npm config get registry 5.安装vue :npm install vue -g 测试NPM安装vue-router:npm install vue-router -g 运行npm install vue-cli -g安装vue脚手架 6.重新打开CMD:vue-v cd到项目路径 初始化 vue init projectName 编译安装项目 npm install 运行项目 npm run 生成静态文件 npm run build
7.打开项目 :cd到项目路径
npm的本地仓库,输入命令npm list -global 显示所有配置信息 npm config list
Wokerman 使用步骤:
1.配置执行批处理文件所需的php环境变量; 2.开启服务器函数禁用的函数,proc_open ,proc_close 等,php.ini中disable_functions ; 3.开启php_socket扩展,php.ini中 extension=php_sockets.dll; 4.端口冲突禁用问题; 5.数据库插件; 6.心跳设置; 7.守护进程运行。
Linux centos下使用workerman: ( PHP>=5.3.3,并安装了pcntl、posix扩展 )
xxxxxxxxxx
#安装php-cli主程序以及pcntl、posix、libevent库及git程序
yum install php-cli php-process git gcc php-devel php-pear libevent-devel -y
#安装event扩展
pecl install event
#注意提示:Include libevent OpenSSL support [yes] : 时输入no回车,
#注意提示:PHP Namespace for all Event classes :时输入yes,其它直接敲回车就行
#找到并打开php.ini文件,在最后一行加入如下配置
extension=event.so
#通过github下载WorkerMan主程序
git clone https://github.com/walkor/Workerman
#检查Linux环境是否满足WorkerMan要求
curl -Ss http://www.workerman.net/check.php | php
设置workerman开机自启动, 执行 start.php
xxxxxxxxxx
whereis php # 通过执行命令whereis php查找
#php: /usr/bin/php /usr/lib64/php /etc/php.d
#php 执行路径 /usr/bin/php
/usr/bin/php /www/admin/localhost_80/wwwroot/worker/start.php start -d
# 执行下面命令添加
vim /etc/rc.local
#添加文本:
/usr/bin/php /www/admin/localhost_80/wwwroot/worker/start.php start -d
xxxxxxxxxx
php start.php start
php start.php start -d
php start.php stop
php start.php restart
php start.php reload
php start.php status
php start.php connections
软件 | 软件要求 |
---|---|
linux内核版本: | 2.6.18及以上版本(操作系统依赖) |
gcc版本: | 4.8.2及以上版本、glibc-devel(c++语言框架依赖) |
bison工具版本: | 2.5及以上版本(c++语言框架依赖) |
flex工具版本: | 2.5及以上版本(c++语言框架依赖) |
cmake版本: | 3.2及以上版本(c++语言框架依赖) 【--------------单独cmake更新------linux note (cmake升级)------------------】 |
mysql版本: | 4.1.17及以上版本(框架运行依赖) 【--------------------------------centos--mysql-5.7----------------------------------】 |
nvm版本: | 0.35.1及以上版本(web管理系统依赖, 脚本安装过程中自动安装) 【--------v14.10.0---linux note (安装nvm)---nvm, pm2-----】 |
node版本: | 12.13.0及以上版本(web管理系统依赖, 脚本安装过程中自动安装) 【--------v14.10.0---linux note (安装nvm)---nvm, pm2-----】 |
xxxxxxxxxx
yum install glibc-devel gcc gcc-c++ bison flex cmake which psmisc ncurses-devel zlib-devel
xxxxxxxxxx
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server
yum -y install mysql-devel
systemctl start mysqld.service
【-------------Mysql note-----修改密码,网关,修改错误信息------------】
xxxxxxxxxx
下载TarsFramework源码
cd ${source_folder}
git clone https://github.com/TarsCloud/TarsFramework.git --recursive
cd TarsFramework
git submodule update --remote --recursive
cd build
cmake ..
make -j4
如果需要重新编译
cd build
make clean
make -j4
切换至root用户,创建安装目录
cd /usr/local
mkdir tars
mkdir app
安装
cd TarsFramework
cd build
make install
默认的安装包路径:/usr/local/tars/cpp, 即编译完成的框架&安装脚本在这个目录
默认的安装完成后的路径为/usr/local/app, 即安装完成后的路径
xxxxxxxxxx
git clone https://github.com/TarsCloud/TarsWeb.git
mv TarsWeb web
cp -rf web /usr/local/tars/cpp/deploy/
cd /usr/local/tars/cpp/deploy
chmod a+x linux-install.sh
./linux-install.sh MYSQL_HOST MYSQL_PASSWORD INET REBUILD(false[default]/true) SLAVE(false[default]/true) MYSQL_USER MYSQL_PORT
(-------------如:./linux-install.sh 175.24.114.227 '8lieMi520;wn' eth0 false false root 3306----------------)
MYSQL_HOST: mysql数据库的ip地址
MYSQL_PASSWORD: mysql数据库的MYSQL_USER的密码(注意密码不要有太特殊的字符, 例如!, 否则shell脚本识别有问题, 因为是特殊字符)
INET: 网卡的名称(ifconfig可以看到, 比如eth0), 表示框架绑定的本机IP, 注意不能是127.0.0.1
REBUILD: 是否重建数据库,通常为false, 如果中间装出错, 希望重置数据库, 可以设置为true
SLAVE: 是否是从节点
MYSQL_USER: mysql用户, 默认是root
MYSQL_PORT: mysql端口
以 helloworld 为例:https://github.com/TarsCloud/TarsDocs/blob/master/hello-world/tarsphp.md#tars-registry
运维管理=>部署服务
xxxxxxxxxx
填写对应的应用名和服务名称,注意,这个与下文中 tars 文件夹中的 tars.proto.php 需要完全一致。
模板为 tars.tarsphp.default 服务模板,默认不启用 set
服务类型为 tars_php
选择可用端口,填写服务器内网 ip. (可在运维管理=>节点管理中查看)
端口类型为 TCP !!!!协议类型 HTTP 服务必须选择非 TARS!!!!!!
线程数对应 SWOOLE 的进程数
最大连接数和队列最大长度、队列超时时间
目录结构,固定为 scripts、src 和 tars
xxxxxxxxxx
新建 src/composer.json
新建 src/index.php 这个文件负责进行启动和入口加载工作
composer install 加载对应的依赖包
新建 src/services.php
新建 tars/tars.proto.php 名称要与在 tars 平台上面的名称完全一一对应
新建 src/component/Controller.php
新建 src/controller/IndexController.php
完成代码开发后,在 src 目录下执行 composer run-script deploy 会自动进行代码打包
上传到 tars 平台,并进行发布
浏览器打开 http://{machine_ip}:9000/index/index
页面将显示 Hello Tars!
xxxxxxxxxx
注意 : thinkphpInTars 配置项目需要修改两个文件
thinkphpInTars-master-demo\src\config\swoole.php 修改端口,
thinkphpInTars-master-demo\src\config\swoole_server.php,修改端口,增加'cache_size' =>10000
xxxxxxxxxx
重启web-tars;
cd /usr/local/app/web
npm run prd
重启框架服务: /usr/local/app/tars/tars-start.sh
停止框架服务: /usr/local/app/tars/tars-stop.sh
重启某个组件: /usr/local/app/tars/tarsxxxx/util/start.sh
重启数据库 :systemctl restart mysqld
重启apache : systemctl restart httpd
systemctl stop httpd
systemctl start httpd
systemctl status httpd
shutdown -r now 立刻重启(root用户使用)
遇到的问题:
window 下载的文件,上传到linux .sh 格式问题;(转换格式--linux note文件操作)
composer 安装 出现 killed问题;(增加linux 缓存)
free -m mkdir -p /var/swap cd /var/swap #Here, 1M * 2000 ~= 2GB of swap memory dd if=/dev/zero of=swapfile bs=1M count=2000 mkswap swapfile swapon swapfile echo “/var/swap/swapfile none swap sw 0 0” >> /etc/fstab #cat /proc/meminfo free -m
数据库问题(https://blog.csdn.net/qq_42262444/article/details/88524472)
xxxxxxxxxx
InnoDB: mmap(137363456 bytes) failed; errno 12
2019-03-13 09:06:25 79498 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
2019-03-13 09:06:25 79498 [ERROR] Plugin 'InnoDB' init function returned error.
2019-03-13 09:06:25 79498 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2019-03-13 09:06:25 79498 [ERROR] Unknown/unsupported storage engine: InnoDB
2019-03-13 09:06:25 79498 [ERROR] Aborting
数据库报错:显示系统的物理内存不足
查看内存,适当增加swap(Swap分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用)
xxxxxxxxxx
$ free
total used free shared buffers cached
Mem: 608476 565044 43432 0 1284 53996
Swap: 0 0 0
xxxxxxxxxx
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 #增加1G的SWAP进去
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ free
total used free shared buffers cached
Mem: 608476 601432 7044 0 824 88752
Swap: 1048572 0 1048572
重启数据库 :systemctl restart mysqld
1
1
环境:centos7.6 +Python2.7+Apache2.4 案例:https://www.cnblogs.com/navysummer/p/12871006.html
安装python虚拟环境
xxxxxxxxxx
pip install virtualenv #py2安装
pip3 install virtualenv #py3安装
创建虚拟环境(需要安装virtualenv(可以让每一个python项目单独使用一个环境,而不会影响python系统环境,也不会影响其他项目的环境)),系统中的python模块在虚拟环境中不能直接使用
xxxxxxxxxx
mkdir django_project
cd django_project
virtualenv venv #创建虚拟环境,虚拟环境名字‘venv’
在虚拟环境里安装django()
xxxxxxxxxx
source venv/bin/activate #进入virtualenv的虚拟开发环境,会显示(vene),代表已经进入了这个环境,然后就可以安装Django
pip install django
# 删除虚拟环境
# rm -r venv
# 需要在虚拟环境中另外安装虚拟环境的python模块
# pip install numpy #安装numpy
# pip install scipy
# pip install matplotlib
# 查看虚拟环境中已经安装的包:pip list
# deactivate 退出虚拟环境
创建django项目
xxxxxxxxxx
django-admin.py startproject mysite
cd mysite
#测试项目,测试正常后,ctrl+c结束
python manage.py runserver
安装apache
xxxxxxxxxx
yum install httpd httpd-devel -y
#python组件 python-devel
yum install python-devel
安装apache所需的mod_wsgi模块
xxxxxxxxxx
yum -y install mod_wsgi
#或者pip install mod_wsgi
查看apache2是否导入mod_wsgi模块
xxxxxxxxxx
grep -r 'mod_wsgi.so' /etc/httpd/
新建一个apache的虚拟主机
xxxxxxxxxx
vi /etc/httpd/conf.d/django.conf
<Directory /var/www/html/django_project/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIPythonHome /var/www/html/django_project/venv
WSGIPythonPath /var/www/html/django_project/venv/lib/python2.7/site-packages
Listen 8080
<VirtualHost *:8080>
ServerName django.example.com
WSGIScriptAlias / /var/www/html/django_project/mysite/mysite/wsgi.py
</VirtualHost>
重启apache
xxxxxxxxxx
systemctl restart httpd
httpd -k restart
wsgi.py配置
这个问题差点被搞死,我以为会自动把相关配置弄好,结果我错了,需要加一个路径 /var/www/html/django_project1/mysite/(项目路径)
xxxxxxxxxx
import os
import sys
sys.path.append('/var/www/html/django_project1/mysite/')
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "salt_web.settings")
application = get_wsgi_application()
配置settings.py ,设置允许访问的地址
xxxxxxxxxx
ALLOWED_HOSTS = ['175.24.114.227']
配置urls.py
xxxxxxxxxx
from django.conf.urls import url
from . import views
urlpatterns = [
url('hello/', views.hello),
url('test/', views.hello),
]
配置views.py
xxxxxxxxxx
from django.shortcuts import render
from django.http import HttpResponse
import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
import io
import base64
def hello(request):
np.random.seed(1000)
y = np.random.standard_normal(20)
plt.plot(y.cumsum())
plt.grid(True)
plt.xlim(-1, 20)
plt.ylim(np.min(y.cumsum()) - 1, np.max(y.cumsum()) + 1)
plt.show()
buf = io.BytesIO()
plt.savefig(buf, format='png')
base64_png = base64.b64encode(buf.getvalue())
# response = HttpResponse(buf.getvalue(),content_type='image/png')
context = {}
context['hello'] = 'Python Test'
context['image'] = base64_png
return render(request, 'hello.html', context)
添加模板文件
xxxxxxxxxx
cd project
mkdir templates
vim test.html
#修改settings.py,修改 TEMPLATES 中的 DIRS 为 [os.path.join(BASE_DIR, 'templates')],如下所示:
...
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # 修改位置 BASE_DIR与 manage.py 目录同级
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
...
#views.py
from django.shortcuts import render
def runoob(request):
context = {}
context['hello'] = 'Hello World!' #要传递到模板的参数 hello
return render(request, 'runoob.html', context) #指定模板名称,传递参数
#test.html
<h1>{{ hello }}</h1> #参数页面显示
图片显示空白,
xxxxxxxxxx
from django.shortcuts import render
from django.http import HttpResponse
import matplotlib as mpl
mpl.use('Agg') #需要使用agg
import matplotlib.pyplot as plt
import numpy as np
import io
import base64
def hello(request):
np.random.seed(1000)
y = np.random.standard_normal(20)
plt.plot(y.cumsum())
plt.grid(True)
plt.xlim(-1, 20)
plt.ylim(np.min(y.cumsum()) - 1, np.max(y.cumsum()) + 1)
plt.show()
buf = io.BytesIO()
plt.savefig(buf, format='png')
base64_png = base64.b64encode(buf.getvalue())
plt.close()
buf.close()
# response = HttpResponse(buf.getvalue(),content_type='image/png')
context = {}
context['hello'] = 'Python Test'
context['image'] = base64_png
return render(request, 'hello.html', context)
模板内加载静态资源 static
xxxxxxxxxx
# INSTLLED_APPS中的django.contrib.staticfiles必须删除或者注释掉,DEBUG模式必须开启
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
INSTALLED_APPS = [
# 'django.contrib.staticfiles',
]
DEBUG = True
#在urls.py中,再配置url路由
from django.conf.urls import url
from django.contrib import admin
from django.conf import settings #引入settings
from django.conf.urls.static import static #引入static
from . import views
urlpatterns = [
url(r'^index/', views.index),
url('hello/', views.hello),
url('test/', views.test),
url('zero/', views.zero),
url('one/', views.one),
url('two/', views.two),
url('three/', views.three),
#path('hello/', views.hello),
url(r'^admin/', admin.site.urls),
]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
语言编码
xxxxxxxxxx
# -*- coding: UTF-8 -*-
# coding=utf-8
# 文件名:test.py
注意事项:
apache日志查看: /var/log/httpd/error_log
mod_wsgi 模块 apache无法加载,可能是python版本不一致:
下载mod_wsgi安装包:
xxxxxxxxxx
curl https://files.pythonhosted.org/packages/47/69/5139588686eb40053f8355eba1fe18a8bee94dc3efc4e36720c73e07471a/mod_wsgi-4.6.5.tar.gz -o mod_wsgi-4.6.5.tar.gz
tar -zxvf mod_wsgi-4.6.5.tar.gz
cd mod_wsgi-4.6.5
#使用指定的python版本安装mod_wsgi
python2.7 setup.py install
安装成功后配置apache加载wsgi模块,使用mod_wsgi-express install-module查询mod_wsgi.so的路径,输出如下:
xxxxxxxxxx
[root@javen-zhao mod_wsgi-4.6.5]# mod_wsgi-express install-module
LoadModule wsgi_module "/usr/lib64/httpd/modules/mod_wsgi-py27.so"
WSGIPythonHome "/usr"
在Apache模块配置目录/etc/httpd/conf.modules.d/创建一个mod_wsgi.conf配置文件,加入上面的内容:
xxxxxxxxxx
vim mod_wsgi.conf
LoadModule wsgi_module "/usr/lib64/httpd/modules/mod_wsgi-py27.so"
#WSGIPythonHome "/usr"
重新启动apache检查是否配置成功:
xxxxxxxxxx
httpd -k restart
查看apache的错误日志:
xxxxxxxxxx
tail -f /var/log/httpd/error_log
[Thu Dec 20 16:08:40.307003 2018] [lbmethod_heartbeat:notice] [pid 14097] AH02282: No slotmem from mod_heartmonitor
[Thu Dec 20 16:08:40.309895 2018] [mpm_prefork:notice] [pid 14097] AH00163: Apache/2.4.6 (CentOS) mod_wsgi/4.6.5 Python/2.7 configured -- resuming normal operations
[Thu Dec 20 16:08:40.309917 2018] [core:notice] [pid 14097] AH00094: Command line: 'httpd'
一.html文件(文件名为upfile.html)
xxxxxxxxxx
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>python</title>
</head>
<body>
<form method="POST" action="/uploadfile/" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="提交" />
</form>
<p> {{title}}</p>
</body>
</html>
xxxxxxxxxx
说明:
1、表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作.
2、method="post"文件上传的方式必须为POST方式
3、type="file"类型为文件域
二、、在myApp/url.py中添加配置url
xxxxxxxxxx
urlpatterns = [
...,
url('upfile/', views.upfile),
url('uploadfile/', views.uploadfile),
]
三、在myApp/views.py文件中定义视图
xxxxxxxxxx
def uploadfile(request):
if request.method == 'POST':
f = request.FILES['file']#upfile的html文件中命名的名字
#合成文件在服务器端存储的路径
filePath = os.path.join(settings.MEDIA_ROOT, f.name)
with open(filePath, 'wb') as fp:
for info in f.chunks():#因为文件f的大小并不确定,所以要调用f.chunks()的方法来以文件流的方式一段一段的接收
fp.write(info)
#读取文件内容
with open(filePath, "r") as fff: # 打开文件
data = fff.read() # 读取文件
context = {}
context['title'] = ''
context['image'] = ''
context['show'] = 'none'
context['textarea'] = data
return render(request, 'myform.html', context)
else:
context = {}
context['title'] = ''
context['image'] = ''
context['show'] = 'none'
context['textarea'] = 'error'
return render(request, 'myform.html', context)
def upfile(request):
context = {}
context['title'] = 'upfile Test '
return render(request, 'formupload.html', context)
注:感谢大佬文章 https://blog.csdn.net/weixin_44387495/article/details/95589379
ctrl + w 选择内容。选择光标所在,数组、函数、类里的内容;
ctrl + alt + v 定义变量。选择某段字符,定义变量值为该字符
ctrl + D 复制选中的内容
ctrl + p 显示函数的参数
服务器执行.bat定时计划,来完成定时任务的结果;
http://blog.csdn.net/qq1355541448/article/details/50451607;
服务器任务计划
1.任务计划程序因服务器的系统不一样所在位置有差别,不是在控制面板里,就是是在管理工具里。W8任务计划在管理工具里。
2.原理就是通过服务器定时执行bat格式的文件来执行项目中的某段程序,以达到定时执行的目的。
3.“任务计划程序”–点击“任务计划程序库”在右则会看到操作项里有“创建基本任务”和“创建任务”如图:
4.任务名字:分红计划;下面运行权限选择框中的。
5.选择“触发器”选项,点击“新建”,开始任务就选择执行计划时;设置中选择每天,每隔一天发生一次;“重复任务间隔”这个选择后,设置1小时;持续时间选择无限;下面那个停止运行超过以下时间不要勾选;确定。
6.点击操作->新建->浏览文件,找到项目中admin/pre/renwu.bat文件,选择它,然后下面有个“起始于”复制刚刚浏览选择的那个/renwu.bat之前的路径;举例,比如说“程序或脚本”选择bat文件之后显示的是E:\phpstuday\WWW\renwu\admin\pre\renwu.bat,这个地方只需要复制E:\phpstuday\WWW\renwu\admin\pre就可以了。
7.确定,完成
xxxxxxxxxx
$model=M("resources");
$data=$model->join('user ON resources.uid = user.id)
->where($where)->order($order)->limit($limit)->select();
时间戳改成date格式 {$v.time|date="Y-m-d",###}
js不能把变量直接传送到php中,必须通过请求,php可以直接传送变量到 js中,因为页面先加载php。var=({$a})
Php 单引号不解析,双引号可以解析变量。Js反斜杠\对代码换行。
TP3中redirect 重指向项目外地url时,直接使用redirect()。项目内用$this->redirect();
项目跳转时出现不该有的页面是因为没加exit;
Form 表单提交时要把table完全放入form中,要不然后来通过js得到的文本框值用$_post得不到;
xxxxxxxxxx
on(events,[selector],[data],fn) 概述:在选择元素上绑定一个或多个事件的事件处理函数。
on()方法绑定事件处理程序到当前选定的jQuery对象中的元素。在jQuery 1.7中,.on()方法 提供绑定事件处理程序所需的所有功能。帮助从旧的jQuery事件方法转换,see .bind(), .delegate(), 和 .live(). 要删除的.on()绑定的事件,请参阅.off()。要附加一个事件,只运行一次,然后删除自己, 请参阅.one()
参数:
events,[selector],[data],fnV1.7
events:一个或多个用空格分隔的事件类型和可选的命名空间,如"click"或"keydown.myPlugin" 。
selector:一个选择器字符串用于过滤器的触发事件的选择器元素的后代。如果选择的< null或省略,当它到达选定的元素,事件总是触发。
data:当一个事件被触发时要传递event.data给事件处理函数。
fn:该事件被触发时执行的函数。 false 值也可以做一个函数的简写,返回false。
events-map,[selector],[data]V1.7
events-map:个用字符串表示的,一个或多个空格分隔的事件类型和可选的命名空间,值表示事件绑定的处理函数。
selector:一个选择器字符串过滤选定的元素,该选择器的后裔元素将调用处理程序。如果选择是空或被忽略,当它到达选定的元素,事件总是触发。
data:当一个事件被触发时要传递event.data给事件处理函数。
$("form").on("click", ".my-btn",function() {
$('this').parent().remove();
$('#b').val()
});
Input value中的html标签,先解析标签在去除标签;
$title=strip_tags(htmlspecialchars_decode($title));
$a=”input".($check_color=="red"?"checked='checked'":'')."/”;
xxxxxxxxxx
邮件问题:POP3(端口110)SMTP(端口25);
pop.qq.com 、smtp.qq.com
QQ 邮箱:smtp服务器使用的SSL加密方式,SMTP服务器(端口465或587);
POP3服务器(端口995)
163邮箱:smtp可以使用默认的25端口,不加密
xxxxxxxxxx
public function aa($path,$path1){
if(is_file($path1)){
return "指定路径不可用";
}
if(!file_exists($path1)){
mkdir($path1);
}
if(is_dir($path1)){
$handle=opendir($path);
while ($file=readdir($handle)){
if ($file!="."&&$file!=".."){
$p=$path."/".$file;
$p1=$path1."/".$file;
if(file_exists($p1)){
$arr=explode(".",$file);
$first=array_shift($arr);
$last=array_pop($arr);
$file=$first."(1).".$last;
}
$p1=$path1."/".$file;
if (is_dir($p)){
aa($p,$p1);
}
if(is_file($p)){
copy($p,$p1);
}
}
}
closedir($handle);
}
}
xxxxxxxxxx
function deldir($path)
{
if (file_exists($path)) {
$dir_handle = opendir($path);
while ($file = @readdir($dir_handle)) {
if ($file != "." && $file != "..") {
$p = $path . "/" . $file;
if (is_dir($p)) {
deldir($p);
}
if (is_file($p)) {
unlink($p);
}
}
}
rmdir($path);
closedir($dir_handle);
}
}
xxxxxxxxxx
public function sql_input(){
$file_sql=dirname('sitestar.sql';
$sql_content=file_get_contents($file_sql);
$sql_content = str_replace("\r", "\n", $sql_content);
$config_sql=explode(";\n", $sql_content);
$conn = mysql_connect($dabate['hostname'],$dabate['user'],$dabate['password']);
mysql_query("SET NAMES 'utf8'");
mysql_query("CREATE DATABASE IF NOT EXISTS ".$username." DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;");
mysql_select_db($username, $conn);
foreach ($config_sql as $_value) {
mysql_query($_value.';');
}
mysql_close();
}
xxxxxxxxxx
<script type="text/javascript">
var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
if(!myreg.test($("#phone").val()))
{
alert('请输入有效的手机号码!');
return false;
}
</script>
xxxxxxxxxx
$keyword='600 (2).jpg,./static/img/1510137687600 (2).jpg|600 (1).jpg,./static/img/1510137687600 (1).jpg|600.jpg,./static/img/1510137687600.jpg|6D16B91695B5.gif,./static/img/15101376876D16B91695B5.gif|';
$hello=explode('|',$keyword);
$a='';
foreach($hello as $k=>$v){
$tip=strpos($v,"/");
$hello[$k]=substr($v,$tip);
$a.=$hello[$k].';';
}
$a=trim($a,';');
xxxxxxxxxx
public function teamNum($id,$num){
if(!$id)return 0;
$member=M("Member");
if(is_array($id)){
$id_str=implode(',',$id);
$data['inviter'] = array('in',$id_str);
$result=$member->field('id')->where($data)->getField('id',true);
$num+=count($result);
if(count($result)<=0){
return $num;
}else{
return $this->teamNum($result,$num);
}
}else{
$result=$member->field('id')->where('inviter='.$id)->getField('id',true);
$num+=count($result);
if(count($result)<=0){
return $num;
}else{
return $this->teamNum($result,$num);
}
}
}
安装dede框架;
了解框架目录结构;
熟悉dede后台设置,操作,前台对应静态页面的生成;
织梦全局变量;
了解织梦自定义标签;
a.单标签{dede:field.字段} ,双表签{dede:}底层模板{/dede:};
b.全局标签;
c.列表标签;
d.内容页标签;
e.分页标签、信息标签、自定义标签等;
1.后台自定义模板设置,模板页面选择,模块html生成,页面静态文件生成;后台设置更改默认模板风格。
2.首页、封面页的读取,动态轮播图的设定;
a.系统默认模板:index_#.htm;
b.首页全局标签的调用{dede:global.cfg_ /}
c.公共文件引入:{dede:include file="foot.htm" /}
d.频道:{dede:channel type='top' row='8' }
{/dede:channel}
e.列表:{dede:arclist row=3 orderby=pubdate type='image' imgheight='' }
图片[field:image /]
时间[field:pubdate function="MyDate('y-m-d',@me)"/]
{/dede:arclist}
f.栏目名 {dede:field name='typename'/}
g.sql查询{dede:sql sql='Select content from dede_arctype where id=17'}
[field:content function='cn_substr(html2text(@me),800)'/]
{/dede:sql}
h.遇到问题及解决:
3.添加栏目、更新栏目、生成栏目html、更新网站;
a.默认模板:list_ #.htm;
b.列表{dede:list pagesize='4' titlelen='' orderby='' }
{/dede:list}
c.页码{dede:pagelist listitem="info,index,end,pre,next,pageno" listsize="5"}
d.修改默认分页样式:arc.listview.class.php分页函数,去除
4.后台栏目内容文章添加 生成html、更新网站,前台才能读取;
b.默认模板article_ #.htm;
c.内容页 {dede:field.字段名/}{dede:field name=’’}
1.查看框架思路:
入口->入口文件->公共文件->数据库操作类,模板解析类,视图绑定类;
模块config.php->include/common.inc.php公共环境配置、公共函数、公共类,定义的一些全局变量和方法,每个模板类文件所引用的不同核心类,查看核心类文件;
2.常用的数据库操作方法:
返回1个记录,$arr = $db->GetOne($sql);
执行一个非查询类型的SQL语句,$rs = $db->ExecuteNoneQuery($sql);返回true/false; ExecNoneQuery($sql='')
执行一个非查询类型的SQL语句,返回成功记录数$rs = $db->ExecuteNoneQuery2($sql);
查询语句 $db->SetQuery($dsql);
$db->Execute(); Query($id="me",$sql='')
$db->GetLastID();
GetFetchRow($id='me')
获取特定表的信息 GetTableFields($tbname,$id="me")
获取字段详细信息 GetFieldObject($id="me")
获得查询的总记录数 $db->GetTotalRow($rsid="me")
视图绑定 //dedetemplate.class.php
$a= new DedeTemplate();
$tpl= DEDEB."/templets/2.htm";
$a->LoadTemplate($tpl);
$a->display();
//arc.partview.class.php
require_once DEDEINC."/arc.partview.class.php";
$a = new PartView();
$a->SetTemplet(DEDEB.'/'.'templets/index.htm');
$a->Display();
//datalistcp.class.php
$tpl= new DataListCP();
$tpl->SetTemplate(DEDEB.'/templets/1.htm');
$tpl->Display();
//dedetag.class.php
require_once DEDEINC."/include/dedetag.class.php";
$ctp = new DedeTagParse();
$ctp->LoadTemplate(DEDEB."/templets/5.htm");
$ctp->display();
//arc.caicai.class.php
require_once DEDEINC."/arc.caicai.class.php";
$a = new Caicai();
$a->SetTemplate(DEDEB.'/templets/3.htm');
$a->Display();
//incliude,dedeinclude
3.邮件发送:
后台设定smtp服务开启->163邮箱授权码->自定义表单设计->设计字段->预览->提取源码->引入include/diy.php、mail.class.php类文件引用send_mail()方法->设置参数->接收邮件的qq邮箱也必须有smtp服务;
4.登陆:memberlogin.class.php
根据form表单的三个隐藏文本框属性值来判断状态,对应不同的php方法,传入不同的参数,经方法处理后登陆;
function Judgemember()判断会员是否到期
function IsLogin() 判断是否登陆
function CheckUserSpace()检查会员空间信息
Function UpdateUserTj()更新会员信息
function ResetUser()重置会员信息
function GetEncodePwd($pwd)登陆的密码
function CheckUser(&$loginuser, $loginpwd)检测会员合法性
5.查询
Form表单提交,判断对应不同属性的值,经php文件处理判断是否传入条件,查询数据库,输出相应的结果;
filter.helper.php 搜索字符串过滤
Infolink.lib.php 分类信息链接类
Enums.func.php 联动菜单类
1.Loop 调用任意表数据:
{dede:loop table='dede_arctype' if='id=17' orderway='desc'}
[field:content function='cn_substr(html2text(@me),800)'/]
{/dede:loop}
2.Html2Text(@me) htm转换text Text2Html
3.自定义宏标记:{dede:mytag name='标记名称' typeid=’’ ismake=’’/}
4.会员登录跳转不同页面:
首页:if(empty($gourl) || eregi(“action|_do”,$gourl))
{
ShowMsg(“登录成功,正在转向网站首页…”,”/”,0,2000);
}
当前页:ShowMsg(“成功登录!”,”-1″,0,2000);
echo “ ”;
5.邮件发送、用户注册、邮箱验证、登录、验证码方法收集。
★.thinkcmf支持前端html页面中直接写php代码,这点很灵活的可以直接在view视图中直接读取数据,也可以直接调用相应页面的函数方法来读取数据;
http://www.thinkcmf.com/document/content/id/97.html
1.框架目录:mvc结构,控制器在应用模块控制器在application下,tp3.2的命名规范,控制器前后台文件写在一起,后台控制器有admin字样;view分离成前后台主题模板,分别在根目录下thems和admin下;
2.导航菜单控制,后台可以控制所有导航:
前台导航:先在后台添加前台菜单分类,然后在菜单管理里添加各分类下的东西;
在内容管理中添加前台页面;
后台导航:比较麻烦,需要在application\Admin\Menu\admin_menu.php添加对应应用 模块下的菜单;然后再后台设置相应的控制器路由;
页面设置:单页面在后台设置,可以{$post_title}、{$post_content}等参数直接获取后台 设置的单页面的数据;
3.系统常用函数的一些应用:
sp_get_current_user();获取当前登录的用户,包括users表里详细信息;
sp_update_current_user($user);更新session里当前登录用户的信息;
sp_get_menu();导航菜单生成;
4.公共的模板页面page list和article 其中相对应的数据写法各不相同,需要调用所在页面的函数方法来读取数据;contact 和about 静态页面
5.系统全局变量:
{$site_name} /站点名称
{$site_host} /站点域名
{$site_root} /安装目录
{$site_icp} /备案信息
{$site_admin_email} /管理员邮箱
{$site_tongji} /页面统计代码
{$site_seo_title} /SEO标题
{$site_seo_keywords} /SEO关键字
{$site_seo_description} /SEO描述
{$site_copyright} /版权信息
6.评论系统,评论溢出的控制:word-break:break-all来实现文本的换行
★.Thinkcmf 调试dubug的问题; 在\application\Common\Conf\debug.php更改
'SHOW_PAGE_TRACE' => true, 改为false,并且首页dubug保持为true;则页面调试模块隐藏
xxxxxxxxxx
#thinkcmf5 http 自动跳转到httos
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)?$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^api/?(.*)$ api.php?s=$1 [QSA,PT,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]
</IfModule>