月度归档:2012年03月

centos6安装包过程中出现的问题

今天安装centos6后,准备测试下mysql的主从配置。因为centos6采用的是最小安装方式,所以好到安装包都没有。刚才也不知道是什么原因。

好久没有用了,linux命令又都快忘光了。首先还是网卡设置

更新yum源

其中默认是官方的源,不过我用的一般是163网易的源。

[code]

# CentOS-Base.repo
#
# This file uses a new mirrorlist system developed by Lance Davis for CentOS.
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-$releasever – Base
baseurl=http://mirrors.163.com/centos/6/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-6

#released updates
[updates]
name=CentOS-$releasever – Updates
baseurl=http://mirrors.163.com/centos/6/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-6

#packages used/produced in the build but not released
#[addons]
#name=CentOS-$releasever – Addons
#baseurl=http://mirrors.163.com/centos/$releasever/addons/$basearch/
#gpgcheck=1
#gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-6
#additional packages that may be useful
[extras]
name=CentOS-$releasever – Extras
baseurl=http://mirrors.163.com/centos/6/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-6
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever – Plus
baseurl=http://mirrors.163.com/centos/6/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-6

[/code]

 

 

因为centos是最小化安装所以很多命令库都没有,要一一安装比如

-bash: wget: command not found 安装 wget
-bash: make: command not found 安装 make

还有编译工具如gcc等。这下就可以直接yum  install … 了。

不过总是有这个错误

/repomd.xml: [Errno 14] PYCURL ERROR 6 - ""】想不到原因,搜索得到一篇文章。centos yum 源 问题解析

其中的解释说了很清楚了“

此时聪明的我马上想到了是不是服务器解析不了域名了,导致repomd.xml下载不下来呢?

然后我就ping了一下mirrors.ustc.edu.cn , 果然出现错误:ping: unknown host mirrors.ustc.edu.cn。显然是DNS配置问题了,DNS域名服务器IP地址配的不对。”

解决办法:1、在其他机器上ping源镜像地址,把/etc/hosts里面 加了一行 mirrors.ustc.edu.cn  202.38.95.110,不过这是权宜之计 。2、推荐使用,需要配置正确的DNS。方法是:打开/etc/resolv.conf 文件,加入一行 nameserver ip。此处把ip换成IDC运营商给的DNS的地址就可以了。我的加上了google的dns地址 nameserver 8.8.8.8

这样yum 就可以正常下载,自动安装了。

然后就继续安装vsftpd,这里就是遇上了,执行make时,遇上command not found的问题;经查make包没有安装,yum直接安装上便好。

 

其中vsftd安装成功后,遇上553 Could not create file问题。经搜索得知。

可能一、是文件目录中的写入权限不够或者是目录所有者及用户组不对。可能二、/etc/vsftpd.conf 中write_enable属性是否为write_enable = yes

以新添加的username为例。

useradd -d /opt/ftp -g ftp-s /sbin/nologin username

1、其中 /opt/ftp的写入权限没有;chmod 755 /opt/ftp 即可

2、owner应该是username,group应该是ftp组;chown -v username:ftp /opt/ftp

 

在编译mysql中欧make时,遇到了

【/depcomp: line 571: exec: g++: not found】 这样的问题,查找gcc的已安装包

再查看一下本机上与gcc相关的安装包有哪些,缺少gcc-c++包
[code]

yum install gcc-c++ -y

[/code]

安装之后

再次进入mysql目录,make clean 再重新编译。

不过又碰到问题了。

【../include/my_global.h:1099: 错误:对 C++ 内建类型 ‘bool’ 的重声明】搜索得来的解决方案

“再次make && make install 后出现错误
../include/my_global.h:1099: 错误:对 C++ 内建类型 ‘bool’ 的重声明

这个错误 是不是你 先./congfigure 又 装的GCC 又make 的?

是的话 重新./configure  在make clean  make make install  就解决了”  网上好东西就是多,确实如此,真是要多分享啊。

 

还是mysql编译中,遇见了【xmalloc.h:29:31: 错误:readline/rlstdc.h】这样的问题,不过没有搜索到对应的解决方法。个人觉得刚才多次make && make install 后可能出现安装了,但部分内容没有卸载清除干净的问题,于是执行

[code]

[root@localhost mysql-5.0.81]# make uninstall

[root@localhost mysql-5.0.81]# make clean

[root@localhost mysql-5.0.81]# make && make install

[/code]

这次执行便成功了,没有问题了。

通过yuicompressor-2.4.7压缩css或js的php应用文件

yuicompressor这是个很好的工具,通过java库编译css或js文件进行压缩。压缩css或者js文件的好处是很多的,减少数据请求量,可以更快的进行数据传输,防止其他人进行窥探或整体直接挪用等等。。。

首先你要去下载一个yuicompressor现在最新版本是2.4.7 下载地址: yuicompressor  使用方法怎么工作在这里都有详细的说明,就不一一介绍了。

最常用的yuicompressor语法就是

[code]
java -jar yuicompressor-x.y.z.jar myfile.js -o myfile-min.js –charset utf-8
[/code]

其中需要注意的地方就是 如果不在yuicompressor-x.y.z.jar这个文件目录下,需要采用绝对的路径比如 E:/compressor/yuicompressor/build/yuicompressor-x.y.z.jar 这样的。同样需压缩文件myfile.js和压缩后输出的文件myfile-min.js 也是一样的采用绝对的路径。

好了,有了yuicompressor后;就要首先有一个java环境,不知道是否已安装java环境的可以通过 运行 ->cmd 输入


java -version

如果看到

java的版本结果就说明java的运行环境是ok的了。如果没有这个结果,不用担心可以去oracle官网去下载。如果觉得下载比较慢可以直接百度搜索java jdk下载,下载完成后下一步,下一步安装完成即可。

不出问题,你现在就可以正常的运行yuicompressor了,能够进行完成压缩文件了。

但是这样就出现了一个问题每次通过这样来执行,只能执行一个文件。我们的css和js文件通常有很多,不能一下完全执行,所以就写了一个小应用,直接输入本地的css和js目录就可以直接遍历压缩完成,这样就很省事了。

三个文件index.php ,index.tpl.html , do.php 很小

好吧,直接上码。

index.php


<?php
/**
* @author alex
* @time 2011年12月1日
* @todo php通过yuicompressor批量压缩css和js文件
* @email leiyu_ai@qq.com
*/
session_start();
require_once 'index.tpl.html';
?>

index.tpl.html


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>compressor js/css</title>

<style type="text/css">
body { font: 12px Microsoft Yahei, Verdana, Geneva, sans-serif, "宋体"; }
h1,h2,h4 { margin: 0; padding: 0; font-weight: normal;  }
input { border: 1px solid #eee; }

form span { display: inline-block; width: 80px; }
form h4 { margin-bottom: 10px; }
.go { border-color: #000; }
</style>
</head>

<body>
<?php
$_SESSION['rand'] = mt_rand(100,999);
?>
<form action="do.php" method="post">
<h4><span>css文件目录</span><input type="text" name="cssdir" /></h4>
<h4><span>js文件目录</span><input type="text" name="jsdir" /></h4>
<h4><input type="submit" name="go" value="提交" /><input type="hidden" name="rand" value="<?php echo $_SESSION['rand'];?>" /></h4>
</form>
</body>
</html>

do.php


<?php
/*
* 示例:我的yuicompressor-2.4.7.jar是放在这个地址下的,所以在运行前请更改为你的存放地址
* $cmd = "java -jar E:/compressor/yuicompressor-2.4.7/build/yuicompressor-2.4.7.jar --type js --charset utf-8 -o E:/tmp/js/home.min.js".
* " E:/tmp/js/home.js";
*/
session_start();
header('Content-type:text/html; charset=utf-8');

$rand = $_POST['rand'];
$srand = isset($_SESSION['rand'])? $_SESSION['rand']: '';
$submit = $_POST['go'];

if ($rand == $srand ){
if ($submit){
$jsdir = $_POST['jsdir'];
$cssdir = $_POST['cssdir'];
if ( !empty($jsdir) || !empty($cssdir)){
// 获取所有的文件集合
$jslist = getFileList($jsdir);
$csslist = getFileList($cssdir);
// 压缩js、css文件内容
$bool = doIt($jslist);
$boolc = doIt($csslist);

if ( $bool || $boolc){
echo $jsdir.'|'.$cssdir.' 目录执行成功';
}else{
echo $jsdir.'|'.$cssdir.' 目录执行失败';
}
}else {
echo '请输入css或js的文件目录';
}
echo '  <a href="'.$_SERVER['HTTP_REFERER'].'">返回首页</a>';
}
unset($_SESSION['rand']);
}

function getExt($file){
return strrev(substr(strrev($file), 0, strpos(strrev($file),'.')));
}

function getName ($file){
return strrev(substr(strrev($file), strpos(strrev($file),'.')+1 ));
}

function getPathFile($dir, $file){
return $dir.DIRECTORY_SEPARATOR.$file;
}

function doIt($list){

$tfile = $list[0][0];
$ext = getExt($tfile);
foreach($list as $key=>$val){
$cmd = "java -jar E:/compressor/yuicompressor-2.4.7/build/yuicompressor-2.4.7.jar --type {$ext} --charset utf-8 -o {$val[1]}".
" {$val[0]}";
exec($cmd, $output, $rv);
// 执行成功
if ( $rv == 0){
// 删除源文件
unlink($val[0]);
// 重命名新的压缩文件
rename($val[1], $val[0]);
}else {
$str .= $val[0].',';
}
}
if (!empty( $str)){
echo $str.' 执行失败';
return false;
}else {
return true;
}
}

function getFileList($dir){
$filelist = array();
if (is_dir($dir)){
$handle = opendir($dir);
while(($file = readdir($handle)) !== false){
if ( $file == '.' || $file == '..') continue;
$tmpdir = getPathFile($dir, $file);
if ( is_dir( $tmpdir)){
$rs = getFileList( $tmpdir);
if ( !empty($rs)){
$filelist = array_merge($filelist, $rs);
}

}else {
$filename = getName($file);
$ext = getExt($file);
$file = getPathFile($dir, $file); // 源文件完整路径
$minname = getPathFile($dir, $filename.'.min.'.$ext); // 压缩目标文件名称完整路径
$filelist[] = array($file, $minname);

}
}
closedir($handle);
return $filelist;
}else{
return false;
}
}

?>

ok完成。现在展示下我的测试结果

css文件

压缩前:                                                                            压缩后:

js 文件

压缩前:                                                                                    压缩后:

效果还是很明显的~~ ^_^

useless setInterval call (missing quotes around argument?) setInterval 参数错误

在写javascript过程中使用到setInterval时,需要传递一个类似于 main.check()这样的参数时,出现了这样的错误信息。

Firefox错误信息:useless setInterval call (missing quotes around argument?)

ie错误信息: 参数无效,42行。

[javascript]

<script language="javascript">
jQuery.noConflict();
jQuery(function($){
$(document).now();
});

jQuery.fn.extend({

now: function(){
var main = this;
this.extend({
gettime: function(){
var date = new Date();
jQuery(‘body’).html(date.getTime());
}
});
// setInterval( main.gettime(), 1000);    // 错误产生地方
setInterval( function(){ main.gettime() }, 1000);    // 修改为这样既可
}
});

</script>

[/javascript]

解决方法很简单。在网上搜索到的。在很多时候比如setTimeout等这样的参数或者自定义的回调函数调用时,都有可能会遇到这样的问题,

主要是因为“main.method()”这样的格式方法所导致的,无法作为一整个函数体来执行,所以在外嵌套一个function(){ } 匿名函数体,这样就可以正常执行了。

原文地址是:useless setInterval call (missing quotes around argument?)