标签归档:程序员

把apache加入系统service,开机自启动

sudo cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd

sudo

vi /etc/init.d/httpd

在文件开头加入下面几行:

#!/bin/sh

# chkconfig: 2345 85 15

# description: Apache is a World Wide Web server.

sudo chmod +x /etc/init.d/httpd

sudo /sbin/chkconfig –add httpd

sudo /sbin/chkconfig –list httpd

sudo ln -s /sbin/chkconfig /usr/bin/chkconfig

sudo ln -s /sbin/service /usr/bin/service

PHP编译安装时常见错误解决办法

http://www.poluoluo.com/jzxy/201505/364819.html

This article is post on https://coderwall.com/p/ggmpfa

configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution

代码如下:

yum -y install libxslt-devel

configure: error: Could not find net-snmp-config binary. Please check your net-snmp installation.

代码如下:

yum -y install net-snmp-devel

configure: error: Please reinstall readline – I cannot find readline.h

代码如下:

yum -y install readline-devel

configure: error: Cannot find pspell

代码如下:

yum -y install aspell-devel

checking for unixODBC support… configure: error: ODBC header file ‘/usr/include/sqlext.h’ not found!

代码如下:

yum -y install unixODBC-devel

configure: error: Unable to detect ICU prefix or /usr/bin/icu-config failed. Please verify ICU install prefix and make sure icu-config works.

代码如下:

yum -y install libicu-devel

configure: error: utf8mime2text() has new signature, but U8TCANONICAL is missing. This should not happen. Check config.log for additional information.

代码如下:

yum -y install libc-client-devel

configure: error: freetype.h not found.

代码如下:

yum -y install freetype-devel

configure: error: xpm.h not found.

代码如下:

yum -y install libXpm-devel

configure: error: png.h not found.

代码如下:

yum -y install libpng-devel

configure: error: vpx_codec.h not found.

代码如下:

yum -y install libvpx-devel

configure: error: Cannot find enchant

代码如下:

yum -y install enchant-devel

configure: error: Please reinstall the libcurl distribution – easy.h should be in /include/curl/

代码如下:

yum -y install libcurl-devel

LAOGAO added 20140907

configure: error: mcrypt.h not found. Please reinstall libmcrypt.

代码如下:

wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz

tar zxf libmcrypt-2.5.7.tar.gz

cd libmcrypt-2.5.7

./configure

make && make install

added 20141003

Cannot find imap

代码如下:

ln -s /usr/lib64/libc-client.so /usr/lib/libc-client.so

configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing.

代码如下:

yum -y install libc-client-devel

Cannot find ldap.h

代码如下:

yum -y install openldap

yum -y install openldap-devel

configure: error: Cannot find ldap libraries in /usr/lib

代码如下:

cp -frp /usr/lib64/libldap* /usr/lib/

configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path

代码如下:

yum -y install postgresql-devel

configure: error: Please reinstall the lib curl distribution

代码如下:

yum -y install curl-devel

configure: error: Could not find net-snmp-config binary. Please check your net-snmp installation.

代码如下:

yum -y install net-snmp-devel

configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution

代码如下:

yum -y install libxslt-devel

checking for BZip2 support yes checking for BZip2 in default path not found configure: error: Please reinstall the BZip2 distribution

Fix:

代码如下:

yum -y install bzip2-devel

checking for cURL support yes checking if we should use cURL for url streams no checking for cURL in default path not found configure: error: Please reinstall the libcurl distribution C easy.h should be in/include/curl/

Fix:

代码如下:

yum -y install curl-devel

checking for curl_multi_strerror in -lcurl yes checking for QDBM support no checking for GDBM support no checking for NDBM support no configure: error: DBA: Could not find necessary header file(s).

Fix:

代码如下:

yum -y install db4-devel

checking for fabsf yes checking for floorf yes configure: error: jpeglib.h not found.

Fix:

代码如下:

yum -y install libjpeg-devel

checking for fabsf yes checking for floorf yes checking for jpeg_read_header in -ljpeg yes configure: error: png.h not found.

Fix:

代码如下:

yum -y install libpng-devel

checking for png_write_image in -lpng yes If configure fails try Cwith-xpm-dir=

configure: error: freetype.h not found.

Fix:

代码如下:

Reconfigure your PHP with the following option. –with-xpm-dir=/usr

checking for png_write_image in -lpng yes configure: error: libXpm.(a|so) not found.

Fix:

代码如下:

yum -y install libXpm-devel

checking for bind_textdomain_codeset in -lc yes checking for GNU MP support yes configure: error: Unable to locate gmp.h

Fix:

代码如下:

yum -y install gmp-devel

checking for utf8_mime2text signature new checking for U8T_DECOMPOSE configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information.

Fix:

代码如下:

yum -y install libc-client-devel

checking for LDAP support yes, shared checking for LDAP Cyrus SASL support yes configure: error: Cannot find ldap.h

Fix:

代码如下:

yum -y install openldap-devel

checking for mysql_set_character_set in -lmysqlclient yes checking for mysql_stmt_next_result in -lmysqlclient no checking for Oracle Database OCI8 support no checking for unixODBC support configure: error: ODBC header file /usr/include/sqlext.h’ not found!

Fix:

代码如下:

yum -y install unixODBC-devel

checking for PostgreSQL support for PDO yes, shared checking for pg_config not found configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path

Fix:

代码如下:

yum -y install postgresql-devel

checking for sqlite 3 support for PDO yes, shared checking for PDO includes (cached) /usr/local/src/php-5.3.7/ext checking for sqlite3 files in default path not found configure: error: Please reinstall the sqlite3 distribution

Fix:

代码如下:

yum -y install sqlite-devel

checking for utsname.domainname yes checking for PSPELL support yes configure: error: Cannot find pspell

Fix:

代码如下:

yum -y install aspell-devel

checking whether to enable UCD SNMP hack yes checking for default_store.h no

checking for kstat_read in -lkstat no checking for snmp_parse_oid in -lsnmp no checking for init_snmp in -lsnmp no configure: error: SNMP sanity check failed. Please check config.log for more information.

Fix:

代码如下:

yum -y install net-snmp-devel

checking whether to enable XMLWriter support yes, shared checking for xml2-config path (cached) /usr/bin/xml2-config checking whether libxml build works (cached) yes checking for XSL support yes, shared configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution

Fix:

代码如下:

yum -y install libxslt-devel

configure: error: xml2-config not found. Please check your libxml2 installation.

Fix:

代码如下:

yum -y install libxml2-devel

checking for PCRE headers location configure: error: Could not find pcre.h in /usrFix:

代码如下:

yum -y install pcre-devel

configure: error: Cannot find MySQL header files under yes. Note that the MySQL client library is not bundled anymore!

Fix:

代码如下:

yum -y install mysql-devel

checking for unixODBC support configure: error: ODBC header file /usr/include/sqlext.h’ not found!

Fix:

代码如下:

yum -y install unixODBC-devel

checking for pg_config not found configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path

Fix:

代码如下:

yum -y install postgresql-devel

configure: error: Cannot find pspell

Fix:

代码如下:

yum -y install pspell-devel

configure: error: Could not find net-snmp-config binary. Please check your net-snmp installation.

Fix:

代码如下:

yum -y install net-snmp-devel

configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution

Fix:

代码如下:

yum -y install libxslt-devel

一键安装LAMP和LNMP

可以一键安装LAMP或者LNMP,自由选择

同时扩展了ssh、oci、ssl

目标项目中使用了phalcon框架和jdk,不需要的可以不安装。

不多说,上代码


#!bin/sh

function init()
{
#import RPM-GPG-KEY and install initscripts,wget,git
yum clean all
# cp -rf ./repo/aliyun.repo /etc/yum.repos.d/
# cp -rf ./repo/epel.repo /etc/yum.repos.d/
rpm --import /etc/pki/rpm-gpg/RPM* && rpm --import http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-6
yum -y install gcc gcc-c++ bison autoconf automake initscripts wget git
}

function install_httpd()
{
yum -y install httpd httpd-devel
sed -i 's/#ServerName www.example.com:80/ServerName localhost:80/g' /etc/httpd/conf/httpd.conf
}

function install_nginx()
{
echo -e "[nginx]\nname=nginx repo\nbaseurl=http://nginx.org/packages/centos/6/x86_64\ngpgcheck=0\nenabled=1" >> /etc/yum.repos.d/nginx.repo
yum -y install nginx

}

function download_php()
{
wget -c http://cn2.php.net/distributions/php-5.6.29.tar.bz2
}

function install_php()
{
#install support libs
yum -y install libxml2 libxml2-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel libmcrypt libmcrypt-devel mhash mcrypt libtool-ltdl libtool-ltdl-devel bzip2 bzip2-devel freetype freetype-devel openldap openldap-devel openssl openssl-devel

cp -frp /usr/lib64/libldap* /usr/lib/

#install php
tar -jxvf php-5.6.29.tar.bz2 && cd php-5.6.29 && ./configure --with-apxs2=/usr/sbin/apxs --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-mysql-sock --with-pdo-mysql=mysqlnd --with-openssl --with-gd --with-iconv --with-jpeg-dir=/usr/local/lib --with-png-dir --with-freetype-dir --with-zlib --with-bz2 --with-libxml-dir --with-gettext --with-curl --with-mhash --with-mcrypt --enable-mbstring --enable-mbregex --with-ldap --with-ldap-sasl --with-xmlrpc --enable-gd-native-ttf --enable-pdo --enable-pcntl --enable-sockets --enable-bcmath --enable-xml --enable-zip --enable-soap --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-maintainer-zts --enable-opcache --enable-cgi --without-pear --disable-phar >> ../install_php_log && make >> ../install_php_log && make install >> ../install_php_log && cd ../

#config PHP
cp ./php-5.6.29/php.ini-development $(php-config --prefix)/lib/php.ini && sed -i 's/\;date\.timezone \=/date\.timezone \=PRC/g' $(php-config --prefix)/lib/php.ini && sed -i "s/\;include_path \= \"\.\:\/php\/includes\"/include_path \= \"\$\(php-config --prefix\)\/lib\/php\"/g" $(php-config --prefix)/lib/php.ini && ln -s $(php-config --prefix)/bin/php /usr/bin/php
echo "AddHandler application/x-httpd-php .php" >> /etc/httpd/conf/httpd.conf
echo "" > /var/www/html/i.php
}

function install_phpfpm()
{
#install support libs
yum -y install libxml2 libxml2-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel libmcrypt libmcrypt-devel mhash mcrypt libtool-ltdl libtool-ltdl-devel bzip2 bzip2-devel freetype freetype-devel openldap openldap-devel openssl openssl-devel

cp -frp /usr/lib64/libldap* /usr/lib/

#install php
tar -jxvf php-5.6.29.tar.bz2 && cd php-5.6.29 && ./configure --enable-fpm --enable-cgi --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-mysql-sock --with-pdo-mysql=mysqlnd --with-openssl --with-gd --with-iconv --with-jpeg-dir=/usr/local/lib --with-png-dir --with-freetype-dir --with-zlib --with-bz2 --with-libxml-dir --with-gettext --with-curl --with-mhash --with-mcrypt --enable-mbstring --enable-mbregex --with-ldap --with-ldap-sasl --with-xmlrpc --enable-gd-native-ttf --enable-pdo --enable-pcntl --enable-sockets --enable-bcmath --enable-xml --enable-zip --enable-soap --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-maintainer-zts --enable-opcache --enable-cgi --without-pear --disable-phar >> ../install_php_log && make >> ../install_php_log && make install >> ../install_php_log && cd ../

#config PHP
cp ./php-5.6.29/php.ini-development $(php-config --prefix)/lib/php.ini && sed -i 's/\;date\.timezone \=/date\.timezone \=PRC/g' $(php-config --prefix)/lib/php.ini && sed -i "s/\;include_path \= \"\.\:\/php\/includes\"/include_path \= \"\$\(php-config --prefix\)\/lib\/php\"/g" $(php-config --prefix)/lib/php.ini && ln -s $(php-config --prefix)/bin/php /usr/bin/php

#config php-fpm. use -t test fpm’s configs
cp ./php-5.6.29/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm && chmod a+x /etc/init.d/php-fpm && chkconfig --add php-fpm && chkconfig php-fpm on && cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf && /usr/local/sbin/php-fpm -c $(php-config --prefix)/lib/php.ini -y /usr/local/etc/php-fpm.conf -t && /usr/local/sbin/php-fpm -c $(php-config --prefix)/lib/php.ini -y /usr/local/etc/php-fpm.conf

#write something into readme.txt
echo -e "start php-fpm:\n/usr/local/sbin/php-fpm -c $(php-config --prefix)/lib/php.ini -y /usr/local/etc/php-fpm.conf\nstop php-fpm:\nkill -INT 'cat /usr/local/php/var/run/php-fpm.pid'\nOR\nservice php-fpm stop\nreboot php-fpm:\nkill -USR2 'cat /usr/local/php/var/run/php-fpm.pid'\nOR\nservice php-fpm reboot" >> ../readme.txt

#config nginx
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
echo -e "server\n{\n listen 80;\n server_name localhost;\n root /var/www/zhenzhidaole;\n access_log /var/log/nginx/access_zhenzhidaole_com.log;\n error_log /var/log/nginx/error_zhenzhidaole_com.log;\n index index.html index.php;\n location ~ \.php$ {\n fastcgi_pass 127.0.0.1:9000;\n fastcgi_index index.php;\n fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;\n include fastcgi_params; \n }\n}" >> /etc/nginx/conf.d/vhost.conf

mkdir -p /var/www/html && echo "" > /var/www/html/i.php

service nginx restart
}

function install_php_by_yum()
{
yum install libxml2 libxml2-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel libmcrypt libmcrypt-devel mhash mcrypt libtool-ltdl libtool-ltdl-devel bzip2 bzip2-devel freetype freetype-devel openldap openldap-devel openssl openssl-devel
yum -y install php php-mysql php-common php-gd php-mbstring php-mcrypt php-devel php-xml
yum -y install perl
yum -y install mod_python
}

function download_mysql()
{
wget -c http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-client-5.7.16-1.el6.x86_64.rpm
wget -c http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-server-5.7.16-1.el6.x86_64.rpm
wget -c http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-devel-5.7.16-1.el6.x86_64.rpm
wget -c http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-libs-5.7.16-1.el6.x86_64.rpm
wget -c http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-common-5.7.16-1.el6.x86_64.rpm
}

function install_mysql()
{
#install mysql
yum -y install libaio net-tools numactl
yum -y remove mysql*

echo -e "HOSTNAME=internal.hostname.DOMAIN.com" >> /etc/sysconfig/network

rpm -ivh mysql-community-common-5.7.16-1.el6.x86_64.rpm && rpm -ivh mysql-community-libs-5.7.16-1.el6.x86_64.rpm && rpm -ivh mysql-community-devel-5.7.16-1.el6.x86_64.rpm && rpm -ivh mysql-community-client-5.7.16-1.el6.x86_64.rpm && rpm -ivh mysql-community-server-5.7.16-1.el6.x86_64.rpm && echo "max_allowed_packet=200M" >> /etc/my.cnf && service mysqld start

#find the default password and save it into readme.txt
echo -e "\nmysql install information:" >> ../readme.txt
sed -n '/A temporary password is generated for root@localhost:/p' /var/log/mysqld.log >> ../readme.txt
echo -e "After login mysql,you need to do:\nstep 1: SET PASSWORD = PASSWORD(\"your new password\");\nstep 2: ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;\nstep 3: flush privileges;" >> ../readme.txt
# echo -e "export MYSQL_HOME=/usr/local/mysql\nexport PATH=\$MYSQL_HOME/bin:\$PATH" >>/etc/profile && source /etc/profile
}

function download_ssh2()
{
wget -c https://www.libssh2.org/download/libssh2-1.8.0.tar.gz
wget -c http://pecl.php.net/get/ssh2-0.13.tgz
}

function install_ssh2()
{
tar -zxvf libssh2-1.8.0.tar.gz && cd libssh2-1.8.0 && ./configure --prefix=/usr/local/libssh2 && make && make install && cd ../
tar -zxvf ssh2-0.13.tgz && cd ssh2-0.13 && phpize && ./configure --prefix=/usr/local/ssh2 --with-ssh2=/usr/local/libssh2 && make && make install && echo "extension=ssh2.so" >> $(php-config --prefix)/lib/php.ini && cd ../
}

function download_oci()
{
# wget -c http://download.oracle.com/otn/linux/instantclient/11204/oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
# wget -c http://download.oracle.com/otn/linux/instantclient/11204/oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
wget -c http://pecl.php.net/get/PDO_OCI-1.0.tgz
wget -c http://pecl.php.net/get/oci8-2.0.12.tgz
}

Function install_oci()
{
#install oci8 support oracle11grc2
rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm && rpm -ivh oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm && echo '/usr/lib/oracle/11.2/client64/lib/' > /etc/ld.so.conf.d/oracle-x86_64.conf && ln -s /usr/lib/oracle/11.2/client64 /usr/lib/oracle/11.2/client && ln -s /usr/include/oracle/11.2/client64 /usr/include/oracle/11.2/client && echo -e "export ORACLE_HOME=/usr/lib/oracle/11.2/client64/\nexport LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64:\$LD_LIBRARY_PATH\nexport NLS_LANG=\"AMERICAN_AMERICA.AL32UTF8\"" >> /etc/profile && source /etc/profile

tar -zxvf oci8-2.0.12.tgz && cd oci8-2.0.12 && phpize && ./configure --with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client64/lib && make && make install && echo "extension=oci8.so" >> $(php-config --prefix)/lib/php.ini && cd ../

tar -zxvf PDO_OCI-1.0.tgz && cd PDO_OCI-1.0 && ln -s /usr/include/oracle/11.2 /usr/include/oracle/10.2.0.1 && ln -s /usr/lib/oracle/11.2 /usr/lib/oracle/10.2.0.1 && sed -i '101i 11.2)\n PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)\n \;\;' config.m4 && sed -i '10i elif test -f \$PDO_OCI_DIR/lib/libclntsh\.\$SHLIB_SUFFIX_NAME.11.2\; then\n PDO_OCI_VERSION=11\.2' config.m4 && sed -i 's/function_entry/zend_function_entry/g' pdo_oci.c && phpize && ./configure --with-pdo-oci=instantclient,/usr,11.2 && make && make install && echo "extension=pdo_oci.so" >> $(php-config --prefix)/lib/php.ini && cd ../

}

function download_phalcon()
{
git clone --depth=1 git://github.com/phalcon/cphalcon.git
}

function install_phalcon()
{
#install phalcon frameworks
cd cphalcon/build && ./install && echo "extension=phalcon.so" >> $(php-config --prefix)/lib/php.ini && cd ../../
}

function download_jdk()
{
# http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
}

function install_jdk()
{
install_path=$(pwd) && mkdir -p /usr/java && cp -rf jdk-8u111-linux-x64.tar.gz /usr/java/ && cd /usr/java && tar -zxvf jdk-8u111-linux-x64.tar.gz && echo -e "JAVA_HOME=/usr/java/jdk1.8.0_111\nCLASSPATH=\$JAVA_HOME/lib/\nPATH=\$PATH:\$JAVA_HOME/bin:\$JAVA_HOME/jre/bin\nexport PATH JAVA_HOME CLASSPATH" >> /etc/profile && source /etc/profile && java -version && cd $install_path
}

function install_openssl()
{
yum -y install openssl mod_ssl
cd /etc/pki/tls/private/ && openssl genrsa 1024 >localhost.key && openssl req -new -key localhost.key > localhost.csr && openssl req -x509 -days 3650 -key localhost.key -in localhost.csr > localhost.crt && cp localhost.crt /etc/pki/tls/certs/localhost.crt
}

function test_http()
{
echo -e "Alias /webalias \"/var/www/alias\”\n\n Options Indexes MultiViews FollowSymLinks\n AllowOverride None\n Order allow,deny\n Allow from all\n" >> /etc/httpd/conf/httpd.conf
echo -e "\n ServerAdmin admin@zhenzhidaole.com\n DocumentRoot /var/www/html\n ServerName www.zhenzhidaole.com\n ErrorLog /var/www/logs/error_log\n CustomLog /var/www/logs/access_log common\n" >> /etc/httpd/conf/httpd.conf
mkdir -p /var/www/web && mkdir -p /var/www/alias
echo "" > /var/www/alias/s.php
echo -e "127.0.0.1 www.zhenzhidaole.com" >> /etc/hosts
service httpd restart
}

function test_phpinfo()
{
php -v
php -i |grep mcrypt
php -i |grep ssh
php -i |grep oci
php -i |grep phalcon
curl https://localhost/ -k
curl http://www.zhenzhidaole.com/c.php |grep oci

#
}

init()
install_httpd()
#install_nginx()
#download_php()
install_php()
#install_phpfpm()
#download_mysql()
install_mysql()
#download_ssh2()
install_ssh2()
#download_oci()
install_oci()
#download_phalcon()
install_phalcon()
#download_jdk()
install_jdk()
install_openssl()

#test_http()
#test_phpinfo()

附件下载install-php.sh
另外附repo文件repo

TabControl的TabPages的显示与隐藏

做程序开发中发现TabControl的TabPages没有visable和enable属性,如果需要对某一个TabPage进行隐藏或者显示时就很麻烦,通常的方法是

VB.NET Code

tp=TabControl1.TabPages(i)

TabControl1.TabPages.Remove(tp)

i是TabPage的索引号,如果知道TabPage的Name,似乎不管用,需要转化成TabPage的索引号才有用

TabControl1.TabPages.Add(2,TabPageName)

2是要显示的位置的索引,TabPageName是Tabpage的Name,这一点似乎与上面隐藏时不太对应

关于PHP开发框架

什么是PHP开发框架?

有太多的原因使得PHP成为世界上最受欢迎的脚本语言——高度灵活、简单易用——不过写PHP(或者任何这种语言)代码时,人们常常陷入单调重复而令人生厌的体力活动的窘境。而这正是PHP开发框架大显身手的地方。

通过提供一个开发Web程序的基本架构,PHP开发框架把PHPWeb程序开发摆到了流水线上。换句话说,PHP开发框架有助于促进快速软件开发 (RAD),这节约了你的时间,有助于创建更为稳定的程序,并减少开发者的重复编写代码的劳动。这些框架还通过确保正确的数据库操作以及只在表现层编程的 方式帮助初学者创建稳定的程序。PHP开发框架使得你可以花更多的时间去创造真正的Web程序,而不是编写重复性的代码。

PHP开发框架背后的思想被称为“模型—视图—控制器”(MVC)。MVC是这样一种架构模式,它隔离了业务逻辑与UI,允许其一改变而另一者不受 影响。(也可以说是关注点的隔离)在MVC中,模型负责数据,视图负责表现,控制器则是程序主体或者说是负责业务逻辑。从本质上说,MVC拆分了一个程序 的开发过程,这样你就可以修改独立的每一部分,而其他部分不受影响,这是十分重要的,它使得编写PHP代码更为快捷简单。

为什么要使用PHP开发框架?

开发者可能出于不同的考虑而使用PHP开发框架,不过首当其冲的原因是为了加速开发过程。相似工程之间的代码重用能够节省开发者大量的时间和精力。 PHP开发框架内置了预建的模块,免去了冗长又令人厌烦的编程工作。这样开发者就能够把时间活在开发实际程序上,而不是每一次都要为每一个项目重建基础模 块。

稳定性是开发者使用框架的另一个重要原因。尽管简单是PHP最大的资本,也是许多人喜爱这个脚本语言的原因,它也是PHP的“潘多拉之盒”,尤其是 那些初学者而言,PHP是如此的简单以至于他们会完全没有意识地写出低质量的代码。这样的PHP程序可能在大多数时间内仍正常工作,但你可能已在代码中留 下了巨大的安全漏洞,使其易受攻击。要时刻牢记PHP是一门很宽松的语言十分重要,因此确保不在代码中遗留任何安全漏洞是重中之重——即使程序看起来工作 正常。

最后一点,PHP开发框架是可扩展的,并且有许多框架可供选择。你也可以创造你自己的,不过许多开发者决定从那些流行的知名的开发框架中做选择,因 为它们往往有着庞大的支持团队,以及相关的论坛/社区方便你与其他使用同一个框架的开发者相互交流。注意,你应当事先检验你的项目是否需要使用框架,这里 提供一份简单的列表以供参考:使用框架能否节省你(和其他任何会使用它的人)的时间和精力?是否能够让程序得到更好的表现?能否提高稳定性?如果你对上面 任何一个问题的回答是肯定的,那么使用PHP开发框架对于这个项目就可能是正确的选择。

何时使用PHP开发框架?

这是开发者,无论初学者还是经验丰富的专家,常常询问的问题,但又真的没有直截了当的答案。对于许多初学者而言,框架提供了良好的稳定性和简洁性,所以他们认为只要能用就应该用框架。它能够减少低质量代码的产生,并加快项目进度。

另一方面,许多经验丰富的PHP程序员把框架视为那些不懂得如何写出高质量的清晰的代码的“初级”程序员而设计的工具。这句话对错与否有待商榷,但事实上PHP开发框架的确是用来节省时间和提高编程效率的工具。

在忙于接近最后期限的工程时,使用PHP开发框架将带来巨大的效益,因为它能够极大地加快编程进度。所以如果你时间紧迫,使用PHP开发框架是极其正确的。应当把PHP开发框架列入考虑范围的另一个例子是当你忙于一个有大量重复代码的项目时,因为它有助于减少重复工作量。

在PHP开发框架中应当关注什么?

去搜索PHP开发框架的人将会看到各式各样的选择,你甚至可以创建你自己的,尽管只推荐PHP专家们这么做。在寻找最适合你需求的PHP开发框架 时,你要时刻想着谁会使用和/或彻头彻尾地修改它,这点很重要。如果会有许多人使用这个程序,最好用一个大多数开发者都熟悉的框架。另一方面,如果你想要 一个自己使用的Web程序,你最好选择一个你觉得最舒服的PHP开发框架——管它是流行还是不受欢迎呢。

在寻找PHP开发框架时应该考虑多种因素:简单易用,敏捷开发/性能,在其它开发者中间的流行程度,强大的特性,以及支持/论坛。我推荐你先尝试几 款不同的PHP开发框架,从中找出一个最适合你需求的,各种框架之间有些微的差异,有着不同的优势和劣势。就拿Zend Framework来说,V3版本之后就带有了丰富的功能,再加上一个可扩展的支持系统,这一切都是因为它存在了足够久。作为对照,CakePHP是另一 个比Zend Framework年轻的PHP开发框架,它的支持系统的规模就略微小些(尽管对这个框架的支持正在飞速增长),但CakePHP更加用户友好且简单易 用。

如你所见,每种PHP开发框架都有它自己的有点,所以最好先做一些尝试,捕捉一些错误以便找出哪个框架能最好地服务于你的需求。另一种很好的选择框 架的方式是咨询你那些身处开发者社区的同事,问问他们喜欢哪个。那些真正用过某个框架的人会告诉你它是否易用,特性,可用的支持,框架周边的社区所涉及的 领域,他们还可能告诉你它的缺点。

使用PHP开发框架时最常见的错误

任何一种类型的编程都会出现错误,不过PHP开发框架能够极大地限制这些错误的产生,因为它从开发过程的一开始就提供了经过验证的正确代码。而且看来重复的代码编写会增加错误出现的概率,而框架彻底解决或至少减少了那个问题。

这就是说,使用PHP开发框架仍然又需要注意的问题。例如,除非你是个PHP专家,否则你应该选择一个流行些的框架,它们有着丰富的支持和一定的活 跃用户基数(下面会列举一些流行的PHP开发框架)。有许多框架只有少得可怜的支持甚至没有支持,并且/或者是由对PHP了解有限的人创建的。这些框架会 导致你的程序不能正常工作,更坏的情况下会导致你的网站出现灾难性的安全问题。

另一种常见的错误是没有确保数据库和网站服务器兼容特定的框架。例如Seagull PHP Framewor推荐如下配置:

  • PHP: PHP 4.3.0 是最低配置,之后的版本也支持,PHP 5.1.1 及更高版本也可以。请避免任何 5.0.x 系列的东西。
  • MySQL: MySQL 4.0.x, 4.1.x 和 5.0.x 都支持,你也可以使用 3.23.x。
  • Apache: Seagull 在 1.3.x and 2.x 系列的 Apache 中工作得很好。

如果你不能满足这些要求,你就不能得到所选择框架可能的最佳性能。就算你是PHP专家,也应该在尝试框架之前阅读其文档以确保兼容性。

和上面这个错误比较类似的,不按照推荐安装步骤去安装你的PHP开发框架也会给你带来令人头痛的烦恼。仍然用Seagull作为例子—— Seagull的Wiki上有一份详细的框架安装流程,其中有几个关键步骤有时候常常被粗心或者没有戒心的开发者轻易地忽略了。关键是你一次就把框架装好 会让你在接下来的实际开发中节约不必要的时间开销。

现在最好用的PHP开发框架有哪些?

近几年来,随着PHP作为一门被许多开发者选作他们的脚本语言而不断演化,PHP开发框架如雨后春笋般走上荧屏。人们总是在争吵到底哪个PHP开发框架最好,但不是每个框架都是为所有人而产生的,这本来是很简单的事实。这里列举五个最好的最受欢迎的PHP开发框架:

The Zend Framework

PHP Frameworks Post Image

The Zend Framework 在开发社区中有大量的追随者,它致力于Web 2.0风格的程序。因为它众多的追随者组成的活跃用户开发的扩展支持,Zend被称为“The PHP Company”。Zend是一个,也可能不是,今天可用的最受欢迎的PHP开发框架。它有健壮的特征能够支持协作开发,它需要一些PHP的额外知识。

CakePHP

PHP Frameworks Post Image

CakePHP 无论对于初学者还是职业PHP开发者都是很好的选择。它基于与Ruby on Rails同样的原则而设计,它十分注重快速开发——这使得它成为一个非常好的用于RAD的开发框架。它快速增长的支持系统,简洁性和可测量性使得 CakePHP成为今天可用的最受欢迎的PHP开发框架之一。

Symfony

PHP Frameworks Post Image

Symfony 是为那些更加职业的主要开发企业级程序的开发者而准备的——特别是 Askeet 和 Yahoo! Bookmarks。这款开源PHP开发框架有着丰富的特性,做起这些来绰绰有余,它主要的缺点是比其他的框架略微慢一些。

Codelgniter

PHP Frameworks Post Image

Codelgniter 以它的简单易用,性能和速度而闻名。与 Symphony 不同,这款PHP开发框架对于共享主机的用户而言很理想,如果你想有一个小型覆盖面的框架。它提供了简单的解决方案,还有扩展的知识库,通过视频教程,用户指南和wiki来提供支持。

初学者应当考虑CodeIgniter。

Seagull

PHP Frameworks Post Image

Seagull 是一个良好的PHP开发框架,可以用来开发Web,命令行和GUI程序。这是一款无论对初学者还是职业程序员而言都及其简单的开发框架。对于初学 者,Seagull提供一套包含样例程序的库,经过简单修改就能符合你的要求,而对于专家级程序员,Seagull提供了一整套设置选项——包括最佳练 习,标准的和模块化的代码库——来快速简单地构建Web程序。Seagull有一个活跃的用户社区以及丰富的支持文档。

总结

PHP开发框架对于各种能力层级的开发者都是一种减少重复编码需要的良好方式,同时加快开发过程,确保创建Web程序时写了正确的代码。这不仅加速了复杂程序的开发,同时也减少了你代码中的安全漏洞从而加强了PHP的安全性。

尽管一些专家级PHP程序员感觉没必要使用开发框架开发Web程序,它们在快速软件开发中仍然有巨大优势,比如在紧迫的期限下。而对于初学者或中等 开发者,开发框架能够提高PHP学习效率同时促进练习编写高质量的代码且减少低质量代码,后者因为PHP自身的“宽松”特性而常常出现。

今天有许多可以使用的PHP开发框架,因此开发者肯定能找到一款满足他们在特性,支持,速度,可测度性等等方面的需求的框架。如今被开发者使用的顶 级PHP开发框架包括:The Zend Framework,CakePHP,Symfony,Codelgniter和Seagull。

【本文翻译仅为外语学习及阅读目的,原文作者个人观点与译者及译言网无关】

转载地址:http://article.yeeyan.org/view/aquarhead/51909?from_com