Jquery实现Ajax同步请求网页的某个Url地址:Post嵌套一个get同步请求
Php/Js/Shell/Go jackxiang 2012-2-14 18:23
有时我们在Post的Ajax请求时还是需要一个Get的请求,但Ajax在Jquery封装的Get,Post都是默认异步的,要想同步还是得更加底层,于是有了下面的代码,其实还有更好的方法,
或者在全局设置Ajax属性
再用post,get就是同步的了
网上也有,Url及内容贴在最下面:阅读全文
或者在全局设置Ajax属性
再用post,get就是同步的了
网上也有,Url及内容贴在最下面:阅读全文
在Windows或者Linux下mysql安装后默认的密码为空,
又当我们又安装了mysql的管理工具
phpmyadmin后登陆时出现“空密码登陆呗禁止(参见允许密码为空)”。不能登录成功
解决办法如下:
最新版本:phpMyAdmin-3.4.9-all-languages.tar.bz2
DownLoadUrl:http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/3.4.9/phpMyAdmin-3.4.9-all-languages.tar.bz2/download#!md5!ab181a3fffc89e5d5c4ebd62ccfe396b
修改如下:
又当我们又安装了mysql的管理工具
phpmyadmin后登陆时出现“空密码登陆呗禁止(参见允许密码为空)”。不能登录成功
解决办法如下:
最新版本:phpMyAdmin-3.4.9-all-languages.tar.bz2
DownLoadUrl:http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/3.4.9/phpMyAdmin-3.4.9-all-languages.tar.bz2/download#!md5!ab181a3fffc89e5d5c4ebd62ccfe396b
修改如下:
第一步,导出旧库
mysqldump --default-character-set latin1 -uroot -pXXX --database db > /tmp/old.sql
第二步,转换编码
iconv -t utf-8 -f gb2312 -c /tmp/old.sql > /tmp/new.sql
第三步,导入新库
修改new.sql,增加一条sql语句: "SET NAMES utf8;",保存。
mysql -hlocalhost -uroot db < new.sql
来自:PHP高级技术群 8745758
Gbk编码导出这个Mysql的注释也就对了:
而存入的时候是:
要想显示 正常,需要在Mysql Client输入:
再select数据也就正常了。是表存的内容是latin1,而这个表结构的注释是gbk编码的,所以这块还是多少有一些问题;
证明:
1,只导出数据:
mysqldump --default-character-set gbk -t db_adc t_tst_sum_info > /tmp/old.sql 理论是乱码,实践出也是乱码。
mysqldump --default-character-set latin1 -t db_adc t_tst_sum_info > /tmp/old.sql 理论上是正常,实践也是正常。
充分说明这个表的结构注释和表内容是不一样的,要想一样,得统一为lation,或者gbk,但历史原因都是lation,所以,统一为lation较好。
最后:尽管说明这样两种编码是可以的,但是还是可以统一为lation的,线上我也就发现是可以的。
mysqldump --default-character-set latin1 -uroot -pXXX --database db > /tmp/old.sql
第二步,转换编码
iconv -t utf-8 -f gb2312 -c /tmp/old.sql > /tmp/new.sql
第三步,导入新库
修改new.sql,增加一条sql语句: "SET NAMES utf8;",保存。
mysql -hlocalhost -uroot db < new.sql
来自:PHP高级技术群 8745758
Gbk编码导出这个Mysql的注释也就对了:
而存入的时候是:
要想显示 正常,需要在Mysql Client输入:
再select数据也就正常了。是表存的内容是latin1,而这个表结构的注释是gbk编码的,所以这块还是多少有一些问题;
证明:
1,只导出数据:
mysqldump --default-character-set gbk -t db_adc t_tst_sum_info > /tmp/old.sql 理论是乱码,实践出也是乱码。
mysqldump --default-character-set latin1 -t db_adc t_tst_sum_info > /tmp/old.sql 理论上是正常,实践也是正常。
充分说明这个表的结构注释和表内容是不一样的,要想一样,得统一为lation,或者gbk,但历史原因都是lation,所以,统一为lation较好。
最后:尽管说明这样两种编码是可以的,但是还是可以统一为lation的,线上我也就发现是可以的。
show table status;
show table status where name ='表名'; 可以查看指定表的信息
show table status where name ='t_tst_draft_info';
=====把鼠标放在调用函数默认是显示函数的参数,而按下ctrl时会显示出函数的原型=====
查询调用该函数父函数,这个实在是太有用了:
Ctrl+shift+M:模糊搜索方法名 【这块要注意配置,否则出现模糊匹配找不到的问题:通过Ctrl+shift+M找开小窗后左上角:select working set,新建立一个自己的PHP项目的工作集并命名,后在选中checkradio里的所选工作集,并在下面的checkbox里选当前想要查找的项目集合,可以多选,也可当选,最好是当前自己项目的一个集合即可,这样查找不会出现多个相同的函数名给匹配上了。】
ctrl+shift+G //本人在zend for eclipse9.0.2里测试通过。
选中你所要查看的方法名,ctrl+shift+G就可以查看所有调用过该方法的地方了。在Search视图里面可以查看得到
这个样子是可以的,你也可以按Ctrl+H全文检索一下
CTRL+HOME 或 CTRL+END | 光标移到文件头或到文件
Ctrl+H(Ctrl+Shift+h) 在整个项目中来查找某一个方法名,或者是其它相关的文件名。
Ctrl+Shift+H:类名或相关的文件名,新版本的zend studio for eclipse有类型层次结构显示。
Ctrl+Shift+R:查找相关的文件名称。
Ctrl+E:在打开的文件里查找某个PHP的文件,可以用星号匹配。
Ctrll+Shift+E: 显示所有打开文件,可以直接双击相当于Ctrl+E,如单击其中一个文件后可以选其它编辑器。
Ctrl+T 快速显示当前类的继承结构
Ctrl+Shift+T 输入部分以查找当前项目的类并跳转到文件中去
==================================================================
F3 快速跳转到当前所指的函数,常量,方法,类的定义处,相当常用。当然还可以用Ctrl+鼠标左键
Ctrl+Shift+G 查找某个函数、方法、常量等在哪些地方被调用了,刚好和F3相反。
Ctrl+Shift+M 查找项目进而的函数,这儿要使用*号匹配下,再就是如果是当前项目中找不到(其实有的),选好项目名后要多用这个去全,有这个Deselect Working Set项目:点那个删除是表示在所有的项目上搜索,这肯定能匹配到的,呵呵。(感觉这块Zend做得不是太好。)
Ctrl+H 全局查找,功能很丰富的,用的比较多
Ctrl+Shift+T 查找某个具体的类
Ctrl+Shift+R 查找资源(此快捷键利用率甚高,如果你没用到,可能你得考虑下,为什么其他程序员都用到频率很高,你没用到的原因)
Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)
shift+end 此行第一个到最后一个
shift+home 此行最后一个到第一个
Ctrl+home 文件头
Ctrl+end 文件尾
Ctrl+Q 定位到最后编辑的地方(我的语录:这个定位的不是当前文本的,也是一个全局的,要留意)
Ctrl+Alt+H 在页面函数中点右键出来的菜单中》open Call hierarchy (注:Ctrl+Shift+G 是两回事)
具体中文名是:Open all Hierarchy 主要功能是 显示一个方法的调用层次(被哪些方法调,调了哪些方法),特殊:
Ko::$config->attach(new Config_File);
这句话有可能是把配置文件的值传成对象放到ko这个类里面的方法中.
是这样搜索的,这个attach通过alt+ctrl+H只是一个当前的出来,其它文件没出来所以说兄弟你的解释是对的:
这句话有可能是把配置文件的值传成对象放到ko这个类里面的方法中.是这样搜索的。(在array_unshift执行Ctrl+Alt+H是能出来所有文件的,但是上面这个函数就只出来 一个,实际上有多个函数都调用了attach这个函数的一个简单研究。)
==================================================================
安装Aptana3中高亮显示相同变量(实践OK)
Window -> preferences -> Aptana Studio -> Editors -> PHP
选中 Mark occurrences with background color 其中选项 Global variables 就是高亮显示相同变量
==================================================================
只记得部分文件,打开的快捷方法:
如果文件数量过多,你只记得文件名中的几个字母,可以通过Ctrl+Shift+R或者Ctrl+T打开资源搜索平台查找即可
==================================================================
Aptana zend 都支持:
Ctrl+H全文检索
==================================================================
Shift+Enter 在当前行的下一行插入空行
Ctrl+Q 定位到最后编辑的地方
Ctrl+M 最大化当前的Edit或View (再按则反之)
Ctrl+O 快速显示 OutLine
Ctrl+T 快速显示当前类的继承结构 //有待验证
==================================================================
http://pangbu.com/jquery-for-aptana3/
http://www.cnblogs.com/therock/articles/2164031.html
http://zyj.me/article/aptana3-with-jquery-support
安装jquery试试:
Aptana 3.x中开启jQuery支持
可以通过如下方式开启Aptana的jQuery支持:
Commands -> Bundle Development -> Install Bundle
选择jQuery,即可自动git
退出重启下Eclipse,搞定。
==================================================================
CTRL+SHIFT+L | 显示所有快捷键列表(个人称之为“新手键”)
也可以参考:http://www.cnblogs.com/mybest/archive/2011/11/25/2263045.html
http://golbz.com/post/14450725325/zend-studio-9
阅读全文
查询调用该函数父函数,这个实在是太有用了:
Ctrl+shift+M:模糊搜索方法名 【这块要注意配置,否则出现模糊匹配找不到的问题:通过Ctrl+shift+M找开小窗后左上角:select working set,新建立一个自己的PHP项目的工作集并命名,后在选中checkradio里的所选工作集,并在下面的checkbox里选当前想要查找的项目集合,可以多选,也可当选,最好是当前自己项目的一个集合即可,这样查找不会出现多个相同的函数名给匹配上了。】
ctrl+shift+G //本人在zend for eclipse9.0.2里测试通过。
选中你所要查看的方法名,ctrl+shift+G就可以查看所有调用过该方法的地方了。在Search视图里面可以查看得到
这个样子是可以的,你也可以按Ctrl+H全文检索一下
CTRL+HOME 或 CTRL+END | 光标移到文件头或到文件
Ctrl+H(Ctrl+Shift+h) 在整个项目中来查找某一个方法名,或者是其它相关的文件名。
Ctrl+Shift+H:类名或相关的文件名,新版本的zend studio for eclipse有类型层次结构显示。
Ctrl+Shift+R:查找相关的文件名称。
Ctrl+E:在打开的文件里查找某个PHP的文件,可以用星号匹配。
Ctrll+Shift+E: 显示所有打开文件,可以直接双击相当于Ctrl+E,如单击其中一个文件后可以选其它编辑器。
Ctrl+T 快速显示当前类的继承结构
Ctrl+Shift+T 输入部分以查找当前项目的类并跳转到文件中去
==================================================================
F3 快速跳转到当前所指的函数,常量,方法,类的定义处,相当常用。当然还可以用Ctrl+鼠标左键
Ctrl+Shift+G 查找某个函数、方法、常量等在哪些地方被调用了,刚好和F3相反。
Ctrl+Shift+M 查找项目进而的函数,这儿要使用*号匹配下,再就是如果是当前项目中找不到(其实有的),选好项目名后要多用这个去全,有这个Deselect Working Set项目:点那个删除是表示在所有的项目上搜索,这肯定能匹配到的,呵呵。(感觉这块Zend做得不是太好。)
Ctrl+H 全局查找,功能很丰富的,用的比较多
Ctrl+Shift+T 查找某个具体的类
Ctrl+Shift+R 查找资源(此快捷键利用率甚高,如果你没用到,可能你得考虑下,为什么其他程序员都用到频率很高,你没用到的原因)
Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)
shift+end 此行第一个到最后一个
shift+home 此行最后一个到第一个
Ctrl+home 文件头
Ctrl+end 文件尾
Ctrl+Q 定位到最后编辑的地方(我的语录:这个定位的不是当前文本的,也是一个全局的,要留意)
Ctrl+Alt+H 在页面函数中点右键出来的菜单中》open Call hierarchy (注:Ctrl+Shift+G 是两回事)
具体中文名是:Open all Hierarchy 主要功能是 显示一个方法的调用层次(被哪些方法调,调了哪些方法),特殊:
Ko::$config->attach(new Config_File);
这句话有可能是把配置文件的值传成对象放到ko这个类里面的方法中.
是这样搜索的,这个attach通过alt+ctrl+H只是一个当前的出来,其它文件没出来所以说兄弟你的解释是对的:
这句话有可能是把配置文件的值传成对象放到ko这个类里面的方法中.是这样搜索的。(在array_unshift执行Ctrl+Alt+H是能出来所有文件的,但是上面这个函数就只出来 一个,实际上有多个函数都调用了attach这个函数的一个简单研究。)
==================================================================
安装Aptana3中高亮显示相同变量(实践OK)
Window -> preferences -> Aptana Studio -> Editors -> PHP
选中 Mark occurrences with background color 其中选项 Global variables 就是高亮显示相同变量
==================================================================
只记得部分文件,打开的快捷方法:
如果文件数量过多,你只记得文件名中的几个字母,可以通过Ctrl+Shift+R或者Ctrl+T打开资源搜索平台查找即可
==================================================================
Aptana zend 都支持:
Ctrl+H全文检索
==================================================================
Shift+Enter 在当前行的下一行插入空行
Ctrl+Q 定位到最后编辑的地方
Ctrl+M 最大化当前的Edit或View (再按则反之)
Ctrl+O 快速显示 OutLine
Ctrl+T 快速显示当前类的继承结构 //有待验证
==================================================================
http://pangbu.com/jquery-for-aptana3/
http://www.cnblogs.com/therock/articles/2164031.html
http://zyj.me/article/aptana3-with-jquery-support
安装jquery试试:
Aptana 3.x中开启jQuery支持
可以通过如下方式开启Aptana的jQuery支持:
Commands -> Bundle Development -> Install Bundle
选择jQuery,即可自动git
退出重启下Eclipse,搞定。
==================================================================
CTRL+SHIFT+L | 显示所有快捷键列表(个人称之为“新手键”)
也可以参考:http://www.cnblogs.com/mybest/archive/2011/11/25/2263045.html
http://golbz.com/post/14450725325/zend-studio-9
阅读全文
PHP hash漏洞,5.3.9已经证实有php执行漏洞,需要升级到5.3.10,打补丁没有此问题!
是由于PHP官方为解决多语言hash漏洞引入了新的机制产生的新的安全漏洞。安全部门监测到目前PHP 5.3.9被黑客发现存在严重的安全漏洞,远程攻击者可以直接利用此漏洞执行任意PHP代码,安全风险非常高。
http://sec.chinabyte.com/45/12257045.shtml
http://www.2cto.com/News/201202/118475.html
libpng "png_formatted_warning()"函数单字节溢出缓冲区漏洞:
近期服务器需要对这个libpng作出升级,一升级就是好几百台,上千台啊,这个漏洞和php版本从5.3.9到5.3.10来说都是近期暴出较大的漏洞。
发布日期:2012-02-02
更新日期:2012-02-03
受影响系统:
libpng libpng 1.5.7
libpng libpng 1.5.6
libpng libpng 1.5.5
libpng libpng 1.5
不受影响系统:
libpng libpng 1.5.8
描述:
BUGTRAQ ID: 51823
CVE ID: CVE-2011-3464
libpng是多种应用程序所使用的解析PNG图形格式的函数库。
libpng在png_formatted_warning()函数的实现上存在单字节溢出漏洞,远程攻击者可利用此漏洞导致使用受影响库的应用程序崩溃,执行任意代码。
<*来源:libpng
*>
建议:
厂商补丁:
libpng
------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://libpng.sourceforge.net/
来自:http://www.nsfocus.net/vulndb/18639
http://bug.zerobox.org/show-4874-1.html
是由于PHP官方为解决多语言hash漏洞引入了新的机制产生的新的安全漏洞。安全部门监测到目前PHP 5.3.9被黑客发现存在严重的安全漏洞,远程攻击者可以直接利用此漏洞执行任意PHP代码,安全风险非常高。
http://sec.chinabyte.com/45/12257045.shtml
http://www.2cto.com/News/201202/118475.html
libpng "png_formatted_warning()"函数单字节溢出缓冲区漏洞:
近期服务器需要对这个libpng作出升级,一升级就是好几百台,上千台啊,这个漏洞和php版本从5.3.9到5.3.10来说都是近期暴出较大的漏洞。
发布日期:2012-02-02
更新日期:2012-02-03
受影响系统:
libpng libpng 1.5.7
libpng libpng 1.5.6
libpng libpng 1.5.5
libpng libpng 1.5
不受影响系统:
libpng libpng 1.5.8
描述:
BUGTRAQ ID: 51823
CVE ID: CVE-2011-3464
libpng是多种应用程序所使用的解析PNG图形格式的函数库。
libpng在png_formatted_warning()函数的实现上存在单字节溢出漏洞,远程攻击者可利用此漏洞导致使用受影响库的应用程序崩溃,执行任意代码。
<*来源:libpng
*>
建议:
厂商补丁:
libpng
------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://libpng.sourceforge.net/
来自:http://www.nsfocus.net/vulndb/18639
http://bug.zerobox.org/show-4874-1.html
【本文主要介绍SVN的迁移方案,以及如何安装部署一台SVN服务器】
一、迁移方案
<<<近期发现svn放在机房里托管,速度上很难受到保证,经常遇到网络故障,导致在开发的时候很受影响。故决定将SVN迁移回本地机房里,然后通过建立VPN通过供外界使用,效果图如下>>>
工作机制:SVN Server配置于本地机房中(内网接入),外网接入时需要通过VPN通道。
备份机制:项目进行中时,定期备份SVN服务器的版本库(可采用脚本实现);结项后,手动check out版本库,进行整体备份。
优势:保证了SVN Server的安全性,稳定性。且当SVN Server出现宕机等异常时,可立即切至备份服务器继续工作。
劣势:当 VPN通道出现异常时,导致外网则无法接入SVN Server。
自动备份方案
采用rsync文件同步方式。将SVN版本库进行同步工作,rsync教程
二、安装配置SVN服务器
1.安装apr和apr-util
2.安装apache
3.安装subversion
注意:删除apr与apr-util。
/*将svnadmin放入$PATH环境变量里*/
/* 你可以用以下命令检验subversion是否安装成功 */
svnadmin –version
4.subversion环境的搭建
使用与Apache模块的方式运行
首先,把我们需要的SVN模块加载上,修改Apache的配置文件httpd.conf:
#然后配置仓库:
建立SVN版本库
建立svnaccessfile
然后,配置验证方式:
这里使用旦Apache的验证方式:
添加用户和密码:
注意:-bc 第一次创建需要c参数,接下来就只要b这个参数即可
下面,就要写这个svnaccessfile文件说明
将这个设置完成后。重启Apache
就可以通过
http://localhost/svn/test
这个URL来访问仓库了
导入导出SVN版本库可以使用SVN客户端工具实现,很简单,这里就不详细说明了,客户端工具为:TortoiseSVN,图形是只乌龟
三、遇到的问题
问题1.将线上的SVN环境拷贝过来,配置好后,通过URL访问提示如下信息:Could not open the requested SVN filesystem
查看日志文件,发现:Expected FS format ’2′; found format ’3′
问题产生原因:
服务程序是1.4.x版本的svnserve或mod_dav_svn,版本库通过1.5.x版本的svnadmin或TortoiseSVN创建时,会产生这个问题
解决方法:
使用1.5以上的SVN来作为服务
或使用1.4系列的svnadmin或TortoiseSVN来创建版本库
或使用1.4.x系列创建新版本库,通过1.5.x版本备份并恢复原版本库到新版本库
问题2.
问题产生的原因:
SVN 依赖的APR版本要正确。如果Apache为2.0.x,对应的APR版本应为0.9.x;Apache为2.2.x,对应的APR版本应为1.2.x。 由于subversion-deps包里的APR是0.9.x的,因此编译svn时要删除从deps里解压出来的apr, apr-util,改而使用apache 2.2里提供的。(这里指定为开始安装的apr目录),这一点知识非常重要。
解决方法:
下载apr-1.2.12.tar.gz与apr-util-1.2.12.tar.gz。
编译安装这两个包,然后重新安装下apache与subversion即可。
问题3.
/usr/bin/ld: cannot find -lexpatcollect2: ld returned 1 exit status
make[1]: *** [test/serf_get] 错误 1
make[1]: Leaving directory `/root/build/subversion-1.6.11/serf
‘make: *** [external-all] 错误 1
解决方法:
来源:http://www.jiunile.com/svn%E8%BF%81%E7%A7%BB%E3%80%81%E5%AE%89%E8%A3%85%E3%80%81%E9%85%8D%E7%BD%AE%E7%AC%94%E8%AE%B0.html
罗春晖兄弟的一篇文章,觉得较有价值,短小很有用,于是摘抄了,Url:http://www.luochunhui.com/svn%E6%BA%90%E8%BF%81%E7%A7%BB/
SVN源迁移 内容如下:
在迁移服务器过程中,经常会用到SVN的源迁移。
一个简单的方式,是直接打包源目录,并在新服务器上解压。 但这种情况,需要保证两个源的SVN版本一致,在打包过程中,也不得有svn checkin,否则可能会导致源损毁或不可预期的后果。
一个安全的方式, 是使用svnadmin工具
旧服务器:
svnadmin dump /home/svn/projectrepos > ~/projectrepos.svn.dump
scp -C ~/projectrepos.svn.dump username@new.server.ip:/home/giko
新服务器:
cd /home/giko
svnadmin create /home/svn/projectrepos
svnadmin load /home/svn/projectrepos < projectrepos.svn.dump
一、迁移方案
<<<近期发现svn放在机房里托管,速度上很难受到保证,经常遇到网络故障,导致在开发的时候很受影响。故决定将SVN迁移回本地机房里,然后通过建立VPN通过供外界使用,效果图如下>>>
工作机制:SVN Server配置于本地机房中(内网接入),外网接入时需要通过VPN通道。
备份机制:项目进行中时,定期备份SVN服务器的版本库(可采用脚本实现);结项后,手动check out版本库,进行整体备份。
优势:保证了SVN Server的安全性,稳定性。且当SVN Server出现宕机等异常时,可立即切至备份服务器继续工作。
劣势:当 VPN通道出现异常时,导致外网则无法接入SVN Server。
自动备份方案
采用rsync文件同步方式。将SVN版本库进行同步工作,rsync教程
二、安装配置SVN服务器
1.安装apr和apr-util
2.安装apache
3.安装subversion
注意:删除apr与apr-util。
/*将svnadmin放入$PATH环境变量里*/
/* 你可以用以下命令检验subversion是否安装成功 */
svnadmin –version
4.subversion环境的搭建
使用与Apache模块的方式运行
首先,把我们需要的SVN模块加载上,修改Apache的配置文件httpd.conf:
#然后配置仓库:
建立SVN版本库
建立svnaccessfile
然后,配置验证方式:
这里使用旦Apache的验证方式:
添加用户和密码:
注意:-bc 第一次创建需要c参数,接下来就只要b这个参数即可
下面,就要写这个svnaccessfile文件说明
将这个设置完成后。重启Apache
就可以通过
http://localhost/svn/test
这个URL来访问仓库了
导入导出SVN版本库可以使用SVN客户端工具实现,很简单,这里就不详细说明了,客户端工具为:TortoiseSVN,图形是只乌龟
三、遇到的问题
问题1.将线上的SVN环境拷贝过来,配置好后,通过URL访问提示如下信息:Could not open the requested SVN filesystem
查看日志文件,发现:Expected FS format ’2′; found format ’3′
问题产生原因:
服务程序是1.4.x版本的svnserve或mod_dav_svn,版本库通过1.5.x版本的svnadmin或TortoiseSVN创建时,会产生这个问题
解决方法:
使用1.5以上的SVN来作为服务
或使用1.4系列的svnadmin或TortoiseSVN来创建版本库
或使用1.4.x系列创建新版本库,通过1.5.x版本备份并恢复原版本库到新版本库
问题2.
问题产生的原因:
SVN 依赖的APR版本要正确。如果Apache为2.0.x,对应的APR版本应为0.9.x;Apache为2.2.x,对应的APR版本应为1.2.x。 由于subversion-deps包里的APR是0.9.x的,因此编译svn时要删除从deps里解压出来的apr, apr-util,改而使用apache 2.2里提供的。(这里指定为开始安装的apr目录),这一点知识非常重要。
解决方法:
下载apr-1.2.12.tar.gz与apr-util-1.2.12.tar.gz。
编译安装这两个包,然后重新安装下apache与subversion即可。
问题3.
/usr/bin/ld: cannot find -lexpatcollect2: ld returned 1 exit status
make[1]: *** [test/serf_get] 错误 1
make[1]: Leaving directory `/root/build/subversion-1.6.11/serf
‘make: *** [external-all] 错误 1
解决方法:
来源:http://www.jiunile.com/svn%E8%BF%81%E7%A7%BB%E3%80%81%E5%AE%89%E8%A3%85%E3%80%81%E9%85%8D%E7%BD%AE%E7%AC%94%E8%AE%B0.html
罗春晖兄弟的一篇文章,觉得较有价值,短小很有用,于是摘抄了,Url:http://www.luochunhui.com/svn%E6%BA%90%E8%BF%81%E7%A7%BB/
SVN源迁移 内容如下:
在迁移服务器过程中,经常会用到SVN的源迁移。
一个简单的方式,是直接打包源目录,并在新服务器上解压。 但这种情况,需要保证两个源的SVN版本一致,在打包过程中,也不得有svn checkin,否则可能会导致源损毁或不可预期的后果。
一个安全的方式, 是使用svnadmin工具
旧服务器:
svnadmin dump /home/svn/projectrepos > ~/projectrepos.svn.dump
scp -C ~/projectrepos.svn.dump username@new.server.ip:/home/giko
新服务器:
cd /home/giko
svnadmin create /home/svn/projectrepos
svnadmin load /home/svn/projectrepos < projectrepos.svn.dump
实现过程:阅读全文
具体操作:
编译eAccelerator
/usr/local/php5/bin/phpize
./configure --enable-eaccelerator=shared --with-eaccelerator-info --with-php-config=/usr/local/php5/bin/php-config
make && make install
如果您想要使用控制面板,您需要以下面方式编译eAccelerator
–-with-eaccelerator-info 这是默认值。
当您以 -–with-eaccelerator-disassembler 方式编译 eAccelerator 时,您需要将 dasm.php 和 PHP_Highlight.php 文件放在与 control.php 文件同样的目录下。分解器(disassembler)需要将 PHP 编译为支持 tokenizer (–enable-tokenizer).
您可以在 dasm.php 文件的顶部设置访问分解器(disassembler)的用户名和密码.
修改php.ini可以参考:PHP 加速器eAccelerator 配置参数详解
注意点:
1)将control.php复制到你网站的目录下
2)并将 php.ini 或 eaccelerator.ini 中的 eaccelerator.allowed_admin_path 设置路径到此文件。如果您没有这样做,则您不能看到更多的信息,并且也不能控制 eAccelerator.
默认的用户名和密码是:admin/eAccelerator
修改密码:
查看源代码
打印帮助
vi control.php
$user = "admin";
$pw = "xupeng";
访问方式:http://jackxiang.com/control.php
来自:http://www.jiunile.com/eaccelerator-web%E7%95%8C%E9%9D%A2%E7%AE%A1%E7%90%86.html
编译eAccelerator
/usr/local/php5/bin/phpize
./configure --enable-eaccelerator=shared --with-eaccelerator-info --with-php-config=/usr/local/php5/bin/php-config
make && make install
如果您想要使用控制面板,您需要以下面方式编译eAccelerator
–-with-eaccelerator-info 这是默认值。
当您以 -–with-eaccelerator-disassembler 方式编译 eAccelerator 时,您需要将 dasm.php 和 PHP_Highlight.php 文件放在与 control.php 文件同样的目录下。分解器(disassembler)需要将 PHP 编译为支持 tokenizer (–enable-tokenizer).
您可以在 dasm.php 文件的顶部设置访问分解器(disassembler)的用户名和密码.
修改php.ini可以参考:PHP 加速器eAccelerator 配置参数详解
注意点:
1)将control.php复制到你网站的目录下
2)并将 php.ini 或 eaccelerator.ini 中的 eaccelerator.allowed_admin_path 设置路径到此文件。如果您没有这样做,则您不能看到更多的信息,并且也不能控制 eAccelerator.
默认的用户名和密码是:admin/eAccelerator
修改密码:
查看源代码
打印帮助
vi control.php
$user = "admin";
$pw = "xupeng";
访问方式:http://jackxiang.com/control.php
来自:http://www.jiunile.com/eaccelerator-web%E7%95%8C%E9%9D%A2%E7%AE%A1%E7%90%86.html
centos禁止与开启ping设置
禁止ping:
代码如下
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
允许ping:
代码如下
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
防火墙:/etc/sysconfig/iptables添加
-A INPUT -p icmp -m icmp --icmp-type echo-request -m state --state NEW -j ACCEPT
/etc/init.d/iptables restart
iptables -L -nv
7 588 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW icmp type 8
来源:http://www.3lian.com/edu/2013/12-26/118865.html
根据业务的特殊需求,有些服务器可能禁止外部ping请求。可以使用以下命令来快速实现:
1.关闭ping请求
1 sysctl -w net.ipv4.icmp_echo_ignore_all=1
2 sysctl -p
2.开启ping请求
1 sysctl -w net.ipv4.icmp_echo_ignore_all=0
2 sysctl -p
禁止ping:
代码如下
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
允许ping:
代码如下
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
防火墙:/etc/sysconfig/iptables添加
-A INPUT -p icmp -m icmp --icmp-type echo-request -m state --state NEW -j ACCEPT
/etc/init.d/iptables restart
iptables -L -nv
7 588 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW icmp type 8
来源:http://www.3lian.com/edu/2013/12-26/118865.html
根据业务的特殊需求,有些服务器可能禁止外部ping请求。可以使用以下命令来快速实现:
1.关闭ping请求
1 sysctl -w net.ipv4.icmp_echo_ignore_all=1
2 sysctl -p
2.开启ping请求
1 sysctl -w net.ipv4.icmp_echo_ignore_all=0
2 sysctl -p
背景:有些时候在下载时有很多相同的项,如果wget不加-c会出现多次下载,文件名后面会加上.1后缀,鉴于此,最好还是用那个wget -c,一是这个不会重命名好处(断点续传在下载时wget会判断是否已经有该文件有了不会再下载,也就没有重复文件。),二是这个网络不好时(指windows和linux下的secureCRT出现闪断的情况,用shell脚本跑批量wget可能就会出现再次运行时会重新下载,有了-c就好了,重新下载时会接着下,同样是判断本地文件是否存在。),这个东西这点作用还是挺好的。三是下载时磁盘满了,如果不是断点下载就完了,如果是经实践wget -c 这种,可以把文件挪动到别的盘,再cd 到新的盘符路径,在上面重新运行一样的命令,此时它又开始从断开的点开始下载了。还有时是VPN下面下载,VPN断开了,怎么办?还是一样,它会一直卡住,而VPN网好后,它又开始自动继续下载了,是不是很好,这是SSH下地sz 和 sftp> get都无法比拟的,只需要开通一个Nginx服务,下载时所下载目录 权限不够可将nginx.conf里的 www用户改为root即可,user root; ,打成一个大包就可下载。
未安装wget,联网执行以下命令即可,来自:https://blog.csdn.net/z_dianjun/article/details/50819489
yum install wget
1、断点续传,只需要添加 -c 参数即可
wget -c http://mirrors.163.com/ubuntu-releases/9.10/ubuntu-9.10-desktop-amd64.iso
2、限速下载,只需要添加 -limit-rate=300k 合理参数即可
wget -c --limit-rate=300k http://mirrors.163.com/ubuntu-releases/9.10/ubuntu-9.10-desktop-amd64.iso
3、Nginx日志,下载时所下载目录 权限不够可将nginx.conf里的 www用户改为root即可,user root;
==> access.log <==
"10.6*.12.**" "10.71.***.108" "-" "[29/Mar/2018:14:59:46 +0800]" "GET /180329downloadPKG1148.bak.tar.gz HTTP/1.0" "200" "10066122" "-" "Wget/1.11.4" "8.155" "-"
"10.6*.12.**" "10.71.***.108" "-" "[29/Mar/2018:15:12:03 +0800]" "GET /180329downloadPKG1148.bak.tar.gz HTTP/1.0" "206" "626704840" "-" "Wget/1.11.4" "735.603" "-"
"10.6*.12.**" "10.71.***.108" "-" "[29/Mar/2018:15:23:36 +0800]" "GET /180329downloadPKG1148.bak.tar.gz HTTP/1.0" "206" "909031010" "-" "Wget/1.11.4" "684.815" "-"
实践如下:
一:scp断点续传 [暂时没有使用过]
scp一旦出错中断就只能重新开始,不过可以利用rsync实现scp的断点续传
1、在~/.bashrc中加入一个alias:
$vim ~/.bashrc
alias rscp=’rsync -v -P -e ssh’
2、重新载入.bashrc配置
$source ~/.bashrc
二:wget自动断点续传的方法
有时候我们使用wget下载东西被迫打断, 比如网络故障, 终端意外断开, 忘了加"&"放入该台等等.
沉稳的人或许会想到重新开启wget, 并使用 -c断点续传, 可是有时候, 因为N个g的东西突然断了, 一冲动就晕了, 就纠结了, 可能就会就重新跑wget了, 甚至截止到本文还有人不知道-c.
那么为了杯具不再发生, 我们可以让wget每次运行的时候自动加上 -c参数, 那样就万事大吉了嘛. 方法如下:
在家目录下新建文件".wgetrc", 内容如下:
continue = on
写入wget.sh后,可以这样同时下载多个文件:
如果想不用IP,但有两个相同的域名,则需要配置/etc/hosts加和IP对应的域名,再Wget即可。
保存退出, 以后再使用wget就会自动断点续传了, Y, 演示如下Url:http://windphp.com/unix/43.html
scp 是通过ssh协议传输数据,如果是想传输一个很大的数据,这几天我就遇到过,一个tar包,400G左右,通过scp拷贝时,有可能遇到服务器断电什么的悲剧问题,那么类似scp拷贝的另一个命令 rsync就可以实现意外中断后,下次继续传,命令如下:
rsync -P --rsh=ssh home.tar 192.168.0.34:/home/home.tar
-P: 是包含了 “–partial –progress”, 部分传送和显示进度
-rsh=ssh 表示使用ssh协议传送数据
如果不想每次都使用 rsync -P rsh=ssh 之类的,可以写成alias scpr="rsync -P --rsh=ssh"
那么下次就可以直接使用 scpr home.tar 192.168.0.34:/home/home.tar 来拷贝数据了。
在传输过程中,目标文件会以.home.tar.xxxx文件也隐藏,可以用la -a来显示出来。如果scpr中断了,那么该文件会变成用户指定的目标文件"home.tar",下次传的时候又会改成.home.tar.xxxx文件。
三:wget无论如何下载新的参数N,我看有运维人员加上N,查了下帮助:
-N, --timestamping don't re-retrieve files unless newer than
如: wget -N www.baidu.com/config.php
四:wget查看http的返回头参数 -S:
wget -S www.baidu.com
--2013-12-12 17:33:21-- http://www.baidu.com/
Resolving www.baidu.com... 61.135.169.125, 61.135.169.105
Connecting to www.baidu.com|61.135.169.125|:80... connected.
HTTP request sent, awaiting response...
HTTP/1.1 200 OK
Date: Thu, 12 Dec 2013 09:33:21 GMT
Server: BWS/1.0
Content-Length: 16414
Content-Type: text/html;charset=utf-8
Cache-Control: private
BDPAGETYPE: 1
BDUSERID: 0
BDQID: 0xa8ab100800026240
Set-Cookie: BDSVRTM=23; path=/
Set-Cookie: H_PS_PSSID=1450_4405_4261_4450; path=/; domain=.baidu.com
Set-Cookie: BAIDUID=17D8999849AA8E6EDBDA95A846D765FB:FG=1; expires=Thu, 12-Dec-43 09:33:21 GMT; path=/; domain=.baidu.com
Expires: Thu, 12 Dec 2013 09:33:21 GMT
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Connection: Close
Length: 16414 (16K) [text/html]
Saving to: `index.html.1'
local.
未安装wget,联网执行以下命令即可,来自:https://blog.csdn.net/z_dianjun/article/details/50819489
yum install wget
1、断点续传,只需要添加 -c 参数即可
wget -c http://mirrors.163.com/ubuntu-releases/9.10/ubuntu-9.10-desktop-amd64.iso
2、限速下载,只需要添加 -limit-rate=300k 合理参数即可
wget -c --limit-rate=300k http://mirrors.163.com/ubuntu-releases/9.10/ubuntu-9.10-desktop-amd64.iso
3、Nginx日志,下载时所下载目录 权限不够可将nginx.conf里的 www用户改为root即可,user root;
==> access.log <==
"10.6*.12.**" "10.71.***.108" "-" "[29/Mar/2018:14:59:46 +0800]" "GET /180329downloadPKG1148.bak.tar.gz HTTP/1.0" "200" "10066122" "-" "Wget/1.11.4" "8.155" "-"
"10.6*.12.**" "10.71.***.108" "-" "[29/Mar/2018:15:12:03 +0800]" "GET /180329downloadPKG1148.bak.tar.gz HTTP/1.0" "206" "626704840" "-" "Wget/1.11.4" "735.603" "-"
"10.6*.12.**" "10.71.***.108" "-" "[29/Mar/2018:15:23:36 +0800]" "GET /180329downloadPKG1148.bak.tar.gz HTTP/1.0" "206" "909031010" "-" "Wget/1.11.4" "684.815" "-"
实践如下:
一:scp断点续传 [暂时没有使用过]
scp一旦出错中断就只能重新开始,不过可以利用rsync实现scp的断点续传
1、在~/.bashrc中加入一个alias:
$vim ~/.bashrc
alias rscp=’rsync -v -P -e ssh’
2、重新载入.bashrc配置
$source ~/.bashrc
二:wget自动断点续传的方法
有时候我们使用wget下载东西被迫打断, 比如网络故障, 终端意外断开, 忘了加"&"放入该台等等.
沉稳的人或许会想到重新开启wget, 并使用 -c断点续传, 可是有时候, 因为N个g的东西突然断了, 一冲动就晕了, 就纠结了, 可能就会就重新跑wget了, 甚至截止到本文还有人不知道-c.
那么为了杯具不再发生, 我们可以让wget每次运行的时候自动加上 -c参数, 那样就万事大吉了嘛. 方法如下:
在家目录下新建文件".wgetrc", 内容如下:
continue = on
写入wget.sh后,可以这样同时下载多个文件:
如果想不用IP,但有两个相同的域名,则需要配置/etc/hosts加和IP对应的域名,再Wget即可。
保存退出, 以后再使用wget就会自动断点续传了, Y, 演示如下Url:http://windphp.com/unix/43.html
scp 是通过ssh协议传输数据,如果是想传输一个很大的数据,这几天我就遇到过,一个tar包,400G左右,通过scp拷贝时,有可能遇到服务器断电什么的悲剧问题,那么类似scp拷贝的另一个命令 rsync就可以实现意外中断后,下次继续传,命令如下:
rsync -P --rsh=ssh home.tar 192.168.0.34:/home/home.tar
-P: 是包含了 “–partial –progress”, 部分传送和显示进度
-rsh=ssh 表示使用ssh协议传送数据
如果不想每次都使用 rsync -P rsh=ssh 之类的,可以写成alias scpr="rsync -P --rsh=ssh"
那么下次就可以直接使用 scpr home.tar 192.168.0.34:/home/home.tar 来拷贝数据了。
在传输过程中,目标文件会以.home.tar.xxxx文件也隐藏,可以用la -a来显示出来。如果scpr中断了,那么该文件会变成用户指定的目标文件"home.tar",下次传的时候又会改成.home.tar.xxxx文件。
三:wget无论如何下载新的参数N,我看有运维人员加上N,查了下帮助:
-N, --timestamping don't re-retrieve files unless newer than
如: wget -N www.baidu.com/config.php
四:wget查看http的返回头参数 -S:
wget -S www.baidu.com
--2013-12-12 17:33:21-- http://www.baidu.com/
Resolving www.baidu.com... 61.135.169.125, 61.135.169.105
Connecting to www.baidu.com|61.135.169.125|:80... connected.
HTTP request sent, awaiting response...
HTTP/1.1 200 OK
Date: Thu, 12 Dec 2013 09:33:21 GMT
Server: BWS/1.0
Content-Length: 16414
Content-Type: text/html;charset=utf-8
Cache-Control: private
BDPAGETYPE: 1
BDUSERID: 0
BDQID: 0xa8ab100800026240
Set-Cookie: BDSVRTM=23; path=/
Set-Cookie: H_PS_PSSID=1450_4405_4261_4450; path=/; domain=.baidu.com
Set-Cookie: BAIDUID=17D8999849AA8E6EDBDA95A846D765FB:FG=1; expires=Thu, 12-Dec-43 09:33:21 GMT; path=/; domain=.baidu.com
Expires: Thu, 12 Dec 2013 09:33:21 GMT
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Connection: Close
Length: 16414 (16K) [text/html]
Saving to: `index.html.1'
local.
[实践Ok]必须记录备案之Linux下VMware虚拟机NAT上网实现
Unix/LinuxC技术 jackxiang 2012-2-11 23:47
我想最多的可能是当vmware在重新安后因系统重装,导致在共享上网时出现原来的Linux上的IP和现在共享分配的IP不一样,导致上不了网的问题,于是否,你可能需要修改Vmware里的配置才行,于是得查看这个Url: http://jackxiang.com/post/5743/
vmware下redhat linux 9使用NAT共享主机IP上网 收藏
VMware提供:桥接,Host Only和NAT三种连网方式. 我个人认为NAT方式较简单,用它来共享主机的IP,适合那种每台主机只允许一个IP的情况。具体设置如下:
1、VMware网络连接选择的是NAT方式。
2、VMware网络设置里的NAT项中查看VMnet8,NAT的网关设置为192.168.X.2。
3、在windows中,查看所有的网络连接,你应该发现除了原有的网卡之外,又多了Vmnet1和Vmnet8。vmnet1是hostonly的接口,而Vmnet8是就是我们要使用的NAT的网络接口。
4、在windows主机上用ipconfig查看VMnet8的IP地址,一般是192.168.X.1。此时VMnet8的设置应该是自动获取IP,现在改成静态IP,并把此IP直接填入VMnet8里,不设网关。
6、在linux下把网卡IP设置成和VMnet8一个网段的IP(192.168.X.Z/255.255.255.0)
7、在linux下网关设置成刚才查看的那个IP192.168.X.2即可。
8、在linux下DNS和windows主机的一样。
9、在linux下运行命令service network restart重新启动linux的网络服务。
10、在linux下ping 192.168.x.1,在windows下ping 192.168.x.z 成功后证明主机和虚拟机已经可以互相访问了,现在也可以实现虚拟机共享主机ip上网了。
现在我们做一下假定,宿主机上有三块网卡,rl0网卡(10.0.0.5)接入真实的网络10.0.0.0/24(取个名叫rnet0子网)、vmnet1网卡(10.0.1.1)接入vmnet1子网(host-only)(10.0.1.0/24)、vmnet8网卡(10.0.8.1)接入vmnet8子网(nat)(10.0.8.0/24)。
宿主机连入rnet0、vmnet1、vmnet8三个子网,所以它和三个子网都是通的。
rnet0和vmnet1分属两个不同网段的子网,在不做其它设置的情况下它们是不能互访的;宿主机属于vmnet1子网的一部分,它是可以访问vmnet1子网的。这就是vmnet1子网为什么被叫做host-only。
rnet0和vmnet8也分属两个不同网段的子网,但vmnet8子网默认被配置了一台nat服务器(ip为10.0.8.2),这时vmnet8子网中的其它虚拟机只要将自己的网关设为那台nat服务器的ip(10.0.8.2)就可以访问rnet0子网。我的疑问在于nat为什么被配置在10.0.8.2而不是10.0.8.1,vmnet8子网中的机器将自己的网关设为10.0.8.2而不是10.0.8.1,这样的情况下是怎么和rnet0子网连通的,我想知道这个拓扑是怎样的?这个nat又是如何配置的?
特别注意:
但是如果因优化软件把Vmware的后台启动服务给关闭了,也是不行的,服务名如下:
VMware Agent Service
VMware Authorization Service
VMware DHCP Service
VMware NAT Service
阅读全文
vmware下redhat linux 9使用NAT共享主机IP上网 收藏
VMware提供:桥接,Host Only和NAT三种连网方式. 我个人认为NAT方式较简单,用它来共享主机的IP,适合那种每台主机只允许一个IP的情况。具体设置如下:
1、VMware网络连接选择的是NAT方式。
2、VMware网络设置里的NAT项中查看VMnet8,NAT的网关设置为192.168.X.2。
3、在windows中,查看所有的网络连接,你应该发现除了原有的网卡之外,又多了Vmnet1和Vmnet8。vmnet1是hostonly的接口,而Vmnet8是就是我们要使用的NAT的网络接口。
4、在windows主机上用ipconfig查看VMnet8的IP地址,一般是192.168.X.1。此时VMnet8的设置应该是自动获取IP,现在改成静态IP,并把此IP直接填入VMnet8里,不设网关。
6、在linux下把网卡IP设置成和VMnet8一个网段的IP(192.168.X.Z/255.255.255.0)
7、在linux下网关设置成刚才查看的那个IP192.168.X.2即可。
8、在linux下DNS和windows主机的一样。
9、在linux下运行命令service network restart重新启动linux的网络服务。
10、在linux下ping 192.168.x.1,在windows下ping 192.168.x.z 成功后证明主机和虚拟机已经可以互相访问了,现在也可以实现虚拟机共享主机ip上网了。
现在我们做一下假定,宿主机上有三块网卡,rl0网卡(10.0.0.5)接入真实的网络10.0.0.0/24(取个名叫rnet0子网)、vmnet1网卡(10.0.1.1)接入vmnet1子网(host-only)(10.0.1.0/24)、vmnet8网卡(10.0.8.1)接入vmnet8子网(nat)(10.0.8.0/24)。
宿主机连入rnet0、vmnet1、vmnet8三个子网,所以它和三个子网都是通的。
rnet0和vmnet1分属两个不同网段的子网,在不做其它设置的情况下它们是不能互访的;宿主机属于vmnet1子网的一部分,它是可以访问vmnet1子网的。这就是vmnet1子网为什么被叫做host-only。
rnet0和vmnet8也分属两个不同网段的子网,但vmnet8子网默认被配置了一台nat服务器(ip为10.0.8.2),这时vmnet8子网中的其它虚拟机只要将自己的网关设为那台nat服务器的ip(10.0.8.2)就可以访问rnet0子网。我的疑问在于nat为什么被配置在10.0.8.2而不是10.0.8.1,vmnet8子网中的机器将自己的网关设为10.0.8.2而不是10.0.8.1,这样的情况下是怎么和rnet0子网连通的,我想知道这个拓扑是怎样的?这个nat又是如何配置的?
特别注意:
但是如果因优化软件把Vmware的后台启动服务给关闭了,也是不行的,服务名如下:
VMware Agent Service
VMware Authorization Service
VMware DHCP Service
VMware NAT Service
阅读全文
1. Linux下,如何看每个CPU的使用率:
#top -d 1
之后按下数字1. 则显示多个CPU (top后按1也一样)
Cpu0 : 1.0%us, 3.0%sy, 0.0%ni, 96.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
2. 在Linux下,如何确认是多核或多CPU:
#cat /proc/cpuinfo
如果有多个类似以下的项目,则为多核或多CPU:
processor : 0
......
processor : 1
3. 如何察看某个进程在哪个CPU上运行:
#top -d 1
之后按下f.进入top Current Fields设置页面:
选中:j: P = Last used cpu (SMP)
则多了一项:P 显示此进程使用哪个CPU。
Sam经过试验发现:同一个进程,在不同时刻,会使用不同CPU Core.这应该是Linux Kernel SMP处理的。
4. 配置Linux Kernel使之支持多Core:
内核配置期间必须启用 CONFIG_SMP 选项,以使内核感知 SMP。
Processor type and features ---> Symmetric multi-processing support
察看当前Linux Kernel是否支持(或者使用)SMP
#uname -a
5. Kernel 2.6的SMP负载平衡:
在 SMP 系统中创建任务时,这些任务都被放到一个给定的 CPU 运行队列中。通常来说,我们无法知道一个任务何时是短期存在的,何时需要长期运行。因此,最初任务到 CPU 的分配可能并不理想。
为了在 CPU 之间维护任务负载的均衡,任务可以重新进行分发:将任务从负载重的 CPU 上移动到负载轻的 CPU 上。Linux 2.6 版本的调度器使用负载均衡(load balancing) 提供了这种功能。每隔 200ms,处理器都会检查 CPU 的负载是否不均衡;如果不均衡,处理器就会在 CPU 之间进行一次任务均衡操作。
这个过程的一点负面影响是新 CPU 的缓存对于迁移过来的任务来说是冷的(需要将数据读入缓存中)。
记住 CPU 缓存是一个本地(片上)内存,提供了比系统内存更快的访问能力。如果一个任务是在某个 CPU 上执行的,与这个任务有关的数据都会被放到这个 CPU 的本地缓存中,这就称为热的。如果对于某个任务来说,CPU 的本地缓存中没有任何数据,那么这个缓存就称为冷的。
不幸的是,保持 CPU 繁忙会出现 CPU 缓存对于迁移过来的任务为冷的情况。
6. 应用程序如何利用多Core :
开发人员可将可并行的代码写入线程,而这些线程会被SMP操作系统安排并发运行。
另外,Sam设想,对于必须顺序执行的代码。可以将其分为多个节点,每个节点为一个thread.并在节点间放置channel.节点间形如流水线。这样也可以大大增强CPU利用率。
例如:
游戏可以分为3个节点。
1.接受外部信息,声称数据 (1ms)
2.利用数据,物理运算(3ms)
3.将物理运算的结果展示出来。(2ms)
如果线性编程,整个流程需要6ms.
但如果将每个节点作为一个thread。但thread间又同步执行。则整个流程只需要3ms.
来自:
http://blog.csdn.net/zhangxinrun/article/details/6708399
#top -d 1
之后按下数字1. 则显示多个CPU (top后按1也一样)
Cpu0 : 1.0%us, 3.0%sy, 0.0%ni, 96.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
2. 在Linux下,如何确认是多核或多CPU:
#cat /proc/cpuinfo
如果有多个类似以下的项目,则为多核或多CPU:
processor : 0
......
processor : 1
3. 如何察看某个进程在哪个CPU上运行:
#top -d 1
之后按下f.进入top Current Fields设置页面:
选中:j: P = Last used cpu (SMP)
则多了一项:P 显示此进程使用哪个CPU。
Sam经过试验发现:同一个进程,在不同时刻,会使用不同CPU Core.这应该是Linux Kernel SMP处理的。
4. 配置Linux Kernel使之支持多Core:
内核配置期间必须启用 CONFIG_SMP 选项,以使内核感知 SMP。
Processor type and features ---> Symmetric multi-processing support
察看当前Linux Kernel是否支持(或者使用)SMP
#uname -a
5. Kernel 2.6的SMP负载平衡:
在 SMP 系统中创建任务时,这些任务都被放到一个给定的 CPU 运行队列中。通常来说,我们无法知道一个任务何时是短期存在的,何时需要长期运行。因此,最初任务到 CPU 的分配可能并不理想。
为了在 CPU 之间维护任务负载的均衡,任务可以重新进行分发:将任务从负载重的 CPU 上移动到负载轻的 CPU 上。Linux 2.6 版本的调度器使用负载均衡(load balancing) 提供了这种功能。每隔 200ms,处理器都会检查 CPU 的负载是否不均衡;如果不均衡,处理器就会在 CPU 之间进行一次任务均衡操作。
这个过程的一点负面影响是新 CPU 的缓存对于迁移过来的任务来说是冷的(需要将数据读入缓存中)。
记住 CPU 缓存是一个本地(片上)内存,提供了比系统内存更快的访问能力。如果一个任务是在某个 CPU 上执行的,与这个任务有关的数据都会被放到这个 CPU 的本地缓存中,这就称为热的。如果对于某个任务来说,CPU 的本地缓存中没有任何数据,那么这个缓存就称为冷的。
不幸的是,保持 CPU 繁忙会出现 CPU 缓存对于迁移过来的任务为冷的情况。
6. 应用程序如何利用多Core :
开发人员可将可并行的代码写入线程,而这些线程会被SMP操作系统安排并发运行。
另外,Sam设想,对于必须顺序执行的代码。可以将其分为多个节点,每个节点为一个thread.并在节点间放置channel.节点间形如流水线。这样也可以大大增强CPU利用率。
例如:
游戏可以分为3个节点。
1.接受外部信息,声称数据 (1ms)
2.利用数据,物理运算(3ms)
3.将物理运算的结果展示出来。(2ms)
如果线性编程,整个流程需要6ms.
但如果将每个节点作为一个thread。但thread间又同步执行。则整个流程只需要3ms.
来自:
http://blog.csdn.net/zhangxinrun/article/details/6708399
转移了blog到bobo的主机上之后。
搜索功能一直无法使用。
每次搜索总是提示,搜索程序发生了错误。
今天终于解决了。
原来是权限问题!
我的主机是Linux的!
attachment 上传目录 777 之外
temp 目录也要 777 否则无法搜索!
这里做个笔记,希望帮助其他朋友!
以上是linux主机解决办法 同理temp作为session临时写入目录没有设定或者无权限 在win主机下 直接登录bo-blog后台 杂项设置 临时文件夹 写上temp 确定即可
临时文件夹总是设置不成功,设置好了回到该页又是空的,清空临时文件夹时说这样的:
打开以下目录失败: / 。这可能是以下原因造成的:
这个目录不存在;
您没有打开这个目录的权限;
您的服务器禁止了 opendir 函数,在这种情况下,请与您的服务商联系。
返回前页
搜索功能一直无法使用。
每次搜索总是提示,搜索程序发生了错误。
今天终于解决了。
原来是权限问题!
我的主机是Linux的!
attachment 上传目录 777 之外
temp 目录也要 777 否则无法搜索!
这里做个笔记,希望帮助其他朋友!
以上是linux主机解决办法 同理temp作为session临时写入目录没有设定或者无权限 在win主机下 直接登录bo-blog后台 杂项设置 临时文件夹 写上temp 确定即可
临时文件夹总是设置不成功,设置好了回到该页又是空的,清空临时文件夹时说这样的:
打开以下目录失败: / 。这可能是以下原因造成的:
这个目录不存在;
您没有打开这个目录的权限;
您的服务器禁止了 opendir 函数,在这种情况下,请与您的服务商联系。
返回前页
今天找Bobo换回到bo-blog服务器了,发文章试试。
解决Apache2+PHP上传文件大小限制的问题技术集锦
在用PHP进行文件上传的操作中,需要知道怎么控制上传文件大小的设置,而文件可传大小是受到多种因素制约的,现总结如下:
1、php.ini:upload_max_filesize 所上传的文件的最大大小。默认值2M。
2、php.ini:memory_limit 本指令设定了一个脚本所能够申请到的最大内存字节数,默认值8M。如果不需要任何内存上的限制,必须将其设为 -1。如果内存不够,则可能出现错误:Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)(一般导入数据库时,如果数据库太大,就会报错,改这个就可以)
3、php.ini:post_max_size 设定POST数据所允许的最大大小。此设定也影响到文件上传。要上传大文件,该值必须大于 upload_max_filesize。
4、php.ini:max_execution_time = 30 ; Maximum execution time of each script, in seconds
5、php.ini:max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
6、如果用到mysql的BLOB进行二进制文件存储,则需要设置my.ini:max_allowed_packet=xxM
7、httpd.conf
在 Apache 里面有一个选项是 LimitRequestBody,这个选项可以限制用户送出的 HTTP 请求内容。这个选项可以在 .htaccess 或 httpd.conf 里使用,而如果在 httpd.conf 内使用,分别可以用在 virtualhost 或目录属性设定。而 LimitRequestBody 的设定值是介乎 0 (无限制) 至 2147483647 (2GB)。
例如要在目录 D:/AppServ/www 设定上传限制为 100K,可以在 .htaccess 或 httpd.conf 加入以下语句:
LimitRequestBody 1024000000
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
LimitRequestBody 1024000000
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
如果透过 .htaccess 设定,储存档案后会立即生效;如透过 httpd.conf 设定,须要重新启动 Apache。
PHP关于文件上传部分,特别提到表单隐藏域:MAX_FILE_SIZE,意思是接收文件的最大尺寸。文档中给出的例子如下:
<form enctype="multipart/form-data" action="_URL_" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
<form enctype="multipart/form-data" action="_URL_" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
这里设置MAX_FILE_SIZE = 30000,期待一种可能,使得浏览器在传送文件之前能够依此作出预先判断,如果文件尺寸大于30000字节,则不执行实际的POST动作。也就是不往服务器发送文件内容,而是直接在客户端提醒用户“你试图上传的文件超过30000字节”。
这的确是一个非常棒的主张,但在现实中却暂时无法实现。不是因为这个限制可以“被简单地绕过”,而是IE和FireFox这两个主流浏览器都不支持这个特性。PHP的这个建议尚未被采纳。
MAX_FILE_SIZE还有一个用场:后台PHP会判断接收到的文件大小是否大于这个值,如果超出,$_FILES['thisfile'] ['error']会被设置为UPLOAD_ERR_FORM_SIZE(2),同时放弃保存临时文件,将$_FILES['thisfile'] ['size']置0。
这个例子,没问题,表现正常,当我试图上传一个40多K的文件时,PHP程序报告“文件超过MAX_FILE_SIZE”。
但是,如果我们将表单中的MAX_FILE_SIZE从30000减少到1000,情形又如何呢?
上传800字节的文件,正常;
上传40K的文件,PHP报告文件过大,也正常;
上传3000个字节的文件,PHP未报告错误,它成功保存了文件!出乎意料!
问题就出在main/rfc1867.c中判断文件是否超长的这部分代码上。php每次从buffer中读取FILLUNIT字节长度的内容后,首先判断“已经读到的内容长度(total_bytes)”是否大于MAX_FILE_SIZE,然后再增加“已经读到的内容长度(total_bytes)”。这样一来,和预计的结果之间至多会有FILLUNIT 字节的误差,而FILLUNIT=1024*5=5K。(点击bug了解详细内容)
这就是说,当MAX_FILE_SIZE<5K时,上传一个大于MAX_FILE_SIZE,但是小于5K的文件是没有问题的。
当然,因为这个设置很容易被绕过,所以服务器端编程不应当依赖于MAX_FILE_SIZE。而且,5K到底是个很小的数值,对大多数上传文件的表单来说没有影响。
PHP中post_max_size,upload_max_filesize, MAX_FILE_SIZE的设置,和客户端上传给服务器端的流量大小无关。
Apache服务器从客户端接收长度不超过LimitRequestBody字节数的请求,然后传送给php模块,php模块再决定是否保存成临时文件,设置$_FILES全局变量,移交给script进一步处理。
这个Apache的LimitRequestBody选项缺省值=0,允许Request body的最大字节数是2G(Linux + Apache)
最后还要注意的是:
html本身能够post数据也是有限制的,不能超过2G。
FTP客户端有文件偏移指针的2GB边界限制,未使用特殊编译flag编译的ftp服务器端或者客户端,无论在什么FS中都不支持大于2GB的文件。不知道PHP会不会也有这种情况。
来自:http://www.kukaka.org/home/showonews/72
解决Apache2+PHP上传文件大小限制的问题技术集锦
在用PHP进行文件上传的操作中,需要知道怎么控制上传文件大小的设置,而文件可传大小是受到多种因素制约的,现总结如下:
1、php.ini:upload_max_filesize 所上传的文件的最大大小。默认值2M。
2、php.ini:memory_limit 本指令设定了一个脚本所能够申请到的最大内存字节数,默认值8M。如果不需要任何内存上的限制,必须将其设为 -1。如果内存不够,则可能出现错误:Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)(一般导入数据库时,如果数据库太大,就会报错,改这个就可以)
3、php.ini:post_max_size 设定POST数据所允许的最大大小。此设定也影响到文件上传。要上传大文件,该值必须大于 upload_max_filesize。
4、php.ini:max_execution_time = 30 ; Maximum execution time of each script, in seconds
5、php.ini:max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
6、如果用到mysql的BLOB进行二进制文件存储,则需要设置my.ini:max_allowed_packet=xxM
7、httpd.conf
在 Apache 里面有一个选项是 LimitRequestBody,这个选项可以限制用户送出的 HTTP 请求内容。这个选项可以在 .htaccess 或 httpd.conf 里使用,而如果在 httpd.conf 内使用,分别可以用在 virtualhost 或目录属性设定。而 LimitRequestBody 的设定值是介乎 0 (无限制) 至 2147483647 (2GB)。
例如要在目录 D:/AppServ/www 设定上传限制为 100K,可以在 .htaccess 或 httpd.conf 加入以下语句:
LimitRequestBody 1024000000
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
LimitRequestBody 1024000000
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
如果透过 .htaccess 设定,储存档案后会立即生效;如透过 httpd.conf 设定,须要重新启动 Apache。
PHP关于文件上传部分,特别提到表单隐藏域:MAX_FILE_SIZE,意思是接收文件的最大尺寸。文档中给出的例子如下:
<form enctype="multipart/form-data" action="_URL_" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
<form enctype="multipart/form-data" action="_URL_" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
这里设置MAX_FILE_SIZE = 30000,期待一种可能,使得浏览器在传送文件之前能够依此作出预先判断,如果文件尺寸大于30000字节,则不执行实际的POST动作。也就是不往服务器发送文件内容,而是直接在客户端提醒用户“你试图上传的文件超过30000字节”。
这的确是一个非常棒的主张,但在现实中却暂时无法实现。不是因为这个限制可以“被简单地绕过”,而是IE和FireFox这两个主流浏览器都不支持这个特性。PHP的这个建议尚未被采纳。
MAX_FILE_SIZE还有一个用场:后台PHP会判断接收到的文件大小是否大于这个值,如果超出,$_FILES['thisfile'] ['error']会被设置为UPLOAD_ERR_FORM_SIZE(2),同时放弃保存临时文件,将$_FILES['thisfile'] ['size']置0。
这个例子,没问题,表现正常,当我试图上传一个40多K的文件时,PHP程序报告“文件超过MAX_FILE_SIZE”。
但是,如果我们将表单中的MAX_FILE_SIZE从30000减少到1000,情形又如何呢?
上传800字节的文件,正常;
上传40K的文件,PHP报告文件过大,也正常;
上传3000个字节的文件,PHP未报告错误,它成功保存了文件!出乎意料!
问题就出在main/rfc1867.c中判断文件是否超长的这部分代码上。php每次从buffer中读取FILLUNIT字节长度的内容后,首先判断“已经读到的内容长度(total_bytes)”是否大于MAX_FILE_SIZE,然后再增加“已经读到的内容长度(total_bytes)”。这样一来,和预计的结果之间至多会有FILLUNIT 字节的误差,而FILLUNIT=1024*5=5K。(点击bug了解详细内容)
这就是说,当MAX_FILE_SIZE<5K时,上传一个大于MAX_FILE_SIZE,但是小于5K的文件是没有问题的。
当然,因为这个设置很容易被绕过,所以服务器端编程不应当依赖于MAX_FILE_SIZE。而且,5K到底是个很小的数值,对大多数上传文件的表单来说没有影响。
PHP中post_max_size,upload_max_filesize, MAX_FILE_SIZE的设置,和客户端上传给服务器端的流量大小无关。
Apache服务器从客户端接收长度不超过LimitRequestBody字节数的请求,然后传送给php模块,php模块再决定是否保存成临时文件,设置$_FILES全局变量,移交给script进一步处理。
这个Apache的LimitRequestBody选项缺省值=0,允许Request body的最大字节数是2G(Linux + Apache)
最后还要注意的是:
html本身能够post数据也是有限制的,不能超过2G。
FTP客户端有文件偏移指针的2GB边界限制,未使用特殊编译flag编译的ftp服务器端或者客户端,无论在什么FS中都不支持大于2GB的文件。不知道PHP会不会也有这种情况。
来自:http://www.kukaka.org/home/showonews/72
centos6.2最小化安装后执行chkconfig --list,显示所有服务,如下图:
下边分别进行说明:
auditd:审核守护进程
当 auditd 运行的时候,审核信息会被发送到一个用户配置日志文件中(默认的文件是 /var/log/audit/audit.log)。如果 auditd 没有运行,审核信息会被发送到 syslog。这是通过默认的设置来把信息放入 /var/log/messages。如果审核子系统没有被启用,没有审核信息会被产生。
·要完全在内核中禁用审核,在启动的时候使用 audit=0 参数。您还需要使用 chkconfig auditd off 2345 来关闭 auditd。您可以在运行时使用 auditctl -e 0 来在内核中关闭审核。
crond:用于周期性执行一条或多条指令
可以输入crontab -e进行添加,如
0 6 * * * ntpdate 192.168.1.1 > /dev/null;clock -w
表示每天早晨6点运行ntpdate进行时间同步
ip6tables :ipv6的防火墙软件,如无ipv6相关服务,可关闭
iptables :ipv4的防火墙软件
messagebus:
D-BUS是一个库,为两个或两个以上的应用程序提供一对一的通讯。dbus-daemon-1是一个应用程序,它使用这个库来实现messagebus守护进程。多个引用程序通过连接messagebus守护程序可以实现与其他程序交换信息。
netfs:Network Filesystem Mounter
用于在系统启动时自动挂载网络中的共享文件空间,如NFS,Samba等。
network:
在系统启动时激活所有网络接口
postfix:
替代sendmail的邮件服务器,如服务器不提供邮件服务,可关闭
chkconfig postfix off
qpidd:
qpid 是 Apache 开发的一款面向对象的消息中间件,它是一个 AMQP 的实现,可以和其他符合 AMQP 协议的系统进行通信。Qpid 提供了 C++/Python/Java/C# 等主流编程语言的客户端库,安装使用非常方便。相对于其他的 AMQP 实现,Qpid 社区十分活跃,有望成为标准 AMQP 中间件产品。除了符合 AMQP 基本要求之外,Qpid 提供了很多额外的 HA 特性,非常适于集群环境下的消息通信。
rsyslog:
提供系统的登录档案记录。
sshd:
ssh服务端,可提供安全的shell连接,用于远程登录
udev-post:
"udev"的用途是Fedora的设备管理系统,默认情况下"udev"支持很多个规则,用于设备的权限和行为管理,该服务允许用于保存用户应用的规则。
附:
查看服务的说明:
在centos下这些服务都是脚本,我们可以利用rpm的命令来查看相应的说明。例如执行:
rpm -qi $(rpm -qf /etc/rc.d/init.d/sshd )
Description中对该包的功能进行了描述。
来源:http://blog.sina.com.cn/s/blog_98a0937f0100yax3.html
下边分别进行说明:
auditd:审核守护进程
当 auditd 运行的时候,审核信息会被发送到一个用户配置日志文件中(默认的文件是 /var/log/audit/audit.log)。如果 auditd 没有运行,审核信息会被发送到 syslog。这是通过默认的设置来把信息放入 /var/log/messages。如果审核子系统没有被启用,没有审核信息会被产生。
·要完全在内核中禁用审核,在启动的时候使用 audit=0 参数。您还需要使用 chkconfig auditd off 2345 来关闭 auditd。您可以在运行时使用 auditctl -e 0 来在内核中关闭审核。
crond:用于周期性执行一条或多条指令
可以输入crontab -e进行添加,如
0 6 * * * ntpdate 192.168.1.1 > /dev/null;clock -w
表示每天早晨6点运行ntpdate进行时间同步
ip6tables :ipv6的防火墙软件,如无ipv6相关服务,可关闭
iptables :ipv4的防火墙软件
messagebus:
D-BUS是一个库,为两个或两个以上的应用程序提供一对一的通讯。dbus-daemon-1是一个应用程序,它使用这个库来实现messagebus守护进程。多个引用程序通过连接messagebus守护程序可以实现与其他程序交换信息。
netfs:Network Filesystem Mounter
用于在系统启动时自动挂载网络中的共享文件空间,如NFS,Samba等。
network:
在系统启动时激活所有网络接口
postfix:
替代sendmail的邮件服务器,如服务器不提供邮件服务,可关闭
chkconfig postfix off
qpidd:
qpid 是 Apache 开发的一款面向对象的消息中间件,它是一个 AMQP 的实现,可以和其他符合 AMQP 协议的系统进行通信。Qpid 提供了 C++/Python/Java/C# 等主流编程语言的客户端库,安装使用非常方便。相对于其他的 AMQP 实现,Qpid 社区十分活跃,有望成为标准 AMQP 中间件产品。除了符合 AMQP 基本要求之外,Qpid 提供了很多额外的 HA 特性,非常适于集群环境下的消息通信。
rsyslog:
提供系统的登录档案记录。
sshd:
ssh服务端,可提供安全的shell连接,用于远程登录
udev-post:
"udev"的用途是Fedora的设备管理系统,默认情况下"udev"支持很多个规则,用于设备的权限和行为管理,该服务允许用于保存用户应用的规则。
附:
查看服务的说明:
在centos下这些服务都是脚本,我们可以利用rpm的命令来查看相应的说明。例如执行:
rpm -qi $(rpm -qf /etc/rc.d/init.d/sshd )
Description中对该包的功能进行了描述。
来源:http://blog.sina.com.cn/s/blog_98a0937f0100yax3.html
uchome的index文件中的二级域名功能判断,使用了php的$_SERVER['HTTP_HOST'],开始对这个不是很了解,所以百度了一下,发现一篇帖子有点意思,转发过来做个记录。
在php中,我们一般通过$_SERVER['HTTP_HOST']来活得URL中网站的域名或者ip地址。
php手册中的解释如下:
“HTTP_HOST”
当前请求的 Host: 头信息的内容。
一般来说,这样子不会遇到什么问题,在一些常见的php框架中,如PFC3和FLEA也是基于该预定义变量。
然而最近在做的一个项目,程序移交到客户手里测试时,竟然发现程序的跳转总是会出错。
最后找出原因:$_SERVER['HTTP_HOST']在客户的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。
究其原因,是因为,客户的公司通过一台服务器连接至因特网,而我们的程序所在的服务器,是通过域名映射出来的,也就是中间有个“代理”的过程。因此$_SERVER['HTTP_HOST']在这样的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。
最后查了不少资料,在symfony框架里面,找到替代的实现方法:
将$host = $_SERVER['HTTP_HOST'];
替换成:
即可。
来源:http://hi.baidu.com/zcx1357/blog/item/f766d938d62b46d7d56225bd.html
在php中,我们一般通过$_SERVER['HTTP_HOST']来活得URL中网站的域名或者ip地址。
php手册中的解释如下:
“HTTP_HOST”
当前请求的 Host: 头信息的内容。
一般来说,这样子不会遇到什么问题,在一些常见的php框架中,如PFC3和FLEA也是基于该预定义变量。
然而最近在做的一个项目,程序移交到客户手里测试时,竟然发现程序的跳转总是会出错。
最后找出原因:$_SERVER['HTTP_HOST']在客户的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。
究其原因,是因为,客户的公司通过一台服务器连接至因特网,而我们的程序所在的服务器,是通过域名映射出来的,也就是中间有个“代理”的过程。因此$_SERVER['HTTP_HOST']在这样的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。
最后查了不少资料,在symfony框架里面,找到替代的实现方法:
将$host = $_SERVER['HTTP_HOST'];
替换成:
即可。
来源:http://hi.baidu.com/zcx1357/blog/item/f766d938d62b46d7d56225bd.html