动态 版块 发帖 消息 我的
Loading...
HuPei.net
商•龙虎纹青铜尊及其虎食人纹局部,战国•玉螭虎食人佩!
子版块
hupei
10
最近腾讯云服务器在搞活动,我在上面买了1 核 1 GB 1 Mbps配置系统CentOS7.5,然后源码编译安装了原汁原味的LNMP黄金组合,这套组合也是目前市面上公认的黄金组合,下面就为大家详细描述一下安装过程,供大家参考。一、安装PHP1、访问php官方网站下载地址https://www.php.net/downloads.php,截止到本人发稿时php最新版本是7.3.8,如果后面有升级版本,也可按本教程安装即可,如图所示:PHP官网下载页面2、登陆到服务器终端,选择一个放置源码包的目录,我个人习惯把源码包放置在/data/src下面,在php官网下载页面选择php-7.3.8.tar.gz这个安装包,鼠标右击复制链接地址,执行命令下载源码包wget https://www.php.net/distributions/php-7.3.8.tar.gz[root@VM_0_8_centos ~]# cd /data/src/ [root@VM_0_8_centos src]# wget https://www.php.net/distributions/php-7.3.8.tar.gz --2019-08-07 23:52:46-- https://www.php.net/distributions/php-7.3.8.tar.gz 正在解析主机 www.php.net (www.php.net)... 185.85.0.29, 2a02:cb40:200::1ad 正在连接 www.php.net (www.php.net)|185.85.0.29|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:未指定 [application/x-gzip] 正在保存至: “php-7.3.8.tar.gz” [ <=> ] 19,559,584 4.53MB/s 用时 4.1s 2019-08-07 23:52:51 (4.53 MB/s) - “php-7.3.8.tar.gz” 已保存 [19559584] [root@VM_0_8_centos src]#3、解压源码包,进入加压后的文件夹[root@VM_0_8_centos src]# tar -xf php-7.3.8.tar.gz [root@VM_0_8_centos src]# cd php-7.3.84、这一步就是开始执行configure配置命令了,配置过程会出现各种错误,一般都是缺少各种依赖造成的,提前安装好以下依赖包防止配置过程报缺少依赖的错误:yum -y install libxml2 yum -y install libxml2-devel yum -y install openssl yum -y install openssl-devel yum -y install curl yum -y install curl-devel yum -y install libjpeg yum -y install libjpeg-devel yum -y install libpng yum -y install libpng-devel yum -y install freetype yum -y install freetype-devel yum -y install pcre yum -y install pcre-devel yum -y install libxslt yum -y install libxslt-devel yum -y install bzip2 yum -y install bzip2-devel yum -y install readline-devel特别注意配置过程中,如果出现这个错误configure: error: Please reinstall the libzip distribution,则执行下面命令进行安装此依赖:[root@VM_0_8_centos php-7.3.8]# yum remove libzip [root@VM_0_8_centos php-7.3.8]# cd ../ [root@VM_0_8_centos src]# wget https://nih.at/libzip/libzip-1.2.0.tar.gz [root@VM_0_8_centos src]# tar -xf libzip-1.2.0.tar.gz [root@VM_0_8_centos src]# ll 总用量 20276 drwxrwxr-x 7 root root 4096 4月 11 2018 libzip-1.2.0 -rw-r--r-- 1 root root 1189827 3月 12 09:18 libzip-1.2.0.tar.gz drwxr-xr-x 16 1000 1000 4096 8月 8 10:42 php-7.3.8 -rw-r--r-- 1 root root 19559584 7月 30 05:40 php-7.3.8.tar.gz [root@VM_0_8_centos src]# cd libzip-1.2.0 [root@VM_0_8_centos libzip-1.2.0]# ./configure 此处是配置输出的内容省略.... [root@VM_0_8_centos libzip-1.2.0]# make && make install 此处是编译安装输出的内容省略....如果出现错误:configure: error: off_t undefined; check your library configuration,则进行下面修改:[root@VM_0_8_centos nginx-1.17.2]# vim /etc/ld.so.conf #添加如下几行 /usr/local/lib64 /usr/local/lib /usr/lib /usr/lib64 #保存退出 :wq [root@VM_0_8_centos nginx-1.17.2]# ldconfig -v # 使之生效安装完所需要的依赖包以后,就可以执行配置命令了,按照下面的配置即可满足日常所需,其中–prefix是php的安装目录,可自定义目录位置,–with-config-file-path为php.ini的配置目录,服务器配置内存小于1G的必须加上–disable-fileinfo这个配置,否则会报错,执行下面配置:[root@VM_0_8_centos php-7.3.8]#./configure --prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7 --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-opcache --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gettext --enable-mbstring --with-iconv --with-mcrypt --with-mhash --with-openssl --enable-bcmath --enable-soap --with-libxml-dir --enable-pcntl --enable-shmop --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-sockets --with-curl --with-zlib --enable-zip --with-bz2 --with-readline --without-sqlite3 --without-pdo-sqlite --with-pear --disable-fileinfo 配置成功以后会出现下面的提示:Generating files configure: creating ./config.status creating main/internal_functions.c creating main/internal_functions_cli.c +--------------------------------------------------------------------+ | License: | | This software is subject to the PHP License, available in this | | distribution in the file LICENSE. By continuing this installation | | process, you are bound by the terms of this license agreement. | | If you do not agree with the terms of this license, you must abort | | the installation process at this point. | +--------------------------------------------------------------------+ Thank you for using PHP. config.status: creating php7.spec config.status: creating main/build-defs.h config.status: creating scripts/phpize config.status: creating scripts/man1/phpize.1 config.status: creating scripts/php-config config.status: creating scripts/man1/php-config.1 config.status: creating sapi/cli/php.1 config.status: creating sapi/fpm/php-fpm.conf config.status: creating sapi/fpm/www.conf config.status: creating sapi/fpm/init.d.php-fpm config.status: creating sapi/fpm/php-fpm.service config.status: creating sapi/fpm/php-fpm.8 config.status: creating sapi/fpm/status.html config.status: creating sapi/phpdbg/phpdbg.1 config.status: creating sapi/cgi/php-cgi.1 config.status: creating ext/phar/phar.1 config.status: creating ext/phar/phar.phar.1 config.status: creating main/php_config.h config.status: executing default commands5、执行make && make install 开始安装php[root@VM_0_8_centos php-7.3.8]# make && make install6、最后就是开始配置php环境了。复制配置文件:[root@VM_0_8_centos php-7.3.8]# cp /data/src/php-7.3.8/php.ini-development /usr/local/php7/php.ini [root@VM_0_8_centos ~]# cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf [root@VM_0_8_centos ~]# cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf将php和php-fpm都加入环境变量:[root@VM_0_8_centos ~]# vim /etc/profile PATH=$PATH:$HOME/bin:/usr/local/php7/bin:/usr/local/php7/sbin export PATH [root@VM_0_8_centos ~]# source /etc/profile启动php-fpm:[root@VM_0_8_centos ~]# php-fpm [root@VM_0_8_centos ~]# ps -ef |grep php-fpm root 10394 1 0 8月01 ? 00:00:12 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf) nginx 14018 10394 0 8月07 ? 00:00:43 php-fpm: pool www nginx 15631 10394 0 00:05 ? 00:00:41 php-fpm: pool www nginx 16710 10394 0 07:17 ? 00:00:21 php-fpm: pool www root 27340 23694 0 12:00 pts/0 00:00:00 grep --color=auto php-fpm停止php-fpm:[root@VM_0_8_centos ~]# pkill php-fpm查看php版本:[root@VM_0_8_centos ~]# php -v PHP 7.3.8 (cli) (built: Aug 1 2019 18:14:40) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.7, Copyright (c) 1998-2018 Zend Technologies二、安装nginx1、去nginx 官网https://nginx.org/en/download.html下载后缀为tar.gz的安装包,我选择的是1.17.2版本[root@VM_0_8_centos src]# wget https://nginx.org/download/nginx-1.17.2.tar.gz2、解压配置安装[root@VM_0_8_centos src]# tar -xf nginx-1.17.2.tar.gz [root@VM_0_8_centos src]# cd nginx-1.17.2 [root@VM_0_8_centos nginx-1.17.2]# ./configure 此处省略配置输出信息... [root@VM_0_8_centos nginx-1.17.2]# make && make install3、配置nginx环境变量[root@VM_0_8_centos nginx-1.17.2]# whereis nginx /usr/local/nginx/sbin/nginx [root@VM_0_8_centos nginx-1.17.2]# vim /etc/profile PATH=$PATH:$HOME/bin:/usr/local/php7/bin:/usr/local/php7/sbin:/usr/local/nginx/sbin export PATH [root@VM_0_8_centos nginx-1.17.2]# source /etc/profile4、启动、停止和重启nginx启动:nginx 强制停止:nginx -s stop #原理是先查出nginx进程id再使用kill命令强制杀掉进程 平滑停止:nginx -s quit #原理是待nginx进程处理任务完毕进行停止,推荐此方式平滑退出 重启:nginx -s reload #修改nginx的*.conf配置文件后,执行此命令可直接使配置生效而不必执行停止启动命令5、启动nginx后查看nginx进程:[root@VM_0_8_centos nginx-1.17.2]# ps -ef |grep nginx |grep -v grep root 15030 1 0 8月07 ? 00:00:00 nginx: master process nginx nginx 15032 15030 0 8月07 ? 00:00:01 nginx: worker process6、设置nginx开机自启动:[root@VM_0_8_centos nginx-1.17.2]# vim /etc/rc.local 追加一行 /usr/local/nginx/sbin/nginx [root@VM_0_8_centos nginx-1.17.2]# chmod 755 rc.local7、配置nginx和php-fpm通讯[root@VM_0_8_centos src]# vim /usr/local/nginx/conf/nginx.conf 添加一行 include vhosts/*.conf; [root@VM_0_8_centos src]# mkdir /usr/local/nginx/conf/vhosts [root@VM_0_8_centos src]#vim /usr/local/nginx/conf/vhosts/yourdomain.conf server { listen 80; server_name www.yourdomain.com; #你的域名 root /data/web/www.yourdomain.com; #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。 index index.php index.html index.htm; location / { index index.php index.html index.htm; } location ~ \.php$ { root /data/web/www.yourdomain.com; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }8、在上面配置的网站根目录下新建一个info.php,测试nginx和php是否正常安装<?php phpinfo();成功之后会出现下面页面:三、安装mysql1、去mysql官网https://dev.mysql.com/downloads/repo/yum/,找到mysql80-community-release-el7-3.noarch.rpm下载yum源2、添加yum源并执行安装命令:[root@VM_0_8_centos src]# yum localinstall mysql80-community-release-el7-3.noarch.rpm [root@VM_0_8_centos src]# yum install mysql-community-server3、安装完成之后就可以启动mysql服务了:[root@VM_0_8_centos src]# systemctl start mysqld.service查看mysql状态:[root@VM_0_8_centos src]# systemctl status mysqld.service ● mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: active (running) since 三 2019-07-31 23:41:11 CST; 1 weeks 0 days ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 19381 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS) Main PID: 19404 (mysqld) Status: "Server is operational" CGroup: /system.slice/mysqld.service └─19404 /usr/sbin/mysqld 7月 31 23:41:09 VM_0_8_centos systemd[1]: mysqld.service holdoff time over, scheduling restart. 7月 31 23:41:09 VM_0_8_centos systemd[1]: Starting MySQL Server... 7月 31 23:41:11 VM_0_8_centos systemd[1]: Started MySQL Server.关闭和重启mysql命令:[root@VM_0_8_centos src]# systemctl stop mysqld.service [root@VM_0_8_centos src]# systemctl restart mysqld.service4、启动mysql服务以后,需要修改root密码,这个密码存放在文件/var/log/mysqld.log中,可通过下面方式找到临时密码:[root@VM_0_8_centos src]# grep 'temporary password' /var/log/mysqld.log 2019-07-31T08:20:19.590478Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: aEqXa?@&TB9v- [root@VM_0_8_centos src]#连接数据库输入上面的临时密码登录后进行密码修改:[root@VM_0_8_centos src]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 13684 Server version: 8.0.17 MySQL Community Server - GPL Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourNewPassword'; 如果修改密码出现强度不够的提示,尽量给一个强密码,修改完密码,重启mysql服务使新密码生效:[root@VM_0_8_centos src]# systemctl restart mysqld.service5、开放mysql远程连接的权限mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> update user set host = '%' where user = 'root'; mysql> flush privileges;腾讯云和阿里云控制台都有一个安全组规则,记得找到安全组权限开放3306端口权限否则还是无法远程连接mysql服务,为了省事我自己开放了所有端口权限,根据个人情况来设定至此LNMP黄金组合成功搭建完毕!
 0    0  3天前
hupei
9
1、逐行读取文件,如果一个文件非常大,甚至超过了你服务器的内存限制,那么按行读取文件是一个不错的选择,代码如下:<?php $handle = @fopen("/tmp/file.txt", "r"); if ($handle) { while (($buffer = fgets($handle, 4096)) !== false) { echo $buffer; } if (!feof($handle)) { echo "Error: unexpected fgets() fail\n"; } fclose($handle); }2、goto,也许做php开发很多年的同学都不知道这个语法,他代表跳转到指定代码段,比如在执行循环的时候循环体内发生异常,我们希望重新执行当次循环的代码逻辑,就可以结合goto来使用:<?php foreach ($data as $row) { try { trans: //这里是你的代码逻辑 } catch (Exception $e) { echo $e->getMessage(),"\n"; goto trans; } }3、php脚本实现多进程,我们在实际开发需求当中免不了使用多进程来处理业务,比如一个亿级的数据表,我们用php脚本来分析这个表的数据,就应该启用多进程可以大大提高效率,pcntl_fork是实现多进程的核心方法:<?php $pid = pcntl_fork(); //父进程和子进程都会执行下面代码 if ($pid == -1) { //错误处理:创建子进程失败时返回-1. die('could not fork'); } else if ($pid) { //父进程会得到子进程号,所以这里是父进程执行的逻辑 pcntl_wait($status); //等待子进程中断,防止子进程成为僵尸进程。 } else { //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。 }4、php生成器yield,yield可是php性能利器,言简意赅的来总结它就是“随用随取”,下面通过例子来讲解:<?php //未使用生成器的例子 function createData($number){ $data = array(); for($i=0;$i<$number;$i++){ $data[] = time(); } return $data; } $datas = createData(100000000); foreach($datas as $row){ //这里是代码逻辑,内存占开销很大,存储了数组里的所有数据 } //使用生成器的例子 function createDataByYield($number){ for($i=0;$i<$number;$i++){ yield time(); } } $arr = createDataByYield(100000000); foreach($arr as $row){ //这里是代码逻辑,内存占用开销只有1条数据 }在上面的例子中createData方法返回的数组中如果有上千万甚至上亿条数据,会给服务器内存带来很大的开销,而使用生成器yield的例子中,我们只需要循环createDataByYield方法来获取每一条数据来处理即可,当前服务器内存只有一条数据的开销。5、php捕获错误,在php开发过程中我们一般都是用try catch来捕获异常,但是如果程序出现Fatal error的错误就会终止运行,在某些业务场景下我们可能不希望程序停止运行,就需要能捕获这类错误,在php7中新增了Throwable 接口来捕获错误,可以通过 try {} catch(Throwable $e) 来捕获php中无法捕获到的错误:<?php try { //这里可以写一些Fatal error的代码逻辑 } catch (Throwable $e) { echo $e->getMessage(); }
 0    0  3天前
hupei
11
一个好的编辑器或开发工具,能够极大提高我们的开发效率。下面介绍10个免费、强大的PHP编辑器/开发工具。这些编辑器拥有调试器、增量执行PHP脚本、查看每一行的所有变量值等功能。 1) Notepad ++   Notepad++是一款非常有特色的编辑器,是开源软件,可以免费使用。支持的语言: C, C++, Java , C#, XML, HTML, PHP, Javascript!  功能有: 1. Notepad内置支持多达 27 种语法高亮度显示(囊括各种常见的源代码、脚本,值得一提的是,完美支持.nfo 文件查看),也支持自定义语言; 2. Notepad可自动检测文件类型,根据关键字显示节点,节点可自由折叠/打开,代码显示得非常有层次感!这是此软件最具特色的体现之一; 3. Notepad可打开双窗口,在分窗口中又可打开多个子窗口,允许快捷切换全屏显示模式(F11),支持鼠标滚轮改变文档显示比例,等等; 4. Notepad提供数个特色东东,如邻行互换位置、宏功能,等等...现在网上有很多文件编辑器,这个却是不可多得的一款,不论是日常使用还是手写编程代码,都能让你体会到它独有的优势和方便。  2) PHPDesigner 7   phpdesigner 不仅支持php ,也支持其他网络语言像html ,xhtml,xml,css和javascript ,vbscript,java, c#,perl , python等!  由于可以搭配使用的相关免费资源相当的多,PHP 的网页设计越来越多人在学习了,MPS PHP DESIGNER 是针对 PHP 网页的编写所设计的程序,它内建一系列的指令码、PHP4 原始码数据库、语法高亮度显示功能、FTP 客户端…等,不管您是 PHP 网页设计高手,或者是刚入门的新手,您都可以使用者套软件来帮您设计网页程序(SQL、HTML 亦支持)。  3) Eclipse PDT   Eclipse这个集成开发环境只要有插件就可以实现相应功能。PDT这个项目很早就开始进行了。Zend Studio for Eclipse就是基于这个插件的,再加上自己的调试器。大家也可以在Eclipse上使用这个插件,然后自己再去选择调试器来配置自己的开发坏境。至于怎么配置,网上有人写出了自己的配置方法,大家可以自己查阅,这里只是介绍工具,这个暂且按下不表。这里我介绍的一个配置完整的包。这个也是Zend开发的,因为是免费的,所以在使用时自然不能和Zend Studio相比。  但是因为是在Eclipse上安装插件自定义实现,不必为PHP开发再安装一个大型软件,所以还是有很多人喜欢用这么个工具的。   4) Bluefish    Bluefish标榜其自身是“一款为熟练的Web设计员和程序员而设的编辑器,但它的UI却很直观,任何初学者都很够很快上手,并在不断地积累中发现和掌握它的其它功能。如果你需要的是一款能够进行Web代码设计的文本编辑器,那么它一定会是一款很不错的软件。它给我的总体印象就是专业却不令人生畏,文字和图标结合的都很好。   Bluefish提供了很多常用的HTML任务选项,例如字体、表格等等,当然还有链接,这个软件是用了一个比较不常见的“链接描述”(anchor)来表明可点击的链接。“链接描述”对话框甚至还提供了例如OnClick和OnMouseover这样的Javascript脚本事件功能。  5) Notepad2Notepad2是一个外观类似系统记事本的文本编辑工具,但比记事本有了很大的增强。 1.  自定义语法高亮,支持HTML, XML, CSS, JavaScript, VBScript, ASP, PHP, CSS, Perl/CGI,C/C++, C#, Java, VB, Pascal,汇编, SQL, Python, NSIS,INI, REG, INF, BAT,DIFF等众多脚本文件。 2.  支持ANSI,Unicode,UTF-8等编码互换 3.  可以设置无限个书签(9种图标可换)轻松定位 4.  空格,制表符彩色显示,并可互相转换 5.  可以对任意的文本块进行操作,ALT键+鼠标 6) HTML-Kit   HTML-Kit可以很容易的编辑、查找、验证、预览和发布HTML文档。功能包括:拖拽编辑、颜色代码打印、自动完成、任务栏、UNIX风格的查找替换、无限UNDO、文档模板、支持多种语言脚本和CSS、XML及XHML等等。  7) PHP Coder PHPCoder用于快速开发和调试PHP应用程序,它很容易扩展和定制,完全能够符合开发者的个性要求.1. 结合了PHP编译器和参考文档,可以对编辑中的PHP脚本进行即时预览;2. 支持高亮显示HTML和PHP代码;3. 自动完成功能,可以自动完成用户自定义代码片断;4. 标准函数提示;5. 有专门的工程项目管理器;6. 对象浏览器搜寻编辑中文件的包含信息,自定义函数,并以树形显示.7. 支持查找对称的语句标记符;8. 支持高级搜索和替换;9. 自带FTP功能;10. 支持运行和断点调试。总之,PHPCoder是一个非常实用的,功能强大的编程环境,而且它是免费的!  8 ) PHP Editor   DzSoft PHP Editor是专为PHP所设计的网页程序编辑软件-DzSoft PHP Editor,具有PHP编辑、侦错、浏览、原始码检视、档案浏览、可自订的原始码样本..等功能,无须架设网站主机就可以测试PHP指令码,是一套功能强大的PHP编程软件。 9) NetBeans IDE   NetBeans IDE是一个开源集成开发环境,可用于Windows、Mac、Linux和 Solaris。除完全支持所有 Java 平台(Java SE、Java EE、Java ME 和 JavaFX)之外,NetBeans 还是PHP、Ajax和JavaScript、Groovy和 Grails、Ruby和Ruby on Rails以及C/C++软件开发的理想工具。  原开发者是 SUN公司,现在为Oracle公司所有。  NetBeans 有多个产品,我们这里介绍的是专为PHP使用的,NetBeans for PHP有以下几个显要的优点:全中文界面完全开源免费支持代码模板功能支持代码自动折叠(可选择自动折叠代码的区域)支持代码格式化支持项目详细设置(项目右键属性)支持多编码支持FTP管理支持PHP调试支持语法加亮自定义支持文件比较支持按项目查找和替换支持版本控制(CVS、Subversion、Mercurial)支持插件功能支持代码缩进(Tab和Shift + Tab,大部分编辑器都支持这2个快捷键)支持括号匹配(包括大括号)支持语法即时纠错支持PHP、JS、CSS以及混写导航支持JS兼容性检查支持CSS设计支持代码提示(输入点号、::、->,就会自动提示代码,其它情况由用户来决定是否提示)支持文件快速定位(快捷键Alt + Shift + O,可以快速在项目中通过关键字列表出相关文件并定位)支持类型快速定位(快捷键Ctrl + O,针对于JS,直接搜索出包含关键字的函数名称并定位)支持符号快速定位(快捷键Ctrl + Alt + Shift + O,同时针对PHP和JS,直接搜索出包含关键字的属性、方法和函数名称并定位)系统和插件可以自动更新  好处实在说不完,谁用谁知道,你的eclipse、zendstudio都可以扔了,这话有点过,如果单从费用来说,后者确实可以去掉。  10) PSPad   pspad,一款超级小巧,又超合适开发php的软件  推荐理由:对编码格式支持超好,用DW编写纯代码还是极易出错,如带SESSION在DW编写,绝对会提示错误,当然还有很多好处就不一一罗列  缺点:没有代码提示功能,不过,如果你是老手的话,这个不在呼,而新手更应该练习不需提示的写代码。  免费的编辑器,支持简体中文界面。它集各种编辑器的优点于一身,同时编辑多个文件,可以使用project;内置HEX编辑器;内置HEX编辑器;支持宏的录制和使用;支持语法高亮和彩色显示,HTML,PHP,Pascal,JScript,VBScript,SQL,Perl,JAVA...;内置文件比较工具;支持宏的录制和使用;内置FTP工具;可以针对不同的文件类型设置对应的外部工具;支持外部编译器。不过其打开文件的速度似乎不如Editplus。 转自: http://www.iteye.com/news/22672
 0    0  5天前
hupei
49
问题现象:现象一:phpmyadmin在使用过程中经常出现“登陆超时(1440秒未活动),请重新登录”;现象二:phpmyadmin 里会出现“您的 PHP 配置参数 session.gc_maxlifetime (外链,英文) 短于您在 phpMyAdmin 中设置的 Cookies 有效期,因此您的登录会话有效期将会比您在 phpMyAdmin 中设置的时间要更短。”的错误提示。解决方法:第一步:修改php.ini,找到session.gc_maxlifetime = 1440将数值改大就行了,然后使之生效第二步:在phpMyAdmin所在目录找到 / libraries / config.default.php 文件,打开,修改$cfg['LoginCookieValidity'] = 1440;  修改:$cfg['LoginCookieValidity']的值小于或等于php.ini里的session.gc_maxlifetime的值,即可解决”现象二“注意:$cfg['LoginCookieValidity']的值不能大于php.ini里的session.gc_maxlifetime的值,否则phpmyadmin 里会出现“您的 PHP 配置参数 session.gc_maxlifetime (外链,英文) 短于您在 phpMyAdmin 中设置的 Cookies 有效期,因此您的登录会话有效期将会比您在 phpMyAdmin 中设置的时间要更短。”错误(即问题现象二的错误)。
 0    0  24天前
hupei
49
MySQL忘记root密码,而且不能使用操作系统认证直接进入数据库修改密码时,需要重置root密码。1、在配置文件/etc/my.cnf添加skip-grant-tables一行,跳过密码验证。2、重启mysql数据库主进程# /etc/init.d/mysqld restart(也可以直接先停掉MySQL进程后使用skip-grant-tables参数重启MySQL)3、登录数据库修改密码。mysql> update user set authentication_string=password('') where user='root' and host='localhost';  Query OK, 1 row affected (0.00 sec) Rows matched: 1  Changed: 1  Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql>  mysql> exit这里需要修改的字段是authentication_string,这点和之前的版本不同。4、这个时候,如果你设置的密码太简单,则在数据库执行任何命令都会报类似如下错误:mysql> show databases; ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. mysql> show database; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database' at line 1 mysql> update user set authentication_string=password('mysql') where user='root' and host='localhost';  ERROR 1046 (3D000): No database selected mysql> use mysql; ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.5、注意:如果只想设置简单密码需要修改两个全局参数:mysql> set global validate_password_policy=0; mysql> set global validate_password_length=1;  mysql> set global validate_password_policy=0;        Query OK, 0 rows affected (0.00 sec) mysql> set global validate_password_length=1;         Query OK, 0 rows affected (0.00 sec) mysql> set password=password("mysql"); Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed
 0    0  24天前
hupei
45
环境Mater:   CentOS6.4  mysql5.5.38  192.168.107.133Slave:   CentOS6.4  mysql5.5.38  192.168.107.1351.导出主服务数据,将主备初始数据同步master://从master上导出需要同步的数据库信息mysqldump -u*** -p*** --database test > test.sql//将master上的备份信息传输到slave上scp /root/test.sql root@192.168.107.135:/opt/slave://进入slave的数据库mysql -u*** -p***//清空test数据库drop database test//导入master的test数据库信息source /opt/test.sql2.配置master和slave上的mysql数据库master://修改master的my.cnf文件vim /etc/my.cnf//master配置如下,在[mysqld]下添加如下配置#log-binserver-id          =   1log_bin            =   master-binexpire_logs_days   =   10max_binlog_size    =   100Mbinlog-do_db       =   testbinlog_ignore_db   =   mysql//重启mysql数据库service mysqld restartslave://修改slave的my.cnf文件vim /etc/my.cnf//slave配置如下,在[mysqld]下添加如下配置server-id         =   2//重启mysql数据库service mysqld restart简单说明一下参数配置,保证主备server-id唯一。在master上需要开启mysql的binlog,log_bin=master_bin,指定binlog文件的名称。3.创建一个复制用户,具有replication slave 权限,能保证slave能把master的数据同步过去master:grant replication slave on *.* to 'replication'@'192.168.107.135' identified by 'replication';4.获取master的binlog位置master://进入mysql数据库mysql -u*** -p***//设置读锁flush tables with read lock;//获取mysql的binlog文件信息和偏移量show master status;+-------------------+----------+--------------+------------------+| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |+-------------------+----------+--------------+------------------+| master-bin.000010 |     3713 | test         | mysql            |+-------------------+----------+--------------+------------------+1 row in set (0.00 sec)//解锁unlock tables;5.设置备端数据库//进入mysql数据库mysql -u*** -p***//停止slavestop slave;//设置对应master的binlog信息MariaDB [(none)]> change master to    -> master_host='192.168.107.133',    -> master_user='replication',    -> master_password='replication',    -> master_log_file='master-bin.000010',    -> master_log_pos=3713;//启动slavestart slave;6.查看备端状态MariaDB [(none)]> show slave status\G;*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: 192.168.107.133                  Master_User: replication                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: master-bin.000010          Read_Master_Log_Pos: 3881               Relay_Log_File: mariadb-relay-bin.000002                Relay_Log_Pos: 698        Relay_Master_Log_File: master-bin.000010             Slave_IO_Running: Yes            Slave_SQL_Running: Yes              Replicate_Do_DB:          Replicate_Ignore_DB:           Replicate_Do_Table:       Replicate_Ignore_Table:      Replicate_Wild_Do_Table:  Replicate_Wild_Ignore_Table:                   Last_Errno: 0                   Last_Error:                 Skip_Counter: 0          Exec_Master_Log_Pos: 3881              Relay_Log_Space: 994              Until_Condition: None               Until_Log_File:                Until_Log_Pos: 0           Master_SSL_Allowed: No           Master_SSL_CA_File:           Master_SSL_CA_Path:              Master_SSL_Cert:            Master_SSL_Cipher:               Master_SSL_Key:        Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: No                Last_IO_Errno: 0                Last_IO_Error:               Last_SQL_Errno: 0               Last_SQL_Error:  Replicate_Ignore_Server_Ids:             Master_Server_Id: 11 row in set (0.00 sec)ERROR: No query specified 如果:Slave_IO_Running: Yes,Slave_SQL_Running: Yes则为配置成功,配置错误重复上面操作即可。如果解决不了可通过查看mysql日志分析处理。7.测试。其实测试没啥好写的,配置成功之后直接连到主从数据库,在master上改变表、字段、数据,slave会同步变化
 0    0  24天前
hupei
48
用户"sa"登陆失败 SQLServer 错误18456的解决方法用windows账号还是可以登录的。 查找问题的过程: 第一步: 启动所有与SQL有关的服务,问题依旧; 第二步: 查看windows防火墙,被默认启动了,不启动选择项被Disabled。两个提示“由于安全考虑,某些设置由组策略控制”“Windows防火墙正在使用您的域设置”,先用gpedit.msc打组策略编辑器,机算机配置--管理模板--网络--网络连接--Windows防火墙--标准配置文件,查看右边各选项属性,都是未配置状态,问题不在这里。 另外一个提示中提到域设置,域设置不可能禁用SQL Server,并且我查看本地开放端口(netstart -an),25,1433,1434都是开发状态。 会不会是密码错误? 第三步:我用windows账号登录,连接成功后,, 选择"属性", 右键实例,在"属性"窗口中, 转到"Security"(安全性)项, 查看"服务器身份验证"中设置确为"SQL Server和Windows身份验证模式", 然后执行下面的语句启用sa用户, 同时更改sa的密码 EXEC sp_password 'sa',null,'sa' ALTER LOGIN sa ENABLE 执行出错: 消息 15116,级别 16,状态 1,第 1 行 密码有效性验证失败。该密码太短,不符合 Windows 策略要求。 哈哈,问题找到。 本地设置可能被域设置覆盖。而域设置中指定了安全策略,密码必须有一定的复杂性。重新更改sa密码, EXEC sp_password 'sa','Uiop_098Mn','sa' ALTER LOGIN sa ENABLE 
 0    0  24天前
hupei
51
教你几种在SQLServer中删除重复数据方法数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置……方法一 代码如下:declare @max integer,@id integer declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1 open cur_rows fetch cur_rows into @id,@max while @@fetch_status=0 begin select @max = @max -1 set rowcount @max delete from 表名 where 主字段 = @id fetch cur_rows into @id,@max end close cur_rows set rowcount 0 方法二 有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。 1、对于第一种重复,比较容易解决,使用 代码如下:select distinct * from tableName就可以得到无重复记录的结果集。 如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除代码如下:select distinct * into #Tmp from tableName drop table tableName select * into tableName from #Tmp drop table #Tmp 发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。 2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下 假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集代码如下:select identity(int,1,1) as autoID, * into #Tmp from tableName select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID select * from #Tmp where autoID in(select autoID from #tmp2)最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列) 
 0    0  24天前
hupei
51
微信中公众号开发中使用$GLOBALS["HTTP_RAW_POST_DATA"]来获取微信公众平台推送过来的post数据,结果惊奇的发现微信号总是提示“该微信公众号暂时无法提供服务”,仔细去检查代码,也没错,可就是无法提供服务。今天又检查了一把,还是没有语法错误,于是乎,我将中间的所有数据全部写到的记事本里去,通过及时本发现$GLOBALS["HTTP_RAW_POST_DATA"]获取的数据是空的。经过资料查找,终于发现了解决的套路:  $GLOBALS ["HTTP_RAW_POST_DATA"]跟$_POST,file_get_contents('php://input')  差不多,用$GLOBALS ["HTTP_RAW_POST_DATA"]或file_get_contents('php://input')的情况大多是为了获取$_POST无法接收的数据类型(如XML数据)  在$GLOBALS ["HTTP_RAW_POST_DATA"]取不到值的情况下可以按以下方式排查:     1.用file_get_contents('php://input')获取数据。如果获取不到,则可能是数据传输错误,对请求进行捉包,分析数据。     2.如果file_get_contents('php://input')有数据。则查看php.ini配置文件。  找到如下,如果没开启则开启[php] view plain copyalways_populate_raw_post_data = On    注意:这种处理方式是在php版本较低的时候,在php-ini中才有的配置,当版本升级到7,或者更高的时候该机制就被废弃掉了。下边归纳几种php获取post数据的方式:  RPC 规定接收取值方式 $GLOBALS['HTTP_RAW_POST_DATA'];  PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型。   1、$_POST['paramName'] 只能接收Content-Type: application/x-www-form-urlencoded提交的数据,php会将http请求body相应数据会 填入到数组$_POST,填入到$_POST数组中的数据是进行urldecode()解析的结果。(其实,除了该Content-Type,还有 multipart/form-data表示数据是表单数据)   2、file_get_contents("php://input") 适用大多数类型的Content-type,php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。php://input 不能用于 enctype="multipart/form-data"。   3、$GLOBALS['HTTP_RAW_POST_DATA']; 总是产生 $HTTP_RAW_POST_DATA  变量包含有原始的 POST 数据。此变量仅在碰到未识别 MIME 类型的数据时产生。$HTTP_RAW_POST_DATA  对于 enctype="multipart/form-data"  表单数据不可用。   如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']来接收,比如 text/xml 或者 soap 等等。需要设置php.ini中的always_populate_raw_post_data值为On,PHP才会总把POST数据填入变量$http_raw_post_data。   1,Coentent-Type仅在取值为application/x-www-data-urlencoded和multipart/form- data两种情况下,PHP才会将http请求数据包中相应的数据填入全局变量$_POST   2,PHP不能识别的Content-Type类型的时候,会将http请求包中相应的数据填入变量$HTTP_RAW_POST_DATA   3, 只有Coentent-Type不为multipart/form-data的时候,PHP不会将http请求数据包中的相应数据填入php: //input,否则其它情况都会。填入的长度,由Coentent-Length指定。   4,只有Content-Type为application/x-www-data-urlencoded时,php://input数据才 跟$_POST数据相一致。   5,php://input数据总是跟$HTTP_RAW_POST_DATA相同,但是php://input 比$HTTP_RAW_POST_DATA更凑效,且不需要特殊设置php.ini   6,PHP会将PATH字段的query_path部分,填入全局变量$_GET。通常情况下,GET方法提交的http请求,body为空。  总之:1、如果是 application/x-www-form-urlencoded 和 multipart/form-data 格式 用 $_POST;2、如果不能获取的时候比如 text/xml、application/json、soap,使用 file_get_contents('php://input');
 0    0  24天前
hupei
129
一个十六进制转RGB的函数/** * 十六进制转RGB * @param string * @return array */ function hex2rgb($hexColor) { $color = str_replace('#', '', $hexColor); if (strlen($color) > 3) { $rgb = array( 'r' => hexdec(substr($color, 0, 2)), 'g' => hexdec(substr($color, 2, 2)), 'b' => hexdec(substr($color, 4, 2)) ); } else { $color = $hexColor; $r = substr($color, 0, 1) . substr($color, 0, 1); $g = substr($color, 1, 1) . substr($color, 1, 1); $b = substr($color, 2, 1) . substr($color, 2, 1); $rgb = array( 'r' => hexdec($r), 'g' => hexdec($g), 'b' => hexdec($b) ); } return $rgb; } print_r(hex2rgb('#009933'));
 0    0  85天前
快速发帖高级模式
Powered by 虎佩中国
© 2012-2019 HuPei.net
您的IP:3.227.233.6,2019-08-25 08:25:06,Processed in 0.11429 second(s).
Powered by HuPei.net
免责声明:本站内容均来自网络,如有侵权请联系站长删除,一切后果概不负责!