月度归档:2011年01月

nginx 规则错误 directive “rewrite” is not terminated by “;”

源地址:http://blog.is36.com/archives/50/

 

遭遇问题:directive “rewrite” is not terminated by “;”

用vi编辑器编辑完nginx.conf文件后保存,在shell下执行命令/usr/local/web/nginx/sbin/nginx -t用以检查nginx.conf配置文件是否正确(假设nginx被编译到/usr/local/web/nginx/)
正确的话:

[root@localhost]# /usr/local/web/nginx/sbin/nginx -t
the configuration file /usr/local/web/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/web/nginx/conf/nginx.conf test is successful

如果出现如下问题:directive “rewrite” is not terminated by “;”

[root@localhost]# /usr/local/web/nginx/sbin/nginx -t
[emerg]: directive “rewrite” is not terminated by “;” in /usr/local/web/nginx/conf/nginx.conf:160
configuration file /usr/local/web/nginx/conf/nginx.conf test failed

处理方法:将重新后的url用双引号引起来!

出错:rewrite ^/date/([0-9]{6})/?([0-9]+)?/?$ /index.php?action=article&setdate=$1&page=$2 last;
正确:rewrite “^/date/([0-9]{6})/?([0-9]+)?/?$” /index.php?action=article&setdate=$1&page=$2 last;

看着那句directive “rewrite” is not terminated by “;”还以为是没;呢!
参考资料:http://developmentcase.com/2009/04/17/nginx-rewrite-and-directive-rewrite-is-not-terminated-by/

css构建圆角

在ff下构建圆角时,用这样的一行代码就ok了。.bor{ -moz-border-radius:5px;}但是在ie或者是chrome中,这个样式是无效的。

无意中看到这样这一种构建圆角的方式了。效果如下。



html代码:

 

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>test</title>
<style type=”text/css”>
div.RoundedCorner{background:#CC0000; width:390px;}

/* 圆角样式 */
b.rtop, b.rbottom{display:block;background: #FFFFFF}
b.rtop b, b.rbottom b{display:block;height: 1px;overflow: hidden; background:#CC0000}

b.r1{margin: 0 5px}
b.r2{margin: 0 3px}
b.r3{margin: 0 2px}
b.rtop b.r4, b.rbottom b.r4{margin: 0 1px;height: 2px}

.myimg{ filter:alpha(opacity=120);}

</style>
</head>

<body>

<div class=”RoundedCorner”>
<!–圆角–>
<b class=”rtop” >
    <b class=”r1″></b>
    <b class=”r2″></b>
    <b class=”r3″></b>
    <b class=”r4″></b>
    
</b>
<div style=”margin:10px;”>
<table width=”370″ border=”0″ cellspacing=”0″ cellpadding=”0″>
  <tr>
    <td width=”46″ rowspan=”2″ align=”center” valign=”middle” bgcolor=”#CC0000″><img src=””   /></td>
    <td width=”318″ bgcolor=”#CC0000″><font style=”font-size:20px; color:#FFF; font-weight:bold;”>中国营销渠道创新运营商</font></td>
  </tr>
  <tr>
    <td bgcolor=”#CC0000″><font style=”font-size:20px; color: #FFF; font-weight:bold;”>城市社区综合服务提供商</font></td>
  </tr>
</table>

 </div>
</div>
</body>
</html>

同理如果想圆角弧度再大一点,那么r1的margin则就要大一点。同时要多加上几个 <b class=”r6″></b> 然后定义对应样式.r6{ margin:0 2;}这样一行一行的排下来。直到最底下的<b>的样式是margin: 0 1px;

windows平台下rmdir或unlinnk时Permission denied 错误

写了个删除目录或文件的函数。如下。

function rm($dir){
            $dir = str_replace(‘\\’,’/’,$dir);
            if(is_dir($dir)){
                    $hd = opendir($dir);        
                    while(($f=readdir($hd))!==false){
                        if($f==’.’||$f==’..’)continue;
                        //echo $dir.’/’.$f;
                        is_dir($dir.’/’.$f)?rm($dir.’/’.$f):unlink($dir.’/’.$f);
                    }
                    
                    if (readdir($hd) == false)  {
                            closedir($hd); //同理,这一段是后来加上去的,否则则报错。
                            rmdir($dir);
                            echo $dir.’执行成功<br/>’;
                        }
                }    
        }

首先是unlink删除文件错误,在windows下怎么设置文件或目录的权限呢。linux下可以给予777全部的可写可执行权限。windows下已是administrator用户,查看了一些资料windows下文件或文件夹是“只读”,“存档”,“隐藏”,而我需要删除文件夹里面的文件是只读权限,右键属性就可以看到。于是就把“只读”去掉,当然也应用到子目录下。

再次运行unlink则不报错了。

但rmdir还是有这个错误。

搜索得到。原来是逻辑错误。unlink 出现 Permission denied 错误,系统是windows xp

作者的是fopen打开文件后,并没有fclose而直接删除该文件,于是也报错Permission denied。

一看我的rmdir不是也是如此么。。在opendir后,同样没有closedir就直接删除目录。所以加上closedir($hd);后正常删除!

centos安装lnmp时的常见错误

都是从网上罗列来的。希望对各位有帮助。

在配置centos上面的运行环境时,建议除了安装gcc/g++等编译器外,yum(Yellow dog Updater, Modified)软件包管理器,还是安上吧,方便查找软件,否则个软件的依赖包。。那找的是头大。

那就要找到新或全点的源了。http://centos.ustc.edu.cn/centos/  这里的源,很快,且很全。

这里讲了如何在服务器设置yum源http://elf8848.javaeye.com/blog/455676

 

安装后请按照以下步骤修改CenOS-Base.repo,以后就可以方便的用yum安装软件了.

cd /etc/yum.repos.d

 mv CentOS-Base.repo  CentOS-Base.repo.save
wget

http://centos.ustc.edu.cn/CentOS-Base.repo

修改以上文件后, 如需要安装gcc, 直接yum install gcc就可以了

 

下面就是编译安装LNMP过程中的一些常见错误了。

Mysql
line 213: my_print_defaults: command not found
/etc/rc.d/init.d/mysqld /opt/my.cnf  添加对应的basedir 和datadir路径

./libtool: line 990: g++: command not found
g++未安装

mhash-0.9.9.9.tar.gz
haval.lo gosthash.lo whirlpool.lo snefru.lo
libtool: link: `mhash.lo’ is not a valid libtool object
需要对应的依赖包

checking for xml2-config path…
configure: error: xml2-config not found. Please check your libxml2 installation.
php需要libxml2包

easy.h should be in /include/curl/
yum install curl-devel

configure: error: Cannot find ldap.h
编译php时出现 configure: error: Cannot find ldap.h,查阅了相关文档,发现依赖于openldap包,通过yum解决问题:
yum install openldap openldap-clients openldap-devel openldap-servers
configure: error: mysql configure failed. Please check config.log for more information.
http://baikgd.blog.163.com/blog/static/354024952010710115820569/

php编译mysql
configure: error: mysql configure failed. Please check config.log for more information.
root@test_03:~/php-5.2.10# ./configure –help |grep mysql
  –with-mysql[=DIR]      Include MySQL support. DIR is the MySQL base directory
郁闷的是..被误导了.其实是要–with-mysql-dir=XXX
原配置信息如下,出错:
./configure –prefix=/usr/local/php –with-apxs2=/usr/local/apache/bin/apxs  –with-xml–with-mysql=/usr/–with-config-file-path=/usr/local/lib -enable-track-vars –enable-sockets –with-zlib
修改配置如下,成功编译安装:
./configure –prefix=/usr/local/php –with-apxs2=/usr/local/apache/bin/apxs  –with-xml–with-mysql-dir=/usr/–with-config-file-path=/usr/local/lib -enable-track-vars –enable-sockets –with-zlib

make php过程中的错误
ERROR: invalid PHP executable specified by TEST_PHP_EXECUTABLE  = /opt/software/php-5.2.14/sapi/cli/php

http://linux.chinaunix.net/bbs/viewthread.php?tid=1118728
该错误可以忽略直接make install

编译pdo扩展时
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
http://apps.hi.baidu.com/share/detail/1831031
缺少依赖包m4-1.4.9.tar.gz,autoconf-2.62.tar.gz

# cd /usr/src
# wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
# tar -zvxf m4-1.4.9.tar.gz
# cd m4-1.4.9/
# ./configure && make && make install
# cd ../
# wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.62.tar.gz
# tar -zvxf autoconf-2.62.tar.gz
# cd autoconf-2.62/
# ./configure && make && make install

附:CentOS 5.5下编译php时的一些典型错误及解决办法.

命令重启nginx命令
经常需要重启nginx,但网上的很多教程都需要繁琐的启动脚本,远不如apache的重启命令那么简单。
但研究了一下nginx帮助后发现,有-s参数可对nginx服务进行管理:
# /usr/local/nginx/sbin/nginx -h
nginx version: nginx/0.7.63
Usage: nginx [-?hvVt] [-s signal] [-c filename] [-p prefix] [-g

directives]
Options:
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
-t : test configuration and exit
-s signal : send signal to a master process: stop, quit, reopen,

reload
-p prefix : set prefix path (default: /usr/local/nginx/)
-c filename : set configuration file (default: conf/nginx.conf)
-g directives : set global directives out of configuration file
于是我执行
# /usr/local/nginx/sbin/nginx -s  reload
nginx已经重启成功
Nginx由于没有免费的控制面板支持,所以需要修改 /usr/local/nginx/conf/nginx.conf 这个文件来实现服务器性能、特性的配置。

上传下载配置文件建议使用Winscp这个工具,同样基于SSH协议,比Ftp安全。在 http://wiki.nginx.org/NginxConfiguration 有很多配置文件的文档和例子。

CURL 获取数据:object moved

在使用file_get_contents获取数据时遭遇302重定向,从而获取不了。转而使用curl,curl却报错:object moved 

gg搜索下。把原先的:

$ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,’http://www.domain.com/today/today.asp’);

    culr_setopt($ch,CURLOPT_HEADER,0);

    $string = curl_exec($ch);

改为

    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,’http://www.domain.com/today/today.asp’);
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postArray);
    $string = curl_exec($ch);

这样便能正常显示了。但是上传到centos服务器上却不行了。服务器防火墙是允许访问该网站的。最终原因不明。

 

又找到如下函数,可以返回重定向的url

function _curl_post_302($url, $vars) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 302 redirect
        curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
        $data = curl_exec($ch);
        $Headers = curl_getinfo($ch);
        curl_close($ch);
        if ($data&&$Headers)
        return $Headers[“url”];
        else
        return false;
}

$url = _curl_post_302(‘http://www.domain.com/today/today.asp’,$arr);           //返回的则是重定向url

然后可以使用file_get_contents()抓取这个新的地址数据了。这样就得到了。