php-fpm - 启动参数及重要配置详解
约定几个目录
/usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm.conf /usr/local/php/etc/php.ini
约定几个目录
/usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm.conf /usr/local/php/etc/php.ini
最近装机次数有点多,本来想写到这里的centos6 优化脚本与安全脚本,结果一想还是新开一个帖子吧。
centos源设置可以参考Centos源设置,老高推荐安装阿里源。
新机子先运行上面的脚本,再运行这个脚本
老高最近在处理天气预报的问题时总结了一下,备用!
重做系统都快成日常了,看来还是需要整理一下。
今天写python脚本,遇到了一个问题。先贴代码:
#coding=utf-8
new_list = [] # 声明一个list
tmp = {'a':123,'b':'ccc'} # 新建一个dict
new_list.append(tmp) # 追加
print tmp
print new_list
tmp['a'] = 456 # 修改tmp
tmp['b'] = 'ddd'
new_list.append(tmp) # 追加
print tmp
print new_list
# 执行结果:
{'a': 123, 'b': 'ccc'}
[{'a': 123, 'b': 'ccc'}] # 当改变了tmp,list中的值也会变化
{'a': 456, 'b': 'ddd'}
[{'a': 456, 'b': 'ddd'}, {'a': 456, 'b': 'ddd'}]
如果是PHP会发生什么?
$b = array();
$a = array('b'=>123);
array_push($b , $a);
$a = array('b'=>456);
array_push($b , $a);
var_dump($b);
$a = new ArrayObject(array('b'=>123));
$arr = new ArrayObject();
$arr->append($a);
$a['b'] = 456;
$arr->append($a);
var_dump($arr);
# 执行结果
array(2) {
[0]=>
array(1) {
["b"]=>
int(123)
}
[1]=>
array(1) {
["b"]=>
int(456)
}
}
object(ArrayObject)#2 (1) {
["storage":"ArrayObject":private]=>
array(2) {
[0]=>
object(ArrayObject)#1 (1) {
["storage":"ArrayObject":private]=>
array(1) {
["b"]=>
int(456)
}
}
[1]=>
object(ArrayObject)#1 (1) {
["storage":"ArrayObject":private]=>
array(1) {
["b"]=>
int(456)
}
}
}
}
由结果看,PHP中array_push方法和array_object的结果也不同。
为什么会这样呢?
这里就要讲讲浅拷贝和深拷贝了。
以python为例,当执行new_list.append(tmp)
方法时,append方法仅仅把tmp变量的内存地址交给了new_list,而不是新建了一个与tmp一模一样的变量(内存中的地址不同,属性几乎一样),即浅拷贝。这就解释了,当改变了tmp的值后new_list中保存的tmp也会随之改变,因为他们都是一样一样的。
需要注意的是,python中非容器类没有拷贝这一说,还有一些坑在这里可以看到。
引用的能省下不少内存空间,但是会给新手造成迷惑。
PHP中的array_push
方法,就会做一次深拷贝,创建了新的变量,所以不论怎么修改传入的$a,都不会影响最终得到两个不同的数组。而使用了数组对象做同样的事,就会出现和python一样的浅拷贝现象。
那么如何解决之前的问题呢?
python的做法是引入标准库中的copy模块。
import copy
copy.copy(x)
# 返回一个x的浅复制。
copy.deepcopy(x)
# 返回一个x的深复制。
exception copy.error
# copy异常
将之前的python代码改为:
#coding=utf-8
import copy
new_list = [] # 声明一个list
tmp = {'a':123,'b':'ccc'} # 新建一个dict
new_list.append(tmp) # 追加
print tmp
print new_list
tmp = copy.deepcopy(tmp)
tmp['a'] = 456 # 修改tmp
tmp['b'] = 'ddd'
new_list.append(tmp) # 追加
print tmp
print new_list
PHP5中对象的赋值和传值都是以“引用”的方式,解决对象深拷贝采用的clone
语言结构,有兴趣的TX可以参考php深复制和浅复制。
扩展阅读:
http://blog.csdn.net/dizzthxl/article/details/7688744 http://bbs.chinaunix.net/thread-1787290-1-1.html http://www.jb51.net/article/54266.htm http://blog.csdn.net/dizzthxl/article/details/7688744 http://www.cnblogs.com/windlaughing/archive/2013/05/26/3100362.html
主要记录一些值得研究的PHP文档页面
老高在一个新环境中装DEDECMS的时候发现后台验证码无法显示。直接搜索一下这个错误,有人说session错误,有的说权限错误等等,这不胡扯么!只能看源代码了,定位到文件/include/vdimgck.php
。出错的函数是imagettftext()
,由于织梦使用了@
将错误隐去,导致这次莫名的错误。将@
去掉,错误立马出现:
Fatal error: Call to undefined function imagettftext()
现在我们就明确了,出现错误的原因是PHP编译时没有加上FreeType。
解决办法:
首先编译安装FreeType,以2.4.0为例:
wget http://download.savannah.gnu.org/releases/freetype/freetype-2.4.0.tar.bz2
tar -jxf freetype-2.4.0.tar.bz2
cd reetype-2.4.0
# 安装到/usr/local/freetype
./configure --prefix=/usr/local/freetype
make && make install
下面我们重新编译PHP,加上参数--with-freetype-dir=/usr/local/freetype
./configure \
... \
... \
--with-freetype-dir=/usr/local/freetype
编译完成重启php
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
再GD库中找到FreeType Support
说明安装成功!
需要注意的是,如果服务器freetype的版本是1.*,那么你可能需要改变编译参数为--with-ttf[=DIR]
,以下转自ChinaUnix论坛:
字库 配置开关 FreeType 1.x 要激活 FreeType 1.x 的支持,加上 --with-ttf[=DIR]。
FreeType 2 要激活 FreeType 2 的支持,加上 --with-freetype-dir=DIR。
T1lib 要激活 T1lib(Type 1 字体),加上 --with-t1lib[=DIR]。
本地 TrueType 字符串函数 要激活本地 TrueType 字符串函数的支持,加上 --enable-gd-native-ttf。
参考: