hiphop for php from facebook
hiphop for php是facebook开发的一款的php转换软件
他能将php代码转换成高度优化的c++代码
然后再用g++编译成二进制文件
用这样得到的二进制文件跑在服务器上取代php代码以提高性能
据说能将系统的cpu占有率降低50%
BTW:
据说hiphop for php将在2010年早期由facebook放出
我们拭目以待
hiphop for php是facebook开发的一款的php转换软件
他能将php代码转换成高度优化的c++代码
然后再用g++编译成二进制文件
用这样得到的二进制文件跑在服务器上取代php代码以提高性能
据说能将系统的cpu占有率降低50%
BTW:
据说hiphop for php将在2010年早期由facebook放出
我们拭目以待
其实应该讲是php的版本不一样导致.php文件在httpd里的content-type不一样的
因为/etc/httpd/conf.d/php.conf是rpm包php带来的
rhel5下
httpd是2.2.x
php版本是5.1.x的
其.php文件的content-type是text/html
而另外台机器
httpd版本是2.0.x
php版本忘了
其.php文件的content-type是application/x-httpd-php
简言之
就是
phpize
./configure
make
make install
echo “extension=xxx.so” > /etc/php.d/xxx.ini
#上面的”xxx”是扩展模块儿的名称,比如MagickWand
今天给一台机器装php的加速模块儿apc的时候
当我输入命令:
pecl install apc
报错:
“Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 92160 bytes) in /usr/share/pear/PEAR/PackageFile/v2/Validator.php on line 1831”
于是在/usr/share/pear/pearcmd.php里加一句:
@ini_set(‘memory_limit’, ‘16M’);
后
再装就好了
php-java-bridge是一个在php和java程序中互相调用的东东
前段时间接开发需求
在rhel5的机器(redhat enterprise linux advance server 5 update 1)上装这么个东东
因为开发需要在php程序里调java的包
于是就去其官网php-java-bridge.sourceforge.net下了个最新版php-java-bridge_5.3.2.1.2.tar.gz
然后安装之
tar xzvf php-java-bridge_5.3.2.1.2.tar.gz
cd php-java-bridge-5.3.2.1.2
/usr/bin/phpize
./configure –with-java=/usr/java/default
make
. install.sh
安装的时候选”no”(没有单独的后台程序服务于java)
装完后
service httpd restart(重起apache)
看java是enabled且状态是running
但实际程序一跑就出错
怎么改都不行
当程序里有”java_require”的时候出错
PHP Fatal error: Call to undefined function java_require() in
而且跑php-java-bridge带的测试程序test.php都出错:
protocol error: , Invalid document end at col 1. Check the back end log for details.PHP Notice: fwrite(): send of 11 bytes failed with errno=32 Broken pipe in /usr/share/pear/java/Java.inc on line 838
java.lang.RuntimeException: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:15596 accept,resolve)
at php.java.bridge.JavaBridge.init(JavaBridge.java:327)
at php.java.bridge.Standalone.init(Standalone.java:211)
at php.java.bridge.Standalone.main(Standalone.java:279)
Caused by: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:15596 accept,resolve)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkAccept(SecurityManager.java:1157)
at java.net.ServerSocket.implAccept(ServerSocket.java:457)
at java.net.ServerSocket.accept(ServerSocket.java:421)
at php.java.bridge.TCPServerSocket.accept(TCPServerSocket.java:89)
at php.java.bridge.JavaBridge.init(JavaBridge.java:309)
… 2 more
Exception in thread “main” java.lang.SecurityException: exitVM disabled by JavaBridgeSecurityManager.java
at php.java.bridge.JavaBridgeSecurityManager.checkExit(JavaBridgeSecurityManager.java:104)
at java.lang.Runtime.exit(Runtime.java:88)
at java.lang.System.exit(System.java:906)
at php.java.bridge.Standalone.main(Standalone.java:282)
而且发现网上也很少有人说装php-java-bridge5的
于是想想会不会是版本问题
于是又下了个php-java-bridge4的包php-java-bridge_4.3.3.tar.gz
重新安装
tar xzvf php-java-bridge_4.3.3.tar.gz
cd php-java-bridge-4.3.3
/usr/bin/phpize
./configure –with-java=/usr/java/default
make
. install.sh
/etc/rc.d/init.d/httpd restart
这下再试就没有问题了
一台rhel as5 update2的机器
php版本是5.1.6
需要安装json(一种php扩展)
php从5.2.0开始就已经将json集成到core代码里
所以5.2.0及以后的php是不需要单装json的
但我们这里是5.1.6的php
看了下文档
就是一句:
pecl install json
最后会出错:
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 7680 bytes) in /usr/share/pear/PEAR/PackageFile/v2.php on line 1067
忽略这个错误
php -m
发现还没有json
编辑/etc/php.ini
加上一句
extension=json.so
重起apache
搞定
猜想可能是最后改配置文件php.ini的时候出错了,于是没有更新php.ini
导致需要手工更改
也算是需求推动
产品那边需要在一台fc3(fedora core 3)的机器上装上php5
并且要启用pdo_mysql支持
偶,额滴神呀
幸好以前在别的机器上手工编过php5.x(具体版本5.2.5)
赶紧从那台机器上把php5.2.5拷过来
并把原来的./configure连同编译参数都调出来
再加上个–with-pdo-mysql重新configure一下
再make
make的时候出错了
不知道原因在哪儿
后来在网上搜了下
找了种折衷的办法
说是先编好php5
然后再把pdo_mysql的支持编进去
cd php5.2.5/ext/pdo_mysql
phpize
./configure
make
make install
这样居然成功了
再接着改php.ini
把编出来的pdo_mysql.so正确load进来
这样居然成功了!!
在控制台上直接执行php test.php
系统出错:
“PHP Warning: mysql_connect(): Client does not support authentication protocol requested by server”
于是就在本机控制台用命令
mysql -h 192.168.1.1 -u user -p
(这里192.168.1.1是mysql服务器ip)
再输入密码来连
这样没有问题
然后在192.168.1.1把程序拷过去
直接执行
然后又没有问题
当时就有点困惑了
这两台机器一样的php-mysql版本呀
一样的mysqlclient版本呀
可为什么一个能连一个出错呢
要说对client那台机器的权限有限制
但是在client那台机器上直接用mysql客户端程序也能连呀
于是
似乎陷入困境
mysql官网对这个错误的解释是老板本的mysql和新版本的mysql的密码格式不兼容
如果用老板本的mysql client去连新版本的mysql server
如果mysql server上的密码格式是新格式的话
就会出这个错误
显然,本例就是这样
最后问题解决后
才发现其实一开始分析问题的时候就出现了偏差
其实知道问题的原因是由于client的版本和server上存储密码的格式相关
那么就应该去确认这两台机器一台连不上一台没问题他们分别的client版本和server上的密码格式的
如果是这样
一开始就去服务器端
use mysql
select * from user where User = ‘user’;
一看就知道了
原来有条记录
Host正好是client的ip
client连过来的时候正好是匹配这条记录
但是其密码格式是新格式
而client上的mysql client版本是老板本
不出问题才怪呢!!
再看看从服务器上通过连为什么又没有问题呢
原来还有条记录
Host是’192.168.1.%’
他的密码格式是老格式的
服务器上连过来的时候正好是匹配这一条记录
自然OK
这样解决起来也就容易了
直接将写着client ip的那条记录删掉就好了
今天写了个小程序
用来监测某些机器上的某些进程是否存在
需要从mysql中查出ip和进程字串
然后从中控上一台一台ssh上去ps查进程是否存在
如果状态变化(原来标记不存在的现在有了,或是原来标记存在的现在没有了)
还需要更新mysql库中的相应状态字段
因为查询出来的数据比较多(600多条)
而且我还要一台一台ssh上机器检测进程
等我发现某台机器的某个进程状态改变要update库的时候
数据库报错:
MySQL server has gone away
查了好些资料
也没找出原因来
最后按照文档上建议的
先判断
然后再执行mysql_query
function connect(){
$db = mysql_connect(‘xxx.xxx.xxx.xxx’, ‘xxx’, ‘xxxxxx’);
mysql_select_db(‘db1′);
return $db;
}
if (!$db){
mysql_close($db);
$db = connect();
}elseif(!mysql_ping($db)){
mysql_close($db);
$db = connect();
}
mysql_query(“$sql”);
不管怎么样
这个问题算是解决了
不过说实话:为什么我还是没搞明白
:)
今天升级cacti从0.8.7a版到0.8.7b
但是关键升级cacti plugin architecture的时候有些波折
按照文档升级完了
页面老不对
主要是内部的一些链接不对
查了半天
发现是url_path的问题
include/plugins.php里有一句:
$config['url_path'] = substr(__FILE__, strlen($_SERVER['DOCUMENT_ROOT']), strlen(__FILE__) – strlen($_SERVER['DOCUMENT_ROOT']) – strlen(‘include/plugins.php’));
应该是来算url_path的
但是就是这句算的url_path不对
我的cacti在/cacti/下
关键是我的incluce/plugins.php绝对路径里有soft link
然后web目录下又是Alias
所以不管怎么样
这句算出来的url_path不对
最后没办法(php我也不是很精通)
直接把这句注释掉
写死url_path为正确值了事
$config['url_path'] = ‘/cacti/’;
最近评论