分类目录归档:PHP

PHP 7.3 configure: error: Please reinstall the libzip distribution

Q:问题描述:configure: error: Please reinstall the libzip distribution
问题解决:
$ yum remove -y libzip
$ wget -P /mnt/renwolecom //nih.at/libzip/libzip-1.2.0.tar.gz
$ tar -zxvf libzip-1.2.0.tar.gz
$ cd libzip-1.2.0
$ ./configure
$ make && make install

Q:问题描述:configure: error: off_t undefined; check your library configuration
问题解决:

$ echo '/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64'>>/etc/ld.so.conf
$ ldconfig -v

Q:问题描述:/usr/local/include/zip.h:59:21: fatal error: zipconf.h: No such file or dire
问题解决:

$ cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h

运行环境正常 织梦DedeCMS验证码无法显示

在环境一切OK的情况下,DedeCMS的验证码无法显示。

解决方案一:

include目录下打开vdimgck.php文件,查找 if(function_exists(“imagejpeg”)) 在上方添加 ob_clean(); 问题解决。

这个问题很奇怪,有时候不加也没问题,当然我的是运行有问题了加上就没事,之前没事,突然就不行了。

添加过后的具体代码如下:

ob_clean();
if(function_exists(“imagejpeg”))
{
    header(“content-type:image/jpeg\r\n”);
    imagejpeg($im);
}
else
{
    header(“content-type:image/png\r\n”);
    imagepng($im);
}

解决方案二:

将织梦后台登录验证码取消。

具体操作如下:

找到以下文件:

/data/safe/inc_safe_config.php

在该文件中查找 $safe_gdopen = ’1,2,3,5,6,7′; 删除6数字即可取消验证码功能。

Apache Nginx 禁止目录执行PHP脚本文件

我们在搭建网站的时候,可能需要单独对一些目录进行设置权限,以达到我们需要的安全效果。下面举例说明在Apache或Nginx下如何设置禁止某个目录执行php文件。

1.Apache配置

<Directory /apps/web/renwole/wp-content/uploads>
 php_flag engine off
</Directory>
<Directory ~ "^/apps/web/renwole/wp-content/uploads">
 <Files ~ ".php">
 Order allow,deny
 Deny from all
 </Files>
</Directory>

2.Nginx配置

location /wp-content/uploads {
    location ~ .*\.(php)?$ {
    deny all;
    }
}

Nginx禁止多个目录执行PHP:

location ~* ^/(css|uploads)/.*\.(php)${
    deny all;
}

配置完成后,重载配置文件或重启Apache或Nginx服务,之后所有通过uploads来访问php文件,都将返回403,大大地增加了web目录安全性。

Redis 缓存 PHP 7.2 session 变量共享

一般负载均衡内容有两种形式,一种是静态,另一种是动态,动态网站内容就可能需要进行交互,那么就涉及到session共享的问题。默认PHP是将session存储在LocalDisk,如果是多台php主机之间进行负载,那么该如何共享session?今天我们就解决这个问题。

session会话共享文件有很多种方式:

分布式文件共享;NFS,NAS文件存储等。
Nginx负载均衡ip_hash模块,固定访客到后端某台服务器。
将session存储到数据库中;例如MySQL,Memcached,Redis,Mongodb等。

我个人比较倾向于将session存储到Redis数据库,用这种方式来同步session共享,不仅不会加大数据库的负担,而且安全性比cookie更高,把session放到内存里面,比从磁盘文件中读取会快很多。“有人认为;那我把所有的缓存软件都安装,速度岂不是更快,那就不是缓存加速了,而演变成了缓存库了”。

php语言脚本默认不支持对Redis的操作,所以需要安装第三方phpRedis扩展模块,让其支持对Redis的操作,至于如何安装使用phpRedis,可以参考我前面写的文章《phpRedis扩展模块安装配置使用》。此外这里还需要一台Redis服务器,请参阅《Linux Centos7 Redis 3.2.9 源码编译安装配置》。

1.修改PHP配置文件php.ini将session存储到Redis中。

# vim /usr/local/php/etc/php.ini

session.save_handler = files
;session.save_path = "N;/path"

修改为:

session.save_handler = Redis
session.save_path = “tcp://10.10.204.66:6379”

;如果Redis有密码连接方式
session.save_path = “tcp://10.10.204.66:6379?auth=password”

 

2.重启php-fpm服务生效

# systemctl restart php-fpm

以上所有过程均是经过手工测试的,99%可用于生产。

phpRedis扩展模块安装配置使用

phpRedis是什么?phpredis扩展提供了一个用于与Redis键值存储进行通信的API,如果需要使用Redis相关函数就必须安装phpRedis扩展包。看起来很复杂,其实动手操作真没那么难。

环境:

CentOS Linux release 7.3.1611 (Core) x64
Redis server v=3.2.9 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=37db043e44b54a88

1.下载phpRedis扩展并解压,下载地址:

//pecl.php.net/package/redis
# cd /tmp
# wget //github.com/phpredis/phpredis/archive/develop.zip# unzip develop.zip
# cd phpredis-develop/

2.接下来在phpredis-develop目录编译phpize扩展工具,主要作用就是在phpredis-develop目录生成configure文件。

 

# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20160303
Zend Module Api No: 20160303
Zend Extension Api No: 320160303

# ./configure --with-php-config=/usr/local/php/
# make && make install
...
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20160303/

最后一行就是编译生成的Redis动态库路径:/usr/local/php/lib/php/extensions/no-debug-zts-20160303/

3.修改php.ini在该文件的底部加上Redis.so路径,之后重启nginx/php-fpm服务生效。

# vim /usr/local/php/etc/php.ini

extension="/usr/local/php/lib/php/extensions/no-debug-zts-20160303/redis.so"

# systemctl restart nginx
# systemctl restart php-fpm

4.是否安装phpRedis成功,可以通过PHP探针进行测试。

<?phpinfo();?>

将上述代码保存为phpinfo.php上传到网站根目录进行访问,可查看Redis&Session扩展模块的支持。

redis
Redis Support enabled

Redis Version 3.1.2

Available serializers php

session
Session Support enabled

Registered save handlers  files user redis rediscluster

Registered serializer handlers php_serialize php php_binary

至此phpRedis的安装配置已经完成,希望对你有帮助。

Windows server 2003&iis6&PHP5.3&Zend&FastCGI安装配置

1.相关软件下载篇

//windows.php.net/downloads/releases/archives/ 下载所需php版本
//www.iis.net/downloads/microsoft/fastcgi-for-iis 下载FastCGI组件
//www.zend.com/en/products/loader/downloads#Windows 下载所需ZEND版本
Microsoft Visual C++ 2008 Redistributable Package x86(默认安装)

默认安装FastCGI,将下载下来的php解压到E盘并命名为PHP文件夹,给php目录users默认权限。

2.FastCGI配置篇

在FastCGI配置文件最后一行添加参数;

C:\WINDOWS\system32\inetsrv\fcgiext.ini

[Types]
php=PHP
[PHP]
ExePath=E:\PHP\php-cgi.exe
InstanceMaxRequests=10000
EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000
ActivityTimeout=3600
RequestTimeout=3600

添加系统环境变量:

我的电脑->属性->高级->环境变量->系统变量,在Path的最后面中加上;E:\PHP\
3.php.ini配置篇

将E:\php\php.ini-development 重命名为php.ini,并开启PHP相关参数
在php目录新建E:\PHP\tmp目录并给缓存users写入权限。

short_open_tag = On
upload_tmp_dir="E:\PHP\tmp"
cgi.force_redirect=0
fastcgi.impersonate=1;
extension_dir="E:\PHP\ext"
date.timezone =PRC ;或Asia/Shanghai

extension=php_curl.dll
extension=php_gd2.dll
extension=php_ldap.dll
extension=php_mbstring.dll
extension=php_exif.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_sockets.dll
extension=php_xmlrpc.dll

4.iis6.0配置篇

IIS扩展添加,打开iis-网站-属性-主目录-配置-应用程序扩展-添加,可执行文件以下;

C:\WINDOWS\system32\inetsrv\fcgiext.dll

扩展名;PHP

其他默认
5.Zend安装配置篇
将解压的zend包对应php版本的DLL文件放入E:\php\ext目录,然后在php.ini的最后一行添加以下zend配置参数;

[ZendGuardLoader]

zend_loader.enable=1

zend_loader.disable_licensing=1

zend_loader.obfuscation_level_support=3

zend_loader.license_path=

zend_extension="E:\php\ext\ZendLoader.dll"

6.重启iis,并在iis中新建站点,写一个php探针测试是否成功

新建普通txt文件,将下面内容复制到txt文件中,并命名为php.php(注意扩展名);

<?
 phpinfo();
 ?>

访问成功就会显示php相关信息以及版本情况。

linux Centos7平滑无缝升级PHP7.1.0到PHP 7.1.5新版本

我是一个比较喜欢爱好新技术的人,一旦有新的东西出现或发行,我都会拿来研究,最终用于生产中。新的东西有利有弊,PHP新版本有很多特性,同样也存在未知的BUG,所以无论是拿来学习,还是用于生产都要谨慎。不过话说回来既然发布了稳定版就不妨一试呗。

实验环境:CentOS Linux release 7.3.1611 (Core)
内核版本:Linux version 3.10.0-514.el7.x86_64

1.查看php版本有两种方法,显示结果相同。

第一种

# /usr/local/php/bin/php -v

第二种

# php  -v

PHP 7.1.0 (cli) (built: Dec 17 2016 17:00:32) ( ZTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.1.0, Copyright (c) 1999-2016, by Zend Technologies

2.升级前需要找到之前的configure配置模块信息,做到升级前后是一致,否则可能会影响网站正常访问,若不记得之前的configure信息,可以写个phpinfo探针查找即可,或者使用以下命令;

# php -i | grep configure

Configure Command => './configure' '--prefix=/usr/local/php' '--with-config-file-path=/usr/local/php/etc' '--with-fpm-user=www' '--with-fpm-group=www' '--with-iconv-dir' '--with-freetype-dir' '--with-jpeg-dir' '--with-png-dir' '--with-zlib' '--with-libxml-dir' '--enable-xml' '--disable-rpath' '--enable-bcmath' '--enable-shmop' '--enable-sysvsem' '--enable-inline-optimization' '--with-curl' '--enable-mbregex' '--enable-fpm' '--enable-mbstring' '--with-mcrypt' '--with-gd' '--enable-gd-jis-conv' '--enable-gd-native-ttf' '--with-openssl' '--with-mhash' '--enable-pcntl' '--enable-sockets' '--with-xmlrpc' '--enable-zip' '--enable-soap' '--enable-opcache' '--with-libmbfl' '--with-onig' '--enable-pdo' '--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-pdo-mysql' '--enable-mysqlnd-compression-support' '--with-pear' '--enable-maintainer-zts' '--enable-session' '--with-gettext'

以上信息稍作修改后,即可安装配置使用。

3.重要:先备份老版本php,以备升级失败后快速回滚

 # mv /usr/local/php /usr/local/php7.1.bak
 # mkdir /renwole
 # cd /renwole
 # wget //am1.php.net/distributions/php-7.1.5.tar.gz
 # tar zxvf php-7.1.5.tar.gz
 # cd php-7.1.5
 # ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-fpm-user=www --with-fpm-group=www --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --with-gd --enable-gd-jis-conv --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --enable-opcache --with-libmbfl --with-onig --enable-pdo --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-pdo-mysql --enable-mysqlnd-compression-support --with-pear --enable-maintainer-zts --enable-session --with-gettext

PHP编译完成后,你会看到 “Thank you for using PHP.” 字样,表示编译完成,执行以下安装命令;

# make && make install

这个过程有些慢,但不影响你的网站正常访问,耐心等待…

4.php完成升级安装配置后,开始拷贝php配置文件

# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# cp /renwole/php-7.1.5/php.ini-development /usr/local/php/etc/php.ini
# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

或者沿用老版php配置文件(如果PHP版本跨度不大,建议使用老版本php.ini,否则php配置文件中的很多东西需要重新配置),\cp -rf表示覆盖无提示

# \cp -rf /usr/local/php7.1.0.bak/etc/php-fpm.conf /usr/local/php/etc/php-fpm.conf
# \cp -rf /usr/local/php7.1.0.bak/etc/php.ini /usr/local/php/etc/php.ini
# \cp -rf /usr/local/php7.1.0.bak/etc/php-fpm.d/www.conf /usr/local/php/etc/php-fpm.d/www.conf

5.现在重启php-fpm

# systemctl restart php-fpm.server

6.再次查看php版本

# /usr/local/php/bin/php -v

PHP 7.1.5 (cli) (built: May 11 2017 16:18:43) ( ZTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.1.5, Copyright (c) 1999-2017, by Zend Technologies

打印出来的PHP版本信息显示;已经成功从PHP 7.1.0平滑无缝升级为PHP 7.1.5

Centos 7源码编译安装 php7.2 之生产篇

介绍:

久闻php7的速度以及性能那可是比php5系列的任何一版本都要快,具体性能有多好,建议还是先尝试下再说。如果你是升级或新安装,那你首先需要考虑php7和程序是否存在兼容性,如果程序是基于php5开发的,那么就需要考虑php7是否适合你当前的生产环境,今天我就实操并安装用于生产中。

先安装php依赖包,否则在编译安装php7的过程当中会出现各种报错,安装完成后即可进入下一个环节。

安装扩展包并更新系统内核:

$ yum install epel-release -y
$ yum update

安装php依赖组件(包含Nginx依赖):

$ yum -y install wget vim pcre pcre-devel openssl openssl-devel libicu-devel gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison automake libevent libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel

创建用户和组,并下载php安装包解压:

$ cd /tmp
$ groupadd www
$ useradd -g www www
$ wget //am1.php.net/distributions/php-7.2.1.tar.gz
$ tar xvf php-7.2.1.tar.gz
$ cd php-7.2.1

设置变量并开始源码编译:

$ cp -frp /usr/lib64/libldap* /usr/lib/
$ ./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--enable-mysqlnd-compression-support \
--with-iconv-dir \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-mbstring \
--enable-intl \
--with-mcrypt \
--with-libmbfl \
--enable-ftp \
--with-gd \
--enable-gd-jis-conv \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--with-gettext \
--disable-fileinfo \
--enable-opcache \
--with-pear \
--enable-maintainer-zts \
--with-ldap=shared \
--without-gdbm \
--enable-fileinfo \

若无报错执行下一步安装,如果编译过程中出现错误,根据报错安装依赖包,通常不会出现这种问题。

注意:–enable-gd-jis-conv  此参数会导致Zabbix中文字符乱码,建议取消。

开始安装:

$ make -j 4 && make install

完成安装后配置php.ini文件:

$ cp php.ini-development /usr/local/php/etc/php.ini
$ cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
$ cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

修改 php.ini 相关参数:

$ vim /usr/local/php/etc/php.ini

expose_php = Off
short_open_tag = ON
max_execution_time = 300
max_input_time = 300
memory_limit = 128M
post_max_size = 32M
date.timezone = Asia/Shanghai
mbstring.func_overload=2
extension = "/usr/local/php/lib/php/extensions/no-debug-zts-20160303/ldap.so"

设置 OPcache 缓存:

[opcache]
zend_extension=/usr/local/php/lib/php/extensions/no-debug-zts-20160303/opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

设置php安全函数:

$ vim /usr/local/php/etc/php.ini

默认值:

disable_functions =

修改为:

disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname

或通配:

disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru

配置www.conf

取消以下注释并修改优化其参数:

listen = /var/run/www/php-cgi.sock
listen.owner = www
listen.group = www
listen.mode = 0660
listen.allowed_clients = 127.0.0.1
pm = dynamic
listen.backlog = -1
pm.max_children = 180
pm.start_servers = 50
pm.min_spare_servers = 50
pm.max_spare_servers = 180
request_terminate_timeout = 120
request_slowlog_timeout = 50
slowlog = var/log/slow.log

创建php-cgi.sock存放目录

$ mkdir /var/run/www/
$ chown -R www:www /var/run/www

配置php-fpm.conf

取下以下注释并填写完整路径:

pid = /usr/local/php/var/run/php-fpm.pid

至此php7已经安装完成。

说明:禁用php函数,如果程序需要这些函数,可以取消禁止,新手建议忽略此步骤。

创建system系统单元文件php-fpm启动脚本:

$ vim /usr/lib/systemd/system/php-fpm.service

添加如下变量内容:

[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=simple
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

启动php-fpm服务并加入开机自启动:

$ systemctl enable php-fpm.service
$ systemctl restart php-fpm.service

PHP整个安装过程已经完成。如果你是按照本文安装未成功的,希望你能留言说明错误原因,我将无偿协助你配置。

如果你有好的建议完善该文章,非常欢迎你提出和改进,我们一起共同学习和进步。