手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表全部文章

mongodb 的一些常规用法和疑问

mongoDB现在对于PHP来说已经用起来很方便了,pecl直接下载安装编译类库就OK了
先下载:https://github.com/mongodb/mongo-php-driver/tarball/master
然后tar zxvf master
进入目录 。。
$ phpize
$ ./configure
$ make install
看好文件存在哪里。就存在刚才解 开的目录下的modules目录里。有一个mongo.so,OK,拷到扩展目录,然后加一行配置:extension=mongo.so

重启apache。命令行下运行 php -i |grep mongo
黑黑,一下子可以看到几段信息了吧?

-------
安装mongodb,在ubuntu下来说实在是太容易了,比如:apt-get install mongodb一下子就完事了
不想一直运行?在测试的时候运行:mongod -journal -maxConns=2400 -rest
嗯,还提供rest风格的请求。。。

-----

PHP代码
  1. $a = $c->find(array('id'=>array('$gt'=>'10000'),'status'=>array('$ne'=>"1")));//->sort(array("pubdate"=>-1));  
  2. $result = iterator_to_array($a);  
  3. echo "<pre>";  
  4. print_r($result);  
  5. echo "</pre>";  

排序什么的都方便。。。只是在这里遇到点小问题
上面这段代码能够正常输出。只是我将status换成array('$in'=>array("0","9"))的时候,就一条数据也没有了。但明明是有的,比如 上面$ne = 1,即不等于1的情况(就是0和9),可以查询到数据。。。真纠结啊
明天再测试测试。

nohup命令让Linux程序永远在后台执行

一般 来说,我们如果需要在Unix/Linux下,让某个程序后台运行,很多都是使用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台:/usr/local/mysql/bin/mysqld_safe –user=mysql & ,不过并非每个程序都能够象mysqld一样可以做成守护进程。也许它只是普通程序而已,这时候即使用 & 结尾,如果终端关闭,那么程序也会被关闭。但为了能后台运行,就不得不使用nohup这个命令,比如我们有个start.sh需要在后台运行,并且希望在后台能够一直运行,那么就使用nohup:nohup /root/start.sh &

   

在shell中回车后提示:[~]$ appending output to nohup.out

    原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。但是有时候在这一步会有问题,当把终端关闭后,进程会自动被关闭,察看nohup.out可以看到在关闭终端瞬间服务自动关闭。这是因为,程序在提示了nohup成功后还需要按终端上键盘任意键退回到shell输 入命令窗口,然后通过在shell中输入exit来退出终端;如果你在nohup执行成功后直接点关闭程序按钮关闭终端。所以这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown。

nohup语法

  用途:不挂断地运行命令。
语法:nohup Command [ Arg … ] [ & ]
描述:nohup 命令运行由 Command 参数和任何相关参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示”and”的符号)到命令的尾部。

  无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

  退出状态:该命令返回下列出口值:

  126 可以查找但不能调用 Command 参数指定的命令。

  127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。

  否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

  nohup命令及其输出文件

  nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。

  该命令的一般形式为:nohup command &
       如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:nohup command > myout.file 2>&1 &

 

  在上面的例子中,输出被重定向到myout.file文件中。

Tags: nohup, 后台程序

HtmlPurifier的一个小问题:处理flash

在没有TIdy库的情况下,修复HTML我们是用htmlPurifier类库,但这个类库有点小问题。。。比如,对flash支持不好,虽然官网上有例子,可以支持yotube,不过,国内的flash视频站很多,我们不可能一一写扩展啦。怎么办?

后来有人说:

PHP代码
  1. $config->set('HTML.SafeObject', true);  
  2. $config->set('Output.FlashCompat', true);  
  3. $config->set('HTML.Allowed''object[width|height|data],param[name|value],embed[src|type|allowscriptaccess|allowfullscreen|width|height]');  

但经过测试,发现这样也不行。。不信?你去官网的Demo.php中测试一下就知道了。

测试代码可以是:
http://htmlpurifier.org/demo.php?filter[HTML.SafeObject]=1&filter[Output.FlashCompat]=1&filter[HTML.Allowed]=object[width|height|data],param[name|value],embed[src|type|allowscriptaccess|allowfullscreen|width|height]&html=%3Cp%3E%3C%2Fp%3E%3Cp%3E%3Cembed+src%3D%22http%3A%2F%2Fplayer.youku.com%2Fplayer.php%2Fsid%2FXMzIwMjQ5NTk2%2Fv.swf%22+allowfullscreen%3D%22true%22+quality%3D%22high%22+width%3D%22480%22+height%3D%22400%22+align%3D%22middle%22+allowscriptaccess%3D%22always%22+type%3D%22application%2Fx-shockwave-flash%22%2F%3E%3C%2Fp%3E&submit=Submit

所以。如果stripos($data,"embed")!==false的话,还是不要用htmlpurifier过滤了。

参考:
1、http://htmlpurifier.org/docs/enduser-youtube.html(文中有为什么不支持embed的说明)

  1. <embed> is not recognized by W3C, so if you want standards-compliant code, you'll have to get rid of it.
  2. The code is exactly the same for all instances, except for the identifier AyPzM5WK8ys which tells us which movie file to retrieve.

2、http://stackoverflow.com/questions/1368809/allow-embed-object-param-html-tags-with-htmlpurifier(即使设置了allowed,还是不行)
3、http://htmlpurifier.org/phorum/read.php?5,2239,page=3 (在这里,也还是没有解决。寄希望于下一版了。。。)

Tags: htmlpurifier

MYSQL 复制表结构

mysql复制表结构有很多方法,其中最好用的要算是:create table newtable like oldtable
除此之外还有很多办法,如果用工具的话。当然是非常方便。。比如用navicat的时候,直接选中,复制粘贴就是一个新表。然后再Truncate table newtable就完事了

除此之外还有一些命令行:
1、create table newtable select * from oldtable ,这个和上面说的用navicat工具一样。复制完后还得truncate table

2、show create table oldtable ;这个会将原表的所有结构导出,不过,问题在于,表名要修改,itoa(递增的ID)要修改

3、mysqldump ,这个就不用说了。。。没啥意思。。。出来之后还得象第二步一样操作

所以,还是用create table newtable like oldtable。。。

GO 练习四

又是一个笔记:

    var tt = []int{1,2,3,4,5}
    for i,j:=0,len(tt)-1; i < j; i,j=i+1,j-1 {
        tt[i],tt[j] = tt[j],tt[i]
    }
    fmt.Println(tt);

本来以为for循环是很简单的。
我最初是这样写的
for i:=0,j:=len(tt)-1;i<j;i++,j-- {
    ..
}
结果直接报错:
# command-line-arguments
./tour.go:123: syntax error: unexpected comma, expecting {
./tour.go:126: non-declaration statement outside function body
./tour.go:127: syntax error: unexpected }
[Finished in 0.2s with exit code 2]

看了手册才明白。。我晶
------------------
顺便。数组有两个玩意:len,cap,理解的话一个可以当成现有长度,一个是最大长度。
如:tt := make([]int ,5)
这时候tt是被填充的{0,0,0,0,0}
如果 tt:=make([]int ,0,5);
这时候tt的最大长度是5,但结果是{},黑黑

Tags: 循环