给阿里云linux服务器安装php 5.6

1. 首先使用yum安装依赖包

  yum install -y bzip2 libxml2-devel openssl-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel gd-devel zlib-devel

2. 下载 mcrypt 库编译安装

wget https://jaist.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.bz2
tar -xjvf libmcrypt-2.5.8.tar.bz2
cd libmcrypt-2.5.8
./configure
make && make install
cd ..

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
tar -xzvf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure --prefix=/usr/local/libiconv
make && make install

3.下载php安装包,并编译安装


./configure --prefix=/usr/local/php5637 --with-config-file-path=/usr/local/php5637/etc \
  --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=www \
  --enable-mysqlnd --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd \
  --enable-opcache --enable-mbstring --enable-soap --enable-zip --enable-bcmath --with-openssl \
  --with-zlib --with-curl --with-gd --with-zlib-dir=/usr/lib --with-png-dir=/usr/lib --with-jpeg-dir=/usr/lib \
  --with-mhash --with-freetype-dir --with-mcrypt --enable-gd-native-ttf \
  --with-xmlrpc --with-iconv-dir=/usr/local/libiconv

3.添加运行需要的账号和组

groupadd www
useradd php-fpm -M -s /sbin/nologin -g www

4. 复制一个配置文件,默认php fcgi 端口为 9000, 可以修改php-fpm.conf设置为其他值

cp php.ini-production /usr/local/php5637/lib/php.ini
cd /usr/local/php5637/etc
cp php-fpm.conf.default php-fpm.conf

5.启动php

/usr/local/php5637/sbin/php-fpm

6.查看php-fpm运行情况

netstat -ltunp | grep 9000
#或者
lsof -i :9000
#或者
ps -fe |grep php-fpm

7. 将php-fpm 启动命令添加到 /etc/rc.local 中,开机就运行

Popularity: 1% [?]

Random Posts

一起Linux防火墙造成的服务端口不能访问小故障的解决方法

在Linux服务器上新开了一个tomcat服务,端口设置为 8081, 结果远程机器打开不了,在本机通过 curl 127.0.0.1:8081 可以正常输出页面内容。
检查机器防火墙没有开启,iptables没有开启,不知道是什么问题
最后执行如下命令解决(也就是将防火墙服务状态复位一下)
systemctl stop firewalld
systemctl start firewalld
systemctl stop firewalld

可能是系统的一个bug吧

Popularity: 2% [?]

Random Posts

网站部署https遇到的一些坑

由于被运营商时不时的劫持篡改页面内容导致客户投诉,下定决心部署https彻底解决数据被劫持问题,
部署https过程中刚碰到了如下一些坑,逐个解决
1. ssl证书问题,部署后部分浏览器打开会提示证书链不完整,请求不会发送到服务端
解决方法:证书商那里签发的有两张证书,一个是我们网站的证书,一个是他们的中间证书,需要将两个证书的内容拷贝合并到一起(自己的要放在前面)
2. 部分页面打开后,浏览器上还是http协议头, 但是在公司测试服务器上同样配置确没有这个问题
因为使用的阿里SLB将443端口反向到后端80端口上,在nginx服务器上有配置一些rewrite跳转,自动适配请求的 $schema, 需要强制设置为 https
3. 部分页面js/css资源地址还是引用的http地址
原因同2,部分代码中是使用请求来的协议决定输出http还是https的,修改强制地址https问题解决

– 前面问题 2和3 都是配置 SLB 将443端口透传到后端80端口造成的,如果配置 443 到 443 则没有上面的问题

Popularity: 2% [?]

Random Posts

cygwin下strptime函数找不到的解决方法

一段代码使用到了 strptime 这个函数,之前在cygwin下gcc 4.9.3 可以编译通过,重装cygwin后,新的gcc 6.3.0 编译不通过,strptime是不可识别的,
在cygwin的include目录下执行

 find . -name "*.h" |xargs grep strptime

发现定义在 /usr/include/time.h 中,需要先定义 __XSI_VISIBLE 才会有,查看了一下__XSI_VISBLE定义出现的地方
在Make文件中添加 -D_XOPEN_SOURCE=700 重新编译,问题解决

Popularity: 3% [?]

Random Posts

关于PKCS5Padding与PKCS7Padding对齐方式的区别

近日使用C++写一DES加密算法和对方java写的接口做加解密的通信处理,碰到加密后的数据对方界面不了的问题,发现两边对齐方式不一致,对方使用PKCS5对齐,我这边使用了PKCS7做数据对齐。修改为PKCS5方式对齐后问题解决。
借此重新温习了一下两个对齐方式的处理过程。
以8个字节为一组,如果数据不足8位,则以8位做对齐,末尾填充缺少的字节数量。
比如有数据 FF FF,
缺少6个字节,则需要补充6个字节的06,达到8位长度
补充对齐后 FF FF 06 06 06 06 06 06

PKCS5 对齐 和 PKCS7 对齐的区别在于
PKCS7 末尾的值区间为 1,2,3,4,5,6,7 也就是最多补充7个字节
PKCS5 末尾的值区间为 1,2,3,4,5,6,7,8 也就是最多补充8个字节,
也就是PKCS5在数据长度刚好能为8整除时,后面继续补充8个字节的08,而此时PKCS7是不做字节补充的
想比较PKCS7而言PKCS5能更好的还原实际加密数据的长度,
比如有8字节长度数据 FF FF FF FF 04 04 04 04,
在PKCS7时是不做字节补充的,当解密完成后就不知道是否需要移除尾部的4个字节的04
而PKCS5时,则需要再补充8个字节的08,得到 FF FF FF FF 04 04 04 04 08 08 08 08 08 08 08 08 解密后可以正确还原得到 FF FF FF FF 04 04 04 04

Popularity: 3% [?]

Random Posts

VS2015下CUDA代码编译异常的一点小问题解决方法

安装了 VS2015后,下载了CUDA 8.0安装,试了一个.cu文件编译正常通过,
继续安装了一个Intel parallel_studio_xe_2016, 然后使用 Intel 的C++编译器进行编译,结果nvcc编译.cu文件时候报错,一些c++库的头文件解析不通过,
网上搜索了一下,没有找到解决方法。

自己对比了一下使用VS 的C++编译器和 Intel 的C++编译器时,在控制台输出的nvcc命令,发现 –cl-version 参数值不同

使用VS2015的C++编译器时,出现的参数是 –cl-version 2015
而使用Intel的C++编译器时,出现的参数是 –cl-version 2010

进一步查找CUDA的自定义编译配置,在 Program Files(x86)\MSBuild\Microsoft.Cpp\v4.0\v140\BuildCustomizations\ 目录下的 CUDA 8.0.props 中对编译器做了检查,

...
<CudaClVerson Condition="'$(PlatformToolset)' == 'v140'">2015</CudaClVersion>
<CudaClVersion Condition="'$(CudaClVersion)' == ''">2010</CudaClVersion>
...

CUDA的自定义编译配置中没有对Intel C++编译器做判断处理,自己修改下面那个为空时默认为2010的行,
将2010修改为2015,保存后重新编译,两个编译器都可以编译通过,问题解决。

Popularity: 3% [?]

Random Posts

在CentOS 6 下安装TensorFlow

在CentOS下安装TensorFlow的一些步骤
首先按照TensorFlow官方安装教程,选择了anaconda 环境, 下载安装了 anaconda3 环境后(为python3.6),
在里面按照官方步骤使用pip方式安装tensorflow包, 安装后在python中 import tensorflow as tf 出错,提示缺少LIBC_2.17之类的符号,这是由于CentOS自带版本比较低的缘故,需要源码编译方式进行安装。
安装TensorFlow需要使用支持c++11版本的编译器,CentOS 6自带的g++ 4.4.7不支持,首先需要安装一个版本的g++, 我选择了安装4.9.4版本
步骤1. 安装gcc 4.9.4

tar -xjvf  gcc-4.9.4.tar.bz2
cd gcc-4.9.4
./contrib/download_prerequisites
./configure --prefix=/opt/gcc/4.9.4  --languages=c,c++ --disable-multilib
make
make install

安装好后,设置环境变量,在 ~/.bashrc 中添加如下内容

export CXX=/opt/gcc/4.9.4/bin/c++
export CC=/opt/gcc/4.9.4/bin/gcc
export LDFLAGS="-L/opt/gcc/4.9.4/lib -L/opt/gcc/4.9.4/lib64"
export CXXFLAGS="-L/opt/gcc/4.9.4/lib -L/opt/gcc/4.9.4/lib64"
export C_INCLUDE_PATH=/opt/gcc/4.9.4/include
export CXX_INCLUDE_PATH=$C_INCLUDE_PATH
export LD_RUN_PATH=/opt/gcc/4.9.4/lib/:/opt/gcc/4.9.4/lib64/
export LD_LIBRARY_PATH=/opt/gcc/4.9.4/lib/:/opt/gcc/4.9.4/lib64/

重新开启一个终端窗口,下载源码安装 bazel

mkdir bazel
cd bazel
unzip ~/Downloads/bazel-0.4.5-dist.zip
./compile.sh

编译完成后得到一个 bazel执行文件,拷贝到/usr/local/bin 目录下,
对这个生成的bazel文件不能使用strip,否则后面使用时会出现zip资源释放出错的消息

下载安装tensorflow, 到github上下载1.1分支包

unzip tensorflow-r1.1.zip
cd tensorflow-r1.1
./configure
#按照提示做一些选择
bazel build -c opt //tensorflow/tools/pip_package:build_pip_package
#这一步在build过程中碰到执行protoc命令出错的问题,提示找不到LIBCXX之类的符号信息,设置的LD_LIBRARY_PATH值没有起作用
#解决方法,将~/.bashrc中LD_LIBRARY_PATH=/opt/gcc/4.9.4/lib/:/opt/gcc/4.9.4/lib64/路径添加到/etc/ld.so.conf中去就可以通过了
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

最后重新按照官方教程进入anaconda3环境

source activate tensorflow
pip install --ignore-installed --upgrade /tmp/tensorflow_pkg/tensorflow-1.1.0-cp36-cp36m-linux_x86_64.whl

进入python3做测试,在 import tensorflow as tf 时出错,
提示 anaconda3/lib/python3.6/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so 缺少一个 CXXABI_1.3.7的错误,
ldd查看了一下,依赖的是libstdc++.so.6是指向anaconda3/lib/libstdc++.so.6.0.19,而不是编译的gcc-4.9.4目录下的libstdc++.so.6.0.20
重新建立anaconda3/lib目录下的符号连接指向/opt/gcc/4.9.4/lib64/libstdc++.so.6.0.20
(估计使用gcc-4.8.5编译tensorflow就不会有这个问题了,生成的库同是libstdc++.so.6.0.19)

再次进入python3做测试,通过没有问题,将~/.bashrc 和 /etc/ld.so.conf中的关于gcc 4.9.4路径设置的环境变量去掉,测试tensorflow还是正常

Popularity: 3% [?]

Random Posts

MindManager2017配套插件ResultManager和MindReader使用注意点

换回Windows系统使用,安装上了MindManager 2017, 同时也找回很久以前的两个配套插件
ResultManager www.gryonix.com 新的MindManager 2017版本插件已经转移到 www.olympic-limited.co.uk 公司开发维护。
MindReader http://wiki.activityowner.com/index.php?title=MindReader

安装MindReader 要注意几个要点,否则使用会有异常
1. 安装时,虽然安装包有让修改安装路径,但是千万不能能修改,安装在非默认路径下插件运行会出错
2. 在MindManager安装后的MyMaps目录下要有如下两个文件

3. 初次通过MindReader建立主题,会提示创建/升级配置文件,配置文件路径在 MyMaps目录下的 ao\mindreaderconfig.mmap 中
在MindManager中打开这个配置文件,
a. 修改 links->defaultmap的路径,使其指向 MyMaps\Daily Capture Map.mmap,
如果不设置,则每次通过MindReader创建主题都会新建一个脑图文件。
b. 修改 CustomIcons 中 rmproject 和 rmresult 的图标基准路径为 C:\Program Files (x86)\Gyronix\Gyronix ResultsManager v3 for MindManager 2017 x86\Images 可以根据实际安装的路径做修改。
c. 其他根据自己需要添加修改的配置项

Popularity: 3% [?]

Random Posts

MySQL Connector++ 使用getString获取表字段数据出错

Linux下一个使用MySQL Connector++ 1.1.0 连接MySQL数据库的程序,在连接数据库获取数据时程序崩溃,
确定数据库中存在记录值,查看Core Dump文件,发现崩溃点发生在调用 MySQL 库的 getString 方法时的那一行,

通过google搜索,发现好一些getString出错的问题,但是多数是Windows下VS编译环境不同造成的,终于发现下面一篇中有和我的问题类似

http://stackoverflow.com/questions/4822958/mysql-c-connector-getstring-doesnt-work-correctly-while-getint-works-perfe

I had a similar problem the program would give a memory exception. Here is what I did to fix it:
std::string version = result->getString( COLUMN_NAME ).c_str();

This didn't work:
sql::SQLString sString  = result->getString( COLUMN_NAME ); <<

我的不正常代码是

std::string value = result->getString( field);

按照上面的方法将代码修改为

std::string value = result->getString( field).c_str();

暂时获取同样的数据没有出错,希望后面也不要出错。
MySQL Connector++ 从版本1.1.4开始编译依赖于BOOST库

Popularity: 3% [?]

Random Posts

    libevent2的evhttp获取网页数据失败(dns未能正确解析)

    使用libevent2的evhttp请求阿里大于接口,调用失败,没有正确请求数据,但是利用curl可以正确访问。
    使用抓包工具抓包分析,和curl发起的请求对比发现libevent2在dns查询后没有连接实际的ip地址建立连接,怀疑libevent2没有正确的对dns解析结果做处理。
    网上搜索发现如下这篇文章:域名随机大小写导致libevent2的异步DNS解析失败

    经过检验,确实时dns查询阿里大于api接口域名返回的应答信息中,域名大小写和请求时的有所不同,
    于是翻看libevent2的代码,发现有函数evdns_base_set_option可以设置global_randomize_case的值,

    在阿里大于接口请求前添加一样代码:
    evdns_base_set_option(dnsbase, “randomize-case”, “0″);
    重新编译运行,解决问题。

    Popularity: 3% [?]

    Random Posts

      Next Page →