存档

文章标签 ‘Php’

php的open_basedir和symbolic link的问题

2015年1月1日 没有评论

今天碰到个问题,nginx+php-fpm的简单架构,php-fpm要在某个目录(/xxx/xxx/www)下写东西。但是系统貌似不买账,报错消息为:

“[error] 24869#0: *1044 FastCGI sent in stderr: "PHP message: PHP Warning:  is_dir(): open_basedir restriction in effect. File(/xxx/logs/xxxxxxx/logs) is not within the allowed path(s): (/tmp:/xxx/logs/)”

,仔细翻了翻log,再看看手册。发现可能是open_basedir跟symbolic不匹配导致的。我今天碰到的,应该就是这个问题。

分类: tips 标签: , , ,

跑racktables时php的一个错误

2013年12月11日 没有评论

刚在公司迁了一台racktables回办公室,看ipv4地址的页面貌似有点问题,一看web server的error log,发现报错:“PHP Fatal error: Call to undefined function bcsub() in”
于是随手问了下google,发现是系统少了一个包所致,于是简单修复之:

yum -y install php-bcmath;service httpd restart;
分类: tips 标签: , ,

cacti里图上title中显示中文的问题

2011年12月21日 没有评论

系统环境:centos6+cacti0.8.7g
用Aggregate做了几个聚合图,方法前面有提到。
在创建新的图的时候,在title里有中文字符,存取数据库都没有问题,但是在显示的图上,中文字符没有了,原本以为是rrdtool不支持中文导致,打开debug模式一看,才知道,原来在执行生成图的rrdtool的”–title”参数里,中文字符就没有了,这显然不是rrdtool的问题了,而应该是cacti的问题。翻了下cacti的代码,在文件lib/rrd.php里,有一句:

"--title=" . cacti_escapeshellarg($graph["title_cache"]) . RRD_NL .

,而在lib/functions.php里关于cacti_escapeshellarg函数的定义里,将其直接用函数escapeshellarg函数替代(因为

$config["cacti_server_os"] == "unix"

成立)
于是又着重找了找php函数escapeshellarg过滤中文字符的资料,果然有说法,说是LC_CTYPE是缺省值”C”导致,也提了解决方法,就是在文件lib/functions.php中的最前方,显式的将LC_CTYPE设置正确。具体的解决办法如下:
在文件lib/functions.php的最前面,添加一句代码:

setlocale(LC_CTYPE, "UTF8", "en_US.UTF-8");

保存,再一刷页面,OK了。

centos6下cacti设置ldap认证的问题及解决

2011年10月16日 没有评论

  前面这里有做cacti的ldap认证,今天又要在一台centos6的机器上配cacti的ldap认证。于是照葫芦画瓢,本以为非常简单,没想到,做完后登录时报错:“Group DN could not be found to compare”。又查apache的error_log,发现log里报:

PHP Notice: Undefined variable: ldap_group_member_type in /xxx/cacti-0.8.7g/lib/ldap.php on line 253, referer: http://xxx.xxx.xxx.xxx/cacti/index.php

google了一下,发现官方论坛已有解决方案,其实解决很简单:

vim /xxx/cacti-0.8.7g/lib/ldap.php

,将第253行

if ($ldap_group_member_type == 1) {

改成

if ($this->group_member_type == 1) {

即可。
  php报错的问题解决后,再重新ldap登录,居然OK了。看来这是php5.3的问题(原来那台centos5+php5.2的没问题)。

系统版本:
php5.3

dokuwiki的php代码高亮的问题

2011年6月1日 1 条评论

一段php代码,约几千行,直接用

<code php></code>

框起来,然后不管是“预览”还是“保存”,都会出大空白页面,apache的error_log里写

child pid 13125 exit signal Segmentation fault (11)

如果直接在服务器端把文件编辑好,再在客户端访问,也出大空白页,这个同样的错误。
但如果去掉”php”,仅用

<code></code>

的话就不会有这个问题
所以,看起来应该是geshi.php的问题咯……

分类: Operation System 标签: , ,

为嘛一般网站都不让用户上传rar的文件

2011年3月5日 没有评论

在lamp的系统里
如果用户上传了各文件叫xxx.php.rar
而这个文件能够被访问的话
很大程度上这个文件会被当作php程序执行!!
原理据说是apache不认识rar的mime type
就会去找倒数第二个扩展名,也就是php的mime type作为这个文件的mime type
如果这台机器上装了apache模块儿mod_php的话
这是会被当作php程序执行的

而恰恰在大多数系统里
mime.conf中并没有关于rar的解释
所以xxx.php.rar就会被当作php程序来执行了

所以
一般网站就算允许用户上传文件,也不允许上传rar文件。

所以,要做用户上传文件类型校验,或者强行改变文件名

分类: tips, TroubleShooting 标签: , , , ,

ucenter1.5的一个bug

2010年3月20日 没有评论

康盛(comsenz)的产品ucenter在其产品线中是个比较重要的产品
最新的supesite和discuz都需要安装ucenter
最新的版本是1.5
在一次挪ucenter的安装目录的过程中
发现有些问题
比如当我把目录由/uc_server(这个一般是缺省的)挪到/Uc_server后
访问这个ucenter的url的时候
还是会跳到/uc_server/下的文件去
而这个目录已经被挪走,自然会出404错误
其实正确的应该是跳往/Uc_server/下的文件
看了看代码
发现问题出在一个常量UC_API的定义上
这里牵涉到几个文件的几句话

[@65.6 UC]# grep -r “define(‘UC_API'” *
admin.php:define(‘UC_API’, strtolower((isset($_SERVER[‘HTTPS’]) && $_SERVER[‘HTTPS’] == ‘on’ ? ‘https’ : ‘http’).’://’.$_SERVER[‘HTTP_HOST’].substr($_SERVER[‘PHP_SELF’], 0, strrpos($_SERVER[‘PHP_SELF’], ‘/’))));
avatar.php:define(‘UC_API’, strtolower(($_SERVER[‘HTTPS’] == ‘on’ ? ‘https’ : ‘http’).’://’.$_SERVER[‘HTTP_HOST’].substr($_SERVER[‘PHP_SELF’], 0, strrpos($_SERVER[‘PHP_SELF’], ‘/’))));
index.php:define(‘UC_API’, strtolower(($_SERVER[‘HTTPS’] == ‘on’ ? ‘https’ : ‘http’).’://’.$_SERVER[‘HTTP_HOST’].substr($_SERVER[‘PHP_SELF’], 0, strrpos($_SERVER[‘PHP_SELF’], ‘/’))));

其实就是admin.php、avatar.php和index.php三个文件里的三句话
这三个语句都是一个问题:
就是把url路径里的字符串用strtolower给变成小写了,然后再定义给UC_API
这样在windows下或ucenter用单独域名,装在/下自然没有问题
但是当服务器是Linux,且ucenter装在的目录有大写字符时
就有问题了
问题找到了
解决起来也容易
就是挪动一个“)”号即可
把语句最后挪一个“)”到
$_SERVER[‘HTTP_HOST’]后面就行了
变成像这样

admin.php:define(‘UC_API’, strtolower((isset($_SERVER[‘HTTPS’]) && $_SERVER[‘HTTPS’] == ‘on’ ? ‘https’ : ‘http’).’://’.$_SERVER[‘HTTP_HOST’]).substr($_SERVER[‘PHP_SELF’], 0, strrpos($_SERVER[‘PHP_SELF’], ‘/’)));
avatar.php:define(‘UC_API’, strtolower(($_SERVER[‘HTTPS’] == ‘on’ ? ‘https’ : ‘http’).’://’.$_SERVER[‘HTTP_HOST’]).substr($_SERVER[‘PHP_SELF’], 0, strrpos($_SERVER[‘PHP_SELF’], ‘/’)));
index.php:define(‘UC_API’, strtolower(($_SERVER[‘HTTPS’] == ‘on’ ? ‘https’ : ‘http’).’://’.$_SERVER[‘HTTP_HOST’]).substr($_SERVER[‘PHP_SELF’], 0, strrpos($_SERVER[‘PHP_SELF’], ‘/’)));

hiphop for php from facebook

2010年2月11日 没有评论

hiphop for php是facebook开发的一款的php转换软件
他能将php代码转换成高度优化的c++代码
然后再用g++编译成二进制文件
用这样得到的二进制文件跑在服务器上取代php代码以提高性能
据说能将系统的cpu占有率降低50%

BTW:
据说hiphop for php将在2010年早期由facebook放出
我们拭目以待

httpd2.2.x和httpd2.0.x下php的content-type不一样!

2009年3月26日 没有评论

其实应该讲是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

linux下怎样安装php扩展

2009年3月22日 没有评论

简言之
就是

phpize
./configure
make
make install
echo “extension=xxx.so” > /etc/php.d/xxx.ini
#上面的”xxx”是扩展模块儿的名称,比如MagickWand

分类: Operation System 标签: , , ,