龙飞网

一个网络工程师的开源日志

Linux系统下统计目录及其子目录文件个数

 http://www.sina.com.cn 2008年06月23日 08:13 赛迪网

 作者:sixth

 查看某目录下文件的个数

 ls -l |grep “^-”|wc -l

 或

 find ./company -type f | wc -l

 查看某目录下文件的个数,包括子目录里的。

 ls -lR|grep “^-”|wc -l

 查看某文件夹下目录的个数,包括子目录里的。

 ls -lR|grep “^d”|wc -l

 说明:

 ls -l

 长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)

 grep “^-”

 这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d

 wc -l

 统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于一行信息对应一个文件,所以也就是文件的个数。

Zend Studio 7.2 自动换行

  在zend studio 6系列中自动换行一直是一个比较麻烦的问题,不太明白这么强大的一个编辑器为什么没有提供自动换行的功能,不过当时可以通过安装相应的插件来完成。不过在zend studio 7.2中,这个问题可以直接解决了。

方法如下:

  在代码窗口中单击右键,然后选择“Toggle Word Wrap”即可。

  缺点:关于行号,如果是一行自动换为两行,显示的行号是2而不是1。

PHP是否支持mail()函数

WordPress无法发送邮件,通常都是放置博客的服务器自身问题,而不是WordPress程序的问题。Linux主机还算幸福,一般不用操心mail()函数的问题。Win主机大多支持情况不是很好,主要现在垃圾邮件横行,IDC商也是头大的很,干脆禁了mail()函数,一了百了。

WordPress发送邮件的原理很简单,它是通过PHP中的mail()函数来实现的,所以我们首先要解决的就是测试服务器对mail()函数的支持情况,小拼提供三种解决方案,随你喜欢。

1)新建一个PHP文件,命名为mail_test.php,加入以下代码:

<?php phpinfo(); ?>

将mail_test.php上传至网站根目录,访问该文件,就可以看到你的服务器PHP详细配置信息了,其中的sendmail_path组件,如果值是-t -i,则说明你的服务器支持mail()函数。

2)在上面的mail_test.php文件中,加入以下代码:

<?php$text = "This is a test!";// 将邮箱地址改成你的$mail = 'xpsem2010@gmail.com'; // 发送邮件mail($mail, "Mail Test", $text);echo "Message has been sent !";?>

同上,访问mail_test.php文件,如果你的邮箱收到名为Mail Test的新邮件,那表示你的服务器是支持mail()函数发送邮件的。

3)在mail_test.php中加入如下代码:

<?phpif (function_exists('mail')) echo "^_^ mail()函数可以使用!";else echo "- -! mail()函数不可以使用!";?>

以上三种方法,就可以准确地测试出你的服务器对mail()函数的支持情况了。如果不支持mail()函数的话,就去找你的IDC商沟通吧!

新浪微博不支持多个参数

日前,写了个插件程序给ECShop,并按领导要求,添加了新浪微博的分享和腾讯微博的分享。结果有人报告,在插件详情页上的新浪微博的分享,有mysql错误显示,但能生成短地址,而腾讯微博正常。

这个错误很妖异,放狗搜了一下,也没搜到类似的案例。仔细考虑了一下,一般,分享框都是标题和地址,现在只有地址,没有标题,说明是标题生成出了问题。但生成的HTML页面上,title又是能正常生成的(因为新浪微博的分享按钮,通常在未做指定的情况下,是直接取HTML页面的title元素的)。考虑到通常的商品详情页面的新浪微博分享又是正常的,猜测是因为该页面的URL地址有两个参数,形如:http://www.xxx.com/xxx.php?a=b&c=d,其中a=b是选择不同的页面动作,于是将这个动作,独立写成一个PHP文件,将地址缩短到形如http://www.xxx.com/xxx.php?a=b,果然,立刻吃嘛嘛香,身体倍儿棒,新浪微博分享立刻显示正常。看来这是由于新浪的分享功能不支持当前页面的URL地址有多个参数,从而无法获取标题造成的。

如何将apache伪静态规则转换成nginx

  很多用户的程序,官方仅提供了apache或IIS的伪静态规则,无法加载到我公司的nginx服务器上,下面就简单介绍下如何将apache转换成nginx可以使用的规则。

        RewriteEngine On

        RewriteRule ^/([a-z]+)/p_([0-9]+)\.html$ /list\.php\?id=$1

  以上为apache的伪静态规则。下面为转换后的nginx规则:

  rewrite ^/([a-z]+)/p_([0-9]+)\.html$ /list.php?id=$1 last;

  请注意:apache后则不能直接使用点和问号,所以将/list\.php\?id=$1中的”\”去掉,即:/list.php?id=$1

  然后,将RewriteRule 换为 rewrite,并在在每条规则后加上”last;“

  这样逐条修改就完成了。

SVN自动同步到发布文件夹

首先做下语境定义,以下的所有说明,均基于以下设定:

客户端:开发人员用来编辑修改程序的电脑,可以是windows也可以是Linux、MacOS等

SVN端:提供SVN服务的电脑,通常简称为SVN服务器

Web服务器:提供Web SVN服务的电脑,在本文中和SVN端共用一台电脑。

这三者之间的关系:开发人员在客户端,用TortoiseSVN等单独的SVN客户端,或者内嵌SVN功能的IDE,如Zend Studio,将自己编写的代码同步到SVN端,这一步,一般来说,开发人员只需拿到属于自己的用户名密码、属于自己的项目就好了,不用多说;但是SVN端对这些数据都是二进制文件的方式保存成数据库,无法直接用肉眼查看,所以我打算在这台服务器上建立Web服务器,将数据从SVN端同步到Web服务器,这样就可以成为一个测试服务器,开发人员写完代码,SVN同步一下,就可以在Web服务器上看到效果。



服务器配置:

硬件:普通Intel CPU的PC机

操作系统:FreeBSD 64-bit

主要软件:Nginx、MySQL、PHP、Subversion(独立版,因为没装Apache)

SVN库保存目录设定:/var/svn

xy280库的保存目录:/var/svn/xy280

Web服务的Document Root:/var/vhosts/

xy280项目对应的目录:/var/vhosts/test.xxx.com



cd /var/vhosts/test.xxx.com

(注意,本项目在公网上是保存在二级目录下的,所以要先进入顶级目录,这样从SVN端同步到Web服务器时,就可以正好将带出的目录作为二级目录,如果项目保存在顶级目录下的话,这里就要进入Document Root)

svn co file:///var/svn/xy280

这一步就是将SVN库中的数据拷贝到Web服务器上的对应目录

进入xy280库目录下的hooks目录,将post-commit.tmpl拷贝为post-commit,去除所有原有未被注释的语句,输入以下

SVN=/usr/local/bin/svn

WEB=/var/vhosts/xytest.xxx.com/xy280
CHOWN=/usr/sbin/chown
CHMOD=/bin/chmod
 
cd /var/vhosts/xytest.xxx.com/xy280
$SVN cleanup
cd /var/svn/xy280/hooks
$SVN update –username aaa –password bbb $WEB //这里的用户名密码无论是字母数字,均无需加双引号
 
$CHOWN -R svn:svn /var/vhosts/xytest.xxx.com/xy280

$CHMOD -R 757 /var/vhosts/xytest.xxx.com/xy280/.svn

退出后chmod +x post-commit,给该文件加上执行权限,chown svn:svn post-commit,使之属于SVN用户,SVN组,拥有足够权限以便被执行

进入/usr/local/etc/nginx,修改nginx.conf

将原来user www www;修改为user svn svn;这一修改的目的是保证SVN和Nginx使用同样的用户名和组,从而最大限度地避免权限不够的问题

在another server这一块给你的域名做设置,基本类似于此:

    server {

        listen 80;
        server_name xytest.xxx.com;
        root /var/vhosts/xytest.xxx.com;
        index index.php;
 
        location ~ \.php$ {
         fastcgi_pass 127.0.0.1:9000;
         fastcgi_index index.php;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include fastcgi_params;
        }
        access_log /var/log/access_xytest.xxx.com.log main;

    }

这样基本上就可以达到我们的目的了

触发器实现Mysql同服务器跨库同步

我用了discuzX2.0来展示内容,但是考虑到Discuz是得升级的,数据库结构之类的说不定就调整了,自己的应用数据要单独出来,因此就产生了这两个数据库的某些内容进行同步的需求。查了一下,触发器。网上搜了下代码,报了1046错误。原因是没有用delimiter设置分隔符,而本来sql中又有分号,另一个原因就是delimiter得放在drop后面,这个为什么没懂,暂时也不追究,我想实现了再说。代码如下:

DROP TRIGGER IF EXISTS t_afterinsert_on_post;delimiter //CREATE TRIGGER t_afterinsert_on_post  AFTER INSERT ON 数据库1.1FOR EACH ROWBEGIN  insert into 数据库2.2(字段2) values(new.字段1);END;//delimiter ;

语句分隔符是可以自己设置的。触发器的一些内容请参见:http://yxgyh.iteye.com/blog/222671


Fckeditor上传图片文件名重名及中文乱码解决方法

经测试Fckeditor2.6.6并没有解决上传文件中文名变为乱码的问题,这是由于Fckeditor实现上传功能时并没有将文件重命名,容易导致上传图片文件重名及乱码问题。

  上传图片文件重名和乱码解决方法如下

  打开editor/filemanager/connectors/php目录下commands.php,找到FileUpload函数,在

$sExtension = substr( $sFileName, ( strrpos($sFileName, ‘.’) + 1 ) ) ;
$sExtension = strtolower( $sExtension ) ;

后添加

 
$sFileName = rand(0,100).”.”.$sExtension;

 

此处rand函数可根据需要自行改变重命名规则。


根据需要,我在这里将重命名规则改为以下。

$sFileName=date('Ymdhis').rand(1000,9999).'.'.$sExtension;

ECshop实现同时显示购物车方式和一步购物方式

工作需要,要研究这个问题。屡思不得,遂放狗上网。狗吠曰:


在后台开启一步购物 则可以不用到购物车 直接结算 。从而实现立刻购买。然而购物车的功能又没有了。有没有像淘宝那样即可以立刻购买。又有购物车功能呢。?

首先 我们先将添加购物车的跳转链接复制粘贴到收藏商品的按钮上 然后设一个bool值为1 。

<a href=”javascript:bool =1;addToCart({$goods.goods_id})”>。然后直达JS处理页面common.js 在这个脚本的第一行代码之上加一个全局变量var bool =0; 然后查找点击购物车之后的那条链接即:flow.php?step=cart 

找到这个(在第88行 那块)之后 然后在下面加这句话 (bool == 1) && (cart_url = ‘flow.php?step=consignee’);

意思是 当bool = 1 条件满足时 则cart_url链接到  ‘flow.php?step=consignee’ 直接购买的页面

大致就是这样子了   从而实现立刻购买与添加到购物车并存的方法。


但是,我使用的ECshop是最新的2.7.2版,在common.js的88行没有找到那段代码,后来在大约92行的样子找到了,在后面加上了作者写的那段代码,依然出错。继续在common.js搜索作者提到的flow.php?step=cart,发现在890到900行的样子,还有一处,在这一行下面也加上作者的代码,这才OK。


为了保证更丰富地进行设置,我又做了如下调整。

1,数据库里shop_config表code字段,one_step_buy属性增加值2
2.language/admin/shop_config.php,增加
$_LANG['cfg_range']['one_step_buy']['2'] = ‘同时开启购物车和一步购物’;
修改
$_LANG['cfg_range']['one_step_buy']['0'] = ‘开启购物车’;
$_LANG['cfg_range']['one_step_buy']['1'] = ‘开启一步购物’;
3、include/lib_common.php,去除
$arr['one_step_buy']         = empty($arr['one_step_buy']) ? 0 : 1;
4、themes/模板名称/goods.dwt,增加“立刻购买”的图片,作者说的<a href=”javascript:bool =1;addToCart({$goods.goods_id})”>代码就加在“立刻购买”图片的<img>标签前后。

<!– {if $cfg.one_step_buy eq 1 or $cfg.one_step_buy eq 2} –>
<a href=”javascript:bool =1;addToCart({$goods.goods_id})”><img src=”images/bnt_subOrder.gif” width=”145″ height=”40″ /></a>
<!– {/if} –>
<!– {if $cfg.one_step_buy eq 0 or $cfg.one_step_buy eq 2} –>
<a href=”javascript:addToCart({$goods.goods_id})”><img src=”images/bnt_cat.gif” width=”72″ height=”41″ /></a>
<!– {/if} –>

以上代码的意思是,当“是否一步购物”的选择项选择1,也就是选择一步购物的时候或者同时开启两者的时候,显示“立刻购买”的图片,当“是否一步购物”的选择项选择0,也就是选择购物车的时候或者同时开启两者的时候,显示购物车的图片。

 

搜到的资料,来自于新浪博客陈耀雄氏,地址为http://blog.sina.com.cn/s/blog_6f5ae1880100o4dj.html。