php无法发送邮件的原因

遇到过两次php mail无法发送邮件,第一次是没有正确设置hostname,http://devops.webres.wang/2011/10/wordpress-slow-comment-solution/,这次需要设置/etc/php.ini文件里sendmail的路径,设置php sendmail路径方法如下:
打开/etc/php.ini(不一定是这个路径),搜索;sendmail_path = 更改为sendmail_path = /usr/sbin/sendmail -t -i(不一定是这个路径,你可以通过whereis sendmail查找)。之后重启php就OK。

配置apache以fastcgi运行php

apache默认是用自带的mod_php模块运行php,现在我们介绍使用fastcgi来执行php脚本。先说下fastcgi的优点:
Fastcgi的优点:

  • 从稳定性上看, fastcgi是以独立的进程池运行来cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分 配新的进程来运行逻辑.
  • · 从安全性上看,Fastcgi支持分布式运算. fastcgi和宿主的server完全独立, fastcgi怎么down也不会把server搞垮.
  • · 从性能上看, fastcgi把动态逻辑的处理从server中分离出来, 大负荷的IO处理还是留给宿主server, 这样宿主server可以一心一意作IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分, 大量的图片等静态
  • IO处理完全不需要逻辑程序的参与.
  • · 从扩展性上讲, fastcgi是一个中立的技术标准, 完全可以支持任何语言写的处理程序 (php,java,perl,ruby,c++,python…)
  • · 适用操作系统,可在任何平台上http://www.fastcgi.com/dist/mod_fastcgi-current.tar.gz使用
  • 安装apache

    1. wget http://apache.ziply.com//httpd/httpd-2.2.21.tar.gz
    2. tar xzf httpd-2.2.21.tar.gz
    3. cd httpd-2.2.21
    4. ./configure –prefix=/usr/local/apache
    5. make && make install

    安装fastcgi

    1. wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz
    2. tar xzf mod_fastcgi-2.4.6.tar.gz
    3. cd mod_fastcgi-2.4.6
    4. cp Makefile.AP2 Makefile
    5. make top_dir=/usr/local/apache
    6. make top_dir=/usr/local/apache install

    完成之后编辑httpd.conf配置文件,加入fastcgi模块装载代码:

    1. LoadModule fastcgi_module modules/mod_fastcgi.so

    安装php5.2

    1. wget http://us2.php.net/get/php-5.2.17.tar.gz/from/am.php.net/mirror
    2. tar xzf php-5.2.17.tar.gz
    3. cd php-5.2.17
    4. ./configure –prefix=/usr/local/php –enable-fastcgi –disable-cli
    5. make && make install

    配置apache支持php

    编辑httpd.conf文件,加入如下代码:

    1. ### fastcgi ###
    2. ScriptAlias /fcgi-bin/ "/usr/local/php/bin/"
    3. AddHandler php-fastcgi .php
    4. Action php-fastcgi /fcgi-bin/php-cgi
    5. AddType application/x-httpd-php .php
    6.  
    7. <IfModule mod_fcgid.c>
    8.     AddHandler fcgid-script. .php .fcgi   ### 暂时只配置支持.php
    9.     IdleTimeout 300
    10.     ProcessLifeTime 1800
    11.     MaxProcessCount 100
    12.     DefaultMinClassProcessCount 3
    13.     DefaultMaxClassProcessCount 8
    14.     IPCConnectTimeout 15
    15.     IPCCommTimeout 300
    16.     MaxRequestsPerProcess 100
    17. </IfModule>
    18. ### fastcgi ###

    建立虚拟主机可以这样配置:

    1. <VirtualHost *:80>
    2.  DocumentRoot /usr/local/apache/htdocs
    3.  ServerName localhost
    4.  Options +ExecCGI
    5.  AddHandler fastcgi-script .fcgi
    6.  AddType application/x-httpd-php .php
    7.  Action application/x-httpd-php /fcgi-bin/php-cgi
    8.  <Directory /usr/local/apache/htdocs>
    9.  Options Indexes ExecCGI
    10.  Order allow,deny
    11.  allow from all
    12.  </Directory>
    13. </VirtualHost>

    详细的fastcgi指令配置请看:http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html

    Linux安装php扩展memcache

    php扩展memcache的作用是为了支持memcached数据库缓存服务器,下面是安装方法。
    1、下载并解压memcache文件

    1. wget -c http://pecl.php.net/get/memcache-3.0.6.tgz
    2. tar xzvf memcache-3.0.6.tgz
    3. cd memcache-3.0.6

    2、执行phpize扩展安装程序,假设phpzie的路径为/usr/local/php/bin/phpize,具体的路径得根据自己的环境修改。

    1. /usr/local/php/bin/phpize

    3、开始安装扩展memcache

    1. ./configure –enable-memcache –with-php-config=/usr/local/php/bin/php-config –with-zlib-dir
    2. make && make install

    4、最后修改php.ini文件,在zend之前加入如下代码。

    1. [memcache]
    2. extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
    3. extension=memcache.so

    Linux安装PHP加速器Xcache

    XCache 是一个又快又稳定的 PHP opcoolcode 缓存器. 经过良好的测试并在大流量/高负载的生产机器上稳定运行. 经过(在 linux 上)测试并支持所有现行 PHP 分支的最新发布版本, 如 PHP_4_3 PHP_4_4 PHP_5_0 PHP_5_1 PHP_5_2 HEAD(6.x), 并支持线程安全/Windows. 与同类 opcoolcode 缓存器相比更胜一筹, 比如能够快速跟进 PHP 版本.下面介绍如何安装配置。
    1、安装xcache

    1. wget http://xcache.lighttpd.net/pub/Releases/1.3.2/xcache-1.3.2.tar.gz
    2. tar -zxvf xcache-1.3.2.tar.gz
    3. cd xcache-1.3.2
    4. phpize
    5. ./configure –enable-xcache
    6. make
    7. make install

    2、配置xcache
    打开php.ini文件,增加如下代码:

    1. [xcache-common]
    2. ; change me – 64 bit php => /usr/lib64/php/modules/xcache.so
    3. ; 32 bit php => /usr/lib/php/modules/xcache.so
    4. zend_extension = /usr/lib64/php/modules/xcache.so
    5.  
    6. [xcache.admin]
    7. xcache.admin.auth = On
    8. xcache.admin.user = "mOo"
    9. ; xcache.admin.pass = md5($your_password)
    10. xcache.admin.pass = ""
    11.  
    12. [xcache]
    13. xcache.shm_scheme =        "mmap"
    14. xcache.size  =               32M
    15. xcache.count =                 1
    16. xcache.slots =                8K
    17. xcache.ttl   =              3600
    18. xcache.gc_interval =         300
    19.  
    20. ; Same as aboves but for variable cache
    21. ; If you don’t know for sure that you need this, you probably don’t
    22. xcache.var_size  =            0M
    23. xcache.var_count =             1
    24. xcache.var_slots =            8K
    25. xcache.var_ttl   =             0
    26. xcache.var_maxttl   =          0
    27. xcache.var_gc_interval =     300
    28.  
    29. ; N/A for /dev/zero
    30. xcache.readonly_protection = Off
    31.  
    32. xcache.mmap_path =    "/dev/zero"
    33.  
    34. xcache.cacher =               On
    35. xcache.stat   =               On

    注意修改zend_extension = /usr/lib64/php/modules/xcache.so为正确的路径。
    详情的配置说明:http://xcache.lighttpd.net/wiki/XcacheIni

    eAccelerator 配置参数详解

    1. eaccelerator.shm_size="32"

    eAccelerator 可以使用的共享内存的数量 (以兆为单位) . “0” 是指操作系统的默认值. 默认值是 “0”.可根据服务器的实际情况来调整,16,32,64,128都是可以的。

    1. eaccelerator.cache_dir="/home/php/tmp"

    这个目录是给磁盘缓存使用. eAccelerator 在这里储存预先编译好的代码, 进程数据, 内容以及用户的自定义内容. 同样的数据也能被储存在共享内存中 (这样可以提高访问速度). 默认的设置是 “/tmp/eaccelerator”.

    1. eaccelerator.enable="1"

    开启或关闭 eAccelerator。”1″ 为开启,”0″ 为关闭。默认值为 “1”。

    1. eaccelerator.optimizer="1"

    启或关闭内部优化器,可以提升代码执行速度。”1″ 为开启,”0″ 为关闭。默认值为 “1”。
    eaccelerator.check_mtime=”1″
    打开或者关闭 PHP 的文件修改检查. “1” 是指打开, “0” 是指关闭. 如果您在修改以后重新编译 PHP 的文件,那么您应当设置为 “1”. 默认值是 “1”.

    1. eaccelerator.debug="0"

    开启或关闭调试日志记录。”1″ 为开启,”0″ 为关闭。默认值为 “0”。会将缓存命中得记录写入日志。

    1. eaccelerator.filter=""

    判断哪些 PHP 文件必须缓存。您可以指定缓存和不缓存的文件类型(如 “*.php *.phtml”等)
    如果参数以 “!” 开头,则匹配这些参数的文件被忽略缓存。默认值为 “”,即,所有 PHP 文件都将被缓存。

    1. eaccelerator.shm_max="0"

    当使用 ” eaccelerator_put() ” 函数时禁止其向共享内存中存储过大的文件。该参数指定允许存储的最大值,单位:字节 (10240, 10K, 1M)。”0″ 为不限制。默认值为 “0”。

    1. eaccelerator.shm_ttl="0"

    当 eAccelerator 获取新脚本的共享内存大小失败时,它将从共享内存中删除所有在最后 “shm_ttl” 秒内没有存取的脚本缓存。默认值为 “0”,即:不从共享内春中删除任何缓存文件。

    1. eaccelerator.shm_prune_period="0"

    当 eAccelerator 获取新脚本的共享内存大小失败时,他将试图从共享内存中删除早于”shm_prune_period” 秒的缓存脚本。默认值为 “0”,即:不从共享内春中删除任何缓存文件。

    1. eaccelerator.shm_only="0"

    允许或禁止将已编译脚本缓存在磁盘上。该选项对 session 数据和内容缓存无效。默认值为 “0”,即:使用磁盘和共享内存进行缓存。

    1. eaccelerator.compress="1"

    允许或禁止压缩内容缓存。默认值为 “1”,即:允许压缩。

    1. eaccelerator.compress_level="9"

    指定内容缓存的压缩等级。默认值为 “9”,为最高等级。

    1. eaccelerator.keys = "disk_only"
    2. eaccelerator.session = "disk_only"
    3. eaccelerator.content = "disk_only"

    设置内容缓存的存放的地方,可以设置为:
    shm_and_disk 在共享缓存和硬盘(默认值)
    shm 默认存在共享内存,如果共享内存已满或大小超过 “eaccelerator.shm_max” 的值,就存到硬盘
    shm_only 只存放在共享内存
    disk_only 只存放在硬盘
    none 不缓存数据

    1. eaccelerator.allowed_admin_path = "/var/www/html/21andy.com/eaccelerator"

    这是控制面板的地址
    安装包里有个control.php,你把它复制到网站的任意目录,可以用它查看和管理,这个必须指定,否则查看缓存内容的时候会出错
    最后,来看一下我的 eAccelerator 设置

    1. ; eaccelerator
    2. [eaccelerator]
    3. zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
    4. eaccelerator.shm_size="128"
    5. eaccelerator.cache_dir="/tmp/eaccelerator"
    6. eaccelerator.enable="1"
    7. eaccelerator.optimizer="1"
    8. eaccelerator.check_mtime="1"
    9. eaccelerator.debug="0"
    10. eaccelerator.filter=""
    11. eaccelerator.shm_max="0"
    12. eaccelerator.shm_ttl="3600"
    13. eaccelerator.shm_prune_period="3600"
    14. eaccelerator.shm_only="0"
    15. eaccelerator.compress="1"
    16. eaccelerator.compress_level="9"
    17. eaccelerator.keys = "disk_only"
    18. eaccelerator.sessions = "disk_only"
    19. eaccelerator.content = "disk_only"
    20. eaccelerator.allowed_admin_path = "/var/www/html/21andy.com/eaccelerator"

    另外,再说下 eAccelerator 的安装

    1. # wget http://bart.eaccelerator.net/source/0.9.6/eaccelerator-0.9.6.tar.bz2
    2. # tar -jxvf eaccelerator-0.9.6.tar.bz2
    3. # cd eaccelerator-0.9.6
    4. # /usr/local/php/bin/phpize
    5. # ./configure –enable-eaccelerator=shared –with-php-config=/usr/local/php/bin/php-config
    6. # make && make install

    文章来源:http://www.21andy.com/blog/20100207/1646.html

    Linux php.ini的安全优化配置

    (1) PHP函数禁用找到

    1. disable_functions =

    该选项可以设置哪些PHP函数是禁止使用的,PHP中有一些函数的风险性还是相当大的,可以直接执行一些CentOS系统级脚本命令,如果允许这些函数执行,当PHP 程序出现漏洞时,损失是非常严重的!以下我们给出推荐的禁用函数设置:

    1. disable_functions = phpinfo,passthru,exec,system,popen,chroot,escapeshellcmd,escapeshellarg,shell_exec,proc_open,proc_get_status

    需注意:如果您的服务器中含有一些CentOS系统状态检测的PHP程序,则不要禁用shell_exec,proc_open,proc_get_status等函数。

    (2) PHP脚本执行时间找到

    1. max_execution_time = 30

    该选项设定PHP程序的最大执行时间,如果一个PHP脚本被请求,且该PHP脚本在max_execution_time时间内没能执行完毕,则PHP不再继续执行,直接给客户端返回超时错误。没有特殊需要该选项可保持默认设置30秒,如果您的PHP脚本确实需要长执行时间则可以适当增大该时间设置。

    (3) PHP脚本处理内存占用找到

    1. memory_limit = 8M

    该选项指定PHP脚本处理所能占用的最大内存,默认为8MB,如果您的服务器内存为1GB以上,则该选项可以设置为12MB以获得更快的PHP脚本处理效率。

    (4) PHP全局函数声明找到

    1. register_globals = Off

    网络上很多关于PHP设置的文章都推荐将该选项设置为On,其实这是一种及其危险的设置方法,很可能引起严重的安全性问题。如果没有特殊的需要,强烈推荐保留默认设置!

    (5) PHP上传文件大小限制找到

    1. upload_max_filesize = 2M

    该选项设定PHP所能允许最大上传文件大小,默认为2MB。根据实际应用需求,可以适当增大该设置。
    (6) 几个地方的检查
    查找:display_errors
    如果是On的话改成Off
    查找:magic_quotes_gpc
    如果是Off的话改成On

    CentOS-6 64位安装PHP5.2出现error: libjpeg.(a|so),error: libpng.(a|so) not found

    昨天测试lamp一键安装脚本时,出现error: libjpeg.(a|so),error: libpng.(a|so) not found等两个错误,根据错误提示,是找不到libjpeg和libpng库文件的意思,找了一下,发现这两个文件在目录/usr/lib64下,而php并不查找这个位置,而是去/usr/lib搜索库文件,所以只能建立两个软链接。

    1. ln -s /usr/lib64/libjpeg.so /usr/lib/libjpeg.so
    2. ln -s /usr/lib64/libpng.so /usr/lib/libpng.so

    同是64位,CentOS-5就没有这种问题。

    Linux php安装zip扩展

    1. # wget http://pecl.php.net/get/zip-1.10.2.tgz
    2. # tar zxvf zip-1.10.2.tgz
    3. # cd zip-1.10.2
    4. # /usr/local/php/bin/phpize

    运行了这个zip目录下会自动生成几个文件,其中包括configure

    1. # ./configure –with-php-config=/usr/local/php/bin/php-config
    2. # make
    3. # make install

    安装完成后修改一下php.ini

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

    加入

    1. extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/zip.so

    之后重启apache。

    CentOS 5.x 系统下使用yum 升级php到5.2.x 最方便方法

    WordPress需要PHP的版本5.2x以上,如果你的PHP是yum安装的,很有可能PHP的版本是5.1x,通过以下方法升级PHP到5.2比较方便,现推荐给大家。

    1. # rpm –import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
    2. # vi /etc/yum.repos.d/CentOS-Base.repo

    增加下面信息

    1. [utterramblings]
    2. name=Jason’s Utter Ramblings Repo
    3. baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
    4. enabled=1
    5. gpgcheck=1
    6. gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

    执行命令,自动升级。

    1. yum update php -y
    2. yum install libmcrypt -y