php查询字符串中包含的所有对称字符串

第一种:
[php]$str = 'sdjfhiuiyxhzzzzzulnjxzbbzxcsaaskanxksmsbbsmmsbbsmsgahkgjssdjfhiuiyxhzzzzzulnjxzbbzxcsaaskanxksmsbbsmmsbbsmgahkgjs';
preg_match_all('/(.)\1+/', $str, $matchs);
$len_s = array();
foreach ($matchs[0] as $ckv) {
$len = strlen($ckv);
if ($len % 2 == 0) {
$str_a = explode($ckv, $str);
checkLen($ckv, $str_a, $len_s);
} else {
$len_s[substr($ckv, 0, ($len - 1))] = $len - 1;
}
}</pre>
function checkLen($ckv, $str_a, &$len_s)
{
foreach ($str_a as $k => $v) {
if (isset($str_a[$k + 1])) {
$str1 = $str_a[$k];
$str2 = $str_a[$k + 1];
$str_len1 = strlen($str1);
$str_len2 = strlen($str2);
$count = min(array(
$str_len1,
$str_len2
));
$rckv = '';
for ($i = 0; $i < $count; $i ++) {
$sub1 = substr($str1, $str_len1 - $i, $i);
$sub2 = substr($str2, 0, $i);
if ($sub1 == strrev($sub2)) {
$rckv = $sub1 . $ckv . $sub2;
} else {
break;
}
}
$len_s[$rckv] = isset($len_s[$rckv]) && $len_s[$rckv] > strlen($rckv) ? $len_s[$rckv] : strlen($rckv);
}
}
}
<pre>[/php]

第二种:

[php]
function str(){
$str = 'kgfafbmrwrwrmbfdaa';
if($str===strrev($str) && strlen($str)%2==0){
echo $str;exit;
}
for($len = strlen($str)-1;$len>1;$len--) {//从最长的找
if($len%2>0){//奇数长度的直接跳过
continue;
}
for($i=0;$i<=strlen($str)-$len;$i++){//从第一位开始去取第一个for循环的长度
$str_1 = substr($str, $i, $len);
if ($str_1 === strrev($str_1) && strlen($str_1) % 2 == 0) {//取出来的字符串刚好是对称的直接中断查找
echo $i.' ooo '.$len.' '.$str_1;
exit;
}
}
}
}
str();exit;
[/php]

php环境相关下载

apache下载地址:

https://www.apachehaus.com/cgi-bin/download.plx

php官方扩展下载地址:

https://windows.php.net/downloads/pecl/releases/

http://pecl.php.net/package-stats.php

各个php版本下载地址:

https://windows.php.net/downloads/releases/

mysql下载地址:

https://downloads.mysql.com/archives/community/

redis服务端下载

https://redis.io/download

php7的memcache扩展:

https://github.com/nono303/PHP7-memcache-dll/tree/master/vc14/x64/ts

x86指的32位,x64指的64位,64位操作系统也可以安装32位的软件;

下载apache和php的时候,一定要注意版本的问题,x86的apache就一定要下载x86的php;x64的apache就一定要下载x64的php,不然就会出现下面的错误

httpd.exe: Syntax error on line 540 of D:/XX/Apache24/conf/httpd.conf: Cannot load D:/XX/php-5.4.45/php5apache2_4.dll into server: %1 \xb2\xbb\xca\xc7\xd3\xd0\xd0\xa7\xb5\xc4 Win32 \xd3\xa6\xd3\xc3\xb3\xcc\xd0\xf2\xa1\xa3

另外在安装的过程中要注意:

php5.5使用的编译器是vc11,php5.4和php5.3的是vc9,php5.2是vc6。同时还要注意是x86版本,还是x64版本。目前只有php5.5+提供x64版本,其他都只有x86版本。

Apache/PHP的搭配有以下几种情况:

1、php5.2支持Apache2.0和Apache2.2;

2、php5.3、php5.4同时支持Apache2.2和Apache2.4;

3、php5.5+只支持Apache2.4

如果想用apache2.4运行php5.5以下的版本的话,就都要下载x86的才行

vc11运行库x86/x64版本:http://www.microsoft.com/en-us/download/details.aspx?id=30679
vc10运行库x86版本:http://www.microsoft.com/en-us/download/details.aspx?id=5555
vc10运行库x64版本:http://www.microsoft.com/en-us/download/details.aspx?id=14632
vc9运行库x86版本:http://www.microsoft.com/en-us/download/details.aspx?id=5582
vc9运行库x64版本:http://www.microsoft.com/en-us/download/details.aspx?id=15336

windows安装请参考:http://www.netljc.com/?p=1163
linux-centos安装请参考:http://www.netljc.com/?p=1069

composer的使用

一、安装

windows :
下载 https://getcomposer.org/Composer-Setup.exe

linux:
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

二、安装包列表
安装包列表:https://packagist.org/,只是一个链接,真正的php程序包存放在github第三方版本库上
中国镜像:https://pkg.phpcomposer.com/,加速下载

三、构建自己的项目

github注册帐号,并创建一个项目;

本地通过SVN或者GIT检出项目;

命令行模式,进入项目文件夹,执行composer init命令;

填写相关的项目信息后会生成一个composer.json文件,将这个文件提交到github版本库上面去;

登录https://packagist.org/,点击Submit,填写github的项目地址,packagist会根据composer.json文件去自动抓取项目信息;

如果github的项目源码有任何更改,需要手动在packagist上面点击update【实际测试后发现已经是自动同步的了,github默认已经自动加上了钩子推送,可以在github的项目setting->webhooks中去查看】;

四、使用构建的项目

进入项目文件夹执行 composer create-project netljc/composer test1 dev-master –prefer-dist

test1为项目名称

查看当前镜像: composer config -g repo.packagist

切换成原镜像 composer config -g repo.packagist composer https://packagist.org 加上-g是全局配置 不加就需要在具体的项目文件夹下去执行

切换成国内镜像 composer config -g repo.packagist composer https://packagist.phpcomposer.com,国内镜像有可能提交了代码,但镜像并未及时更新,最后找不到包

composer官网:http://getcomposer.org/
composer中文网:http://www.phpcomposer.com/

五、composer的主要命令
1、搜索 search,搜索monolog库
composer search monolog

2、展示show,查询库的信息
composer show –all monolog/monolog

3、申明依赖require,composer.json中去填写
“require”:{
“monolog/monolog”:”1.21.*”
}
composer require monolog/monolog require命令自动下载并添加依赖
4、安装install,安装require申明的依赖
composer install

5、更新update
打开composer.json,删除 “monolog/monolog”:”1.21.*”,然后执行 composer update,就可以卸载不用的依赖包

LNMP环境安装步骤

一、安装编译工具及库文件
yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

二、首先要安装 PCRE
1、下载 PCRE 安装包
wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
2、解压安装包
tar zxvf pcre-8.35.tar.gz
3、进入安装包目录
cd pcre-8.35
4、编译安装
./configure
make && make install
5、查看pcre版本
pcre-config –version

三、安装 Nginx

1、下载 Nginx
wget http://nginx.org/download/nginx-1.13.9.tar.gz
2、解压安装包
tar -zvxf nginx-1.13.9.tar.gz
3、进入安装包目录
cd nginx-1.13.9
4、编译安装
./configure –prefix=/home/wwwroot/nginx –with-http_stub_status_module –with-http_ssl_module
make && make install

四、Nginx 配置
1、创建 Nginx 运行使用的用户 www:
/usr/sbin/groupadd www
useradd -r -g www www

2、修改配置文件nginx.conf
vi /home/wwwroot/nginx/conf/nginx.conf

3、检查配置文件是否正确
/home/wwwroot/nginx/sbin/nginx -t

4、启动
/home/wwwroot/nginx/sbin/nginx

/home/wwwroot/nginx/sbin/nginx -s reload            # 重新载入配置文件
/home/wwwroot/nginx/sbin/nginx -s reopen            # 重启 Nginx
/home/wwwroot/nginx/sbin/nginx -s stop              # 停止 Nginx

设置nginx为系统服务

nginx
将nginx拷贝到/etc/init.d/nginx,并修改路径
chmod a+x /etc/init.d/nginx
chkconfig –add nginx
chkconfig  nginx on

开启:/etc/init.d/nginx start

关闭:/etc/init.d/nginx stop

状态:/etc/init.d/nginx status

重启:/etc/init.d/nginx restart

五、安装php
1、下载安装包
wget http://museum.php.net/php5/php-5.4.17.tar.gz
2、解压
tar -zvxf php-5.4.17.tar.gz
3、安装扩展
yum install gd gd-devel ttf freetype curl-devel pcre-devel zlib-devel libxml2-devel bzip2-devel libxpm-devel libXpm libicu-devel libXpm-devel.i386 libXpm-devel.i586 libXpm-devel.i686 mbstring exif libicu-devel libmcrypt-devel php-mcrypt
4、编译
./configure  –prefix=/home/wwwroot/php –with-mysql=mysqlnd –with-config-file-path=/home/wwwroot/php/lib –enable-mysqlnd –with-gd –enable-gd-native-ttf –enable-gd-jis-conv –enable-fpm
5、安装
make && make install
注意:如果要重新编译一定要先执行 make clean 切记!!!!!!

6、配置php-fpm
cd /home/wwwroot/php/etc/

cp php-fpm.conf.default php-fpm.conf

vi php-fpm.conf
//将user = nobody group = nobody 修改为 user = www group = www
//将;pid = run/php-fpm.pid 前面的分号删掉

//创建php.ini
cp 源码路径/php-5.4.17/php.ini-development /home/wwwroot/php/lib/php.ini

//设置php-fpm开机启动
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
//设置权限并启动php-fpm:
chmod 755 /etc/init.d/php-fpm
/etc/init.d/php-fpm start
chkconfig –add php-fpm

//最后,给出php-fpm以服务的方式启动、停止和重启:
service php-fpm start
service php-fpm stop
service php-fpm reload

六、结合php+nginx
cd /home/wwwroot/nginx/conf
vi  nginx.conf
user   www  www;  #修改nginx运行账号为:www组的www用户
index  index.php index.html index.htm;   #增加index.php

location ~ \.php$ {
root           html;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
include        fastcgi_params;
}
#取消FastCGI server部分location的注释,并要注意fastcgi_param行的参数,改为$document_root$fastcgi_script_name,或者使用绝对路径

//验证nginx配置语法
/home/wwwroot/nginx/sbin/nginx -t

//测试
cd /home/wwwroot/nginx/html
vim index.php
//内容如下
<?php phpinfo(); ?>
//如果能显示出php的环境信息,则表示配置成功

7、配置虚拟主机
在/home/wwwroot/nginx/conf下新建目录
mkdir vhosts
cd vhosts
vim onethinkcms.conf
// 加入如下配置
server {

listen  80;

server_name  netljc.com  www.netljc.com;

access_log  /home/wwwroot/nginx/logs/netljc.log;

location / {

root   /home/wwwroot/www/netljc/;

index  index.php index.html index.htm;

}

#  error_page   500 502 503 504  /50x.html;

#  location = /50x.html  {

#      root   /usr/share/nginx/html;

# }
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

location ~ .php$ {
# 这里的值对应的是$document_root
root /home/wwwroot/www/netljc;
fastcgi_pass   127.0.0.1:9000;

fastcgi_index  index.php;

#注意这里的路径

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

include        fastcgi_params;

}
}

八、安装mysql:
1、安装cmake
yum install cmake ncurses-devel -y

2、下载mysql
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.21-el7-x86_64.tar.gz

3、解压
tar -zvxf mysql-5.7.21-el7-x86_64.tar.gz

4、创建安装目录及数据存放目录
mkdir -p /home/wwwroot/mysql
mkdir -p /home/wwwroot/mysql/data

5、创建mysql用户及用户组
groupadd mysql
useradd -r -g mysql mysql

6、安装
cd mysql-5.7.21-el7-x86_64

cmake -DCMAKE_INSTALL_PREFIX=/home/wwwroot/mysql -DMYSQL_UNIX_ADDR=/home/wwwroot/mysql/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/home/wwwroot/mysql/data -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306 -DDOWNLOAD_BOOST=1 -Wno-dev

7、修改/usr/local/mysql权限
chown -R mysql:mysql /home/wwwroot/mysql

8、初始化配置
cd /home/wwwroot/mysql
执行初始化配置脚本,创建系统自带的数据库和表
scripts/mysql_install_db –basedir=/home/wwwroot/mysql –datadir=/home/wwwroot/mysql/data –user=mysql

9、添加服务,拷贝服务脚本到init.d目录
cp support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
service mysql start

10、设置PATH
echo “export PATH=$PATH:/home/wwwroot/mysql/bin” >> /etc/profile

11、建立软连接,不然mysql -uroot执行不了
ln -s /home/wwwroot/mysql/bin/mysql /usr/bin

12、修改root密码
mysql -uroot

SET PASSWORD = PASSWORD(‘123456′);

GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;

阿里云有安全组策略,一定注意要去添加端口号

linux文件搜索命令

文件搜索命令locate
命令搜索命令whereis与which
文件搜索命令find
字符串搜索命令grep
find与grep的区别

locate 文件名
在后台数据库中按文件名搜索,搜索速度更快,新建的文件马上搜索不到,每天更新一次
/var/lib/mlocate   locate命令所搜索的后台数据库
updatedb 更新数据库
/etc/updatedb.conf配置中的不会搜索

whereis 命令名 只能搜索系统命令
-b 只查找可执行文件
-m 只查找帮助文件

which 命令名 除了可以查看命令所在的位置还可以看到命令的别名

shell中自带的命令,比如:cd pwd通过whereis和which搜索不到

在$PATH环境变量中的路径下的命令,在执行的时候可以不带路径

#在系统中搜索符合条件的文件名,完全匹配,如果需要匹配使用通配符进行匹配
find [搜索范围] [搜索条件]
find /root -name install.log 区分大小写
find /root -iname install.log 不区分大小写
find /root -user root 搜索所有者是root的文件
find /root -nouser 搜索没有所有的文件
find /root -mtime +10 查找修改时间是10天前的文件
find /root -mtime -10 查找修改时间是10天内的文件
find /root -mtime -10 查找修改时间是10天当天的文件
atime 文件访问时间
ctime 改变文件属性时间
mtime 修改文件内容时间
find /root -size +25k 搜索文件大于25k的文件
find /root -inum 262422 查找i节点是262422的文件
find /root -size +20k -a -size -50k 查找root目录下大于20k小于50k的文件
find /root -size +20k -a -size -50k -exec ls -lh {} \; 查找root目录下大于20k小于50k的文件并显示详细信息
-a and 逻辑与,两个条件都满足
-o or 逻辑或,其中一个满足
搜索范围不要太大,否则会很浪费资源
搜索时需要模糊查询就要用到通配符
*-表示匹配任何内容
?表示匹配任意一个字符
[]-表示匹配其中的任意一个字符

#在文件中搜索符合条件的字符串,包含匹配,如果需要匹配使用正则表达式匹配
grep [选项] 字符串 文件名
-i 忽略大小写
-v 排除指定字符串

linux链接命令

ln -s [原文件] [目标文件]
-s 创建软链接

硬链接:两个文件的id号相同,有相同的i节点和储存block块,是同一个文件,删掉一个另外一个还存在,
不能跨分区创建硬链接,不能给文件夹创建硬链接
比如:教室的两个门

软连接:类似windows的快捷方式,有自己的i节点和block块,block块中记录的是原来的i节点和block块
原文件删除后软连接就不能用了
软连接一定要写绝对路径,否则不能正常使用

linux常用目录说明

/根目录
/bin /usr/bin 命令保存目录(普通用户就可以读的命令)
/sbin /usr/sbin 只有超级管理员才有权限操作的命令
/boot 启动目录,启动相关文件
/dev 设备文件保存目录
/etc 系统配置文件保存目录
/root 超级用户的家目录
/home 普通用户的家目录
/lib 系统库保存目录
/media /mnt /misc  挂载目录
/proc /sys 不能直接操作,是内存的挂载点
/tmp 临时目录
/usr 系统资源保存目录
/var 系统相关文档目录

linux命令提示符及命令说明

一、命令提示符

例如:[root@localhost ~]#

  • root-代表当前登录用户
  • localhost-代表主机名
  • ~当前所在的目录,代表目录所在位置
  • # 表示超级管理员 $表示普通用户

二、命令

  • 命令格式:命令 [选项] [参数]
  • 注意:个别命令不遵循这个格式
  • 当有多个选项时,可以写在一起
  • 简化选项与完整选项等效,比如:-a 等于 –all,简化选项加一个 -,完整选项加 –

linux-分区说明

==分区说明==
硬盘分成了无数个扇区,每个扇区512个字节,448个字节记录启动信息,64个字节作为分区表示,16个字节代表一个分区,所以只能有4个分区

  • 1、主分区:最多只能分四个,由硬盘的结构决定的
  • 2、扩展分区只能有一个,主分区+逻辑分区只能有4个
  • 3、在扩展分区里面划分逻辑分区,逻辑分区最多可以有23个

==格式化==
格式化是为了写入文件系统(ntfs、ext2、ext3、ext4…),不是为了清空数据;格式化把分区分成等大小的数据块,并在分区里面建立一个二维表格,记录文件的id、修改时间、权限、文件保存的数据块位置

==LINUX中必须要有的分区==
1、根分区 /
2、swap分区
swap分区(交换分区,内存4G就分内存的2倍,内存4G以上就分和内存一样,测试给2G就行了,当内存不够的时候用swap分区中的硬盘空间当内存使用)给内存直接调用,没有挂载点
3、启动分区 /boot
这是一个推荐分区,最好单独分,其他分区被写满了这个分区不会受到影响,不影响启动,给200M就好

==硬件设备存放目录/dev==
硬盘:hda1(hd-IDE接口的硬盘 a-第一块硬盘 b-第二块… 1-第一个分区 2-第二个分区) sda1(sd-SCSI接口硬盘或者SATA接口硬盘)
光驱
软盘
打印机
usb
鼠标

1、2、3、4只能给主分区或者扩展分区使用,逻辑分区都是从5开始的

==分区步骤==

  1. 分区
  2. 格式化
  3. 每个分区取一个设备文件名(linux下要多这一步)
  4. 分配盘符(linux下叫挂载点,给分区分配盘符的过程到挂载)

虚拟机网络设置的几种方式

1、桥接
虚拟机会占用局域网的ip,使用本机的物理网卡

2、nat
不会占用局域网ip,使用vmware8网卡,只能和本机通信

虚拟机->编辑->虚拟网络编辑器-vmware8->nat模式->nat设置,查看网关:192.168.19.2

sudo vi /etc/sysconfig/network-scripts/ifcfg-enoXXX

BOOTPROTO=static #这里讲dhcp换成ststic
ONBOOT=yes #将no换成yes
#新增
IPADDR=192.168.19.155 #静态IP
GATEWAY=192.168.19.2 #默认网关
NETMASK=255.255.255.0 #子网掩码
DNS1=114.114.114.114

保存退出后

设置dns

sudo vi /etc/resolv.conf 

nameserver 61.139.2.69

重启网络服务:
service network restart
3、host-only
使用vmware1网卡,不能上网,只能和本机通信