安装phpmailer

phpmailer是一个用php写全功能的发送email的模块,安装很简单:

sudo apt-get install libphp-phpmailer

缺省会安装在/usr/share/php/libphp-phpmailer目录。

还需要设置php.ini文件,将上述目录加入include路径:
sudo vi php.ini

在该php.ini文件中,找到include_path并修改为:

include_path = ".:/usr/share/php:/usr/share/php/libphp-phpmailer"

完成修改后,重启web服务器即可。

php程序内使用mail发送邮件的配置

msmtp:1.4.26-1

 1.安装 msmtp 
sudo apt-get install msmtp

2.配置默认发送邮件的帐号
参考: 利用mutt和msmtp发邮件 中的 msmtprc 部分

3.在php.ini中启用
在php.ini中启用 sendmail_path = "/usr/bin/msmtp -t"  。
这里以apache2为例,配置文件在 /etc/php5/apache2/php.ini

4.重启apache服务器
sudo service apache2 restart

5.测试
在itop中测试发送重置密码的邮件成功。

php中检查多维数组是否存在某个值

$arr = array(
   array('a', 'b'),
   array('c', 'd')
);
 
in_array('a', $arr); // 此时返回的永远都是 false
deep_in_array('a', $arr); // 此时返回 true 值
 

function deep_in_array($value, $array, $case_insensitive = false){
foreach($array as $item){
if(is_array($item)) $ret = deep_in_array($value, $item, $case_insensitive);
else $ret = ($case_insensitive) ? strtolower($item)==$value : $item==$value;
if($ret)return $ret;
}
return false;
}

来自in_array的评论:http://www.php.net/manual/zh/function.in-array.php#64161

php使用memcache例子

<?php
$db_host = "localhost";
$db_name = 'news';
$db_user = "comet";
$db_password = "12345678";

// set pdo name
$dsn = "mysql:host=$db_host;dbname=$db_name";
//连接
$mem = new Memcache();
$mem->connect('127.0.0.1', 11211);

$sql = "SELECT newsID,newssn,newsinfo FROM news";
$key=md5($sql);

if(!$mem->get($key))
{
$db = new PDO($dsn, $db_user ,$db_password);
$db->query("set character set 'utf8'");
$sth = $db->prepare($sql);
$sth->execute();
$result = $sth->fetchAll();
$f = 'mysql';
$mem->add($key,serialize($result),0,0); //mysql 查询后,插入 memcache
$data = $result;
}
else{
$f = 'memcache';
$data_mem=$mem->get($key);
$data = unserialize($data_mem);
}

echo $f;
echo "<br>";
print_r($data);

 

// //保存数据
// $mem->set('key1', 'This is a value', 0, 60);
// $val .= $mem->get('key1');
// echo "Get key1 value: " . $val ."<br />";

// //替换数据
// $mem->replace('key1', 'This is replace value', 0, 60);
// $val = $mem->get('key1');
// echo "Get key1 value: " . $val . "<br />";

// //保存数组
// $arr = array('aaa', 'bbb', 'ccc', 'ddd');
// $mem->set('key2', $arr, 0, 60);
// $val2 = $mem->get('key2');
// echo "Get key2 value: ";
// print_r($val2);
// echo "<br />";

// //删除数据
// $mem->delete('key1');
// $val = $mem->get('key1');
// echo "Get key1 value: " . $val . "<br />";

// //清除所有数据
// $mem->flush();
// $val2 = $mem->get('key2');
// echo "Get key2 value: ";
// print_r($val2);
// echo "<br />";

//关闭连接
$mem->close();

ubuntu安装nginx、php、mysql

nginx是高性能的网站服务,发音为 engine x,网站为:http://wiki.nginx.org
在linux下安装nginx、php、mysql这套方案可以简称为lnmp或lemp。

os: ubuntu 13.10 64bit
nginx: 1.2.6-1ubuntu3.3
php5-fpm: 5.4.9-4ubuntu2.4
mysql: 5.5.34-0ubuntu0.13.04.1

1.安装nginx

sudo apt-get install nginx
如果要安装最新稳定版,可以用ppa的源
注意:使用ppa配置文件的值有点不一样,建议下载nginx源代码,使用里面的配置文件。
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:nginx/stable
sudo apt-get update
sudo apt-get install nginx

2.安装php5

sudo apt-get install php5-fpm

常用的扩展

sudo apt-get install  php-mysql php-curl php-gd php-intl php-pear php-imagick php-xmlrpc php-memcache php-imap

不常用的扩展

sudo apt-get install php5-mcrypt php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy

安装完扩展之后需要重启一下fpm : sudo service php5-fpm restart

如果php5-mcrypt没生效,则需要在/etc/php5/fpm/conf.d中做个链接:

sudo ln -s ../../mods-available/mcrypt.ini 20-mcrypt.ini

3.为nginx启用php支持

修改/etc/nginx/sites-available/default,加亮的为修改的部分

server {
listen 80;

root /var/www;
index index.php index.html index.htm;

server_name localhost;

location / {
try_files $uri $uri/ /index.php;
}

location /doc/ {
alias /usr/share/doc/;
autoindex on;
allow 127.0.0.1;
allow ::1;
deny all;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

location ~ /\.ht {
deny all;
}
}

配置完后重启nginx。

4.安装mysql-server

sudo apt-get install mysql-server

5.nginx的配置文件说明
http://my.oschina.net/winHerson/blog/143781
http://my.oschina.net/u/586648/blog/146824

fuser占用大量cpu

解决办法:编辑 /etc/cron.d/php5 ,把

09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete

替换为:

09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete

session过多导致apache慢

一天发现网站出奇的慢,内存占用不多,但是CPU就满了,发现fuse有7个进程,占用了大量的CPU资源。仔细观察,发现这7个fuse进程是用来删除php的session的,接着统计了一下session,有7K+个,马上查看错误日志,发现大量记录,是扫描的结果,顺手添加了防止IP的措施。最后手动删除掉过期的session,站点恢复过来了。

安装APC提速PHP

APC是一个缓存和优化PHP中间码的框架。它自由、开源,提速效果好,有国人在做项目负责人。

1.在ubuntu中的安装

直接 sudo apt-get install php-apc 搞掂。

2.在WAMP Server中的安装

2.1查看PHP的版本
查看phpinfo() ,知道PHP Extension Build 是  API20090626,TS,VC9  ,就是TS线程安全的。

2.2下载APC
在http://downloads.php.net/pierre/apc-igbinary-fastlz-snap20110301-5.3-ts-vc9-x86.zip。这个不是最新的版本,不过能用就好,windows只是开发的时候用,非必要不折腾。

2.3安装
解压php_apc.dll 到wamp\bin\php\php5.3.13\ext 这里目录下,然后编辑php.ini,在设置extentsion的那段后面加上extension=php_apc.dll,然后重启apache就可以了。

3.确认安装成功
在phpinfo()中看到有APC就表示安装成功。

4.配置项说明

apc.enabled=1
apc.enabled默认值是1,可设成0禁用APC。如果设置为0的时候,同样把extension=apc.so也注释掉,这样可以节约内存资源)。一旦启用了APC功能,则会缓存Opcodes到共享内存。

apc.shm_segments = 1
apc.shm_size = 32

APC既然把数据缓存在内存里面,我们就有必要对它进行内存资源限定。通过这二个配置可以限定APC可以使用的内存空间大小。
apc.shm_segments指定了使用共享内存块数,而apc.shm_size则指定了一块共享内存空间大小,单位是M。所以,允许APC使用的内存大小应该是 apc.shm_segments * apc.shm_size = 32M。
可以通过调整一块共享内存的大小空间。当然,一块共享内存最大值是受操作系统限制的,即不能超过/proc/sys/kernel/shmmax大小。否则APC创建共享内存的时候,会失败。
在apc.shm_size达到了上限的时候,你可以通过设置apc.shm_segments来允许APC使用更多的内存空间。
如果调用APC使用内存空间的话,先考虑apc.shm_size,后考虑apc.shm_segments。

5.监控工具
http://pecl.php.net/package/apc 下载的压缩包里面有个apc.php 的监控工具,方便查看apc的统计。

安装ZendGuardLoader

zend optimizer不支持PHP 5.3及之后的版本,php 5.3之后要用Zend Guard Loader来加密、解密、提升PHP性能。这里以ubuntu 12.04 server 为例。

1.下载
http://www.zend.com/en/products/guard/downloads

2.安装
解压后得到ZendGuardLoader.so,复制到/usr/lib/php5/,然后在/etc/php5/apache2/php.ini中加入下面的代码,再重启apache服务器。

[Zend.loader]
zend_extension=/usr/lib/php5/ZendGuardLoader.so
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3
zend_loader.license_path=

php的utf-8字符串截取

/* utf-8字符串截取 */
function utf8_cutstr($string, $length) {
preg_match_all("/[x01-x7f]|[xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]|[xe1-xef][x80-xbf][x80-xbf]|xf0[x90-xbf][x80-xbf][x80-xbf]|[xf1-xf7][x80-xbf][x80-xbf][x80-xbf]/", $string, $info);
for($i=0; $i<count($info[0]); $i++) {
$wordscut .= $info[0][$i];
$j = ord($info[0][$i]) > 127 ? $j + 2 : $j + 1;
if ($j > $length - 3) {
return $wordscut." ...";
}
}
return join('', $info[0]);
}