小编Rog*_*ger的帖子

MongoDB:使用save()更新集合中的现有文档

每一个人.我喜欢漫画.而现在我也在学习爱蒙哥:-)

有一个解释说明如何使用save()来更新MongoDB PHP中集合中的现有文档?但我无法将其应用于PHP的"现实":-)

> var mongo = db.things.findOne({name:"mongo"});
> print(tojson(mongo));
{"_id" : "497dab624ee47b3a675d2d9c" , "name" : "mongo"}
> mongo.type = "database";
database
> db.things.save(mongo);
> db.things.findOne({name:"mongo"});
{"_id" : "497dab624ee47b3a675d2d9c" , "name" : "mongo" , "type" : "database"}
Run Code Online (Sandbox Code Playgroud)

这是我的测试代码:

<?php
$a=array('_id'=>'test_a','field1'=>'anything');
$b=array('_id'=>'test_a','field2'=>'anything else');

$m=new Mongo();
$c=$m->db->test;
$c->save($a);
$c->save($b);//overwrites the previous record

/*
//With update() it works fine
$filter=array('_id'=>'test_a');
$update=array('$set'=>array('field2'=>'anything else'));
$c->update($filter,$update);
//$c->save($filter,$update);//Also tried...
*/

$f=$c->find();
echo $f->count()." found \n";
$i=iterator_to_array($f);//mongo cursos iterator
$m->close();//disconnect mongo

print_r($i);
?>
Run Code Online (Sandbox Code Playgroud)

事实是,在PHP示例中,save()会覆盖该对象,而在JS示例中,它会更新它.我希望我可以像在JS中一样在PHP中重现.

提前致谢.

mongodb mongodb-php

8
推荐指数
1
解决办法
2万
查看次数

在Bash中运行PHP函数(并将返回值保存在bash变量中)

我试图在Bash中运行PHP函数...但它无法正常工作.

#! /bin/bash

/usr/bin/php << 'EOF'
<?php echo getcwd(); ?>
EOF
Run Code Online (Sandbox Code Playgroud)

在现实中,我需要将返回值保存在bash变量中......顺便说一句,我使用php的getcwd()函数来说明bash操作.

更新:有没有办法传递变量?

VAR='/$#'
php_cwd=`/usr/bin/php << 'EOF'
<?php echo preg_quote($VAR); ?>
EOF`
echo "$php_cwd"
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

php bash

7
推荐指数
2
解决办法
8653
查看次数

使用Bash中的sed转义域名中的点

我试图在变量中保持sed替换的返回:

我究竟做错了什么?

bash escaping sed

7
推荐指数
1
解决办法
1万
查看次数

如何使用PHP preg_replace正则表达式来查找和替换文本?

我写了这个PHP代码来做一些替换:

function cambio($txt){
    $from=array(
        '/\+\>([^\+\>]+)\<\+/', //finds +>text<+
        '/\%([^\%]+)\%/',   //finds %text%
    );

    $to=array(
        '<span class="P">\1</span>',
        '<span>\1</span>',
    );

    return preg_replace($from,$to,$txt);
}

echo cambio('The fruit I most like is: +> %apple% %banna% %orange% <+.');
Run Code Online (Sandbox Code Playgroud)

结果如下:

The fruit I most like is: <span class="P"> <span>apple</span> <span>banna</span> <span>orange</span> </span>.
Run Code Online (Sandbox Code Playgroud)

但是我需要识别水果的span标签,如下所示:

The fruit I most like is: <span class="P"> <span class="t1">apple</span> <span class="t2">banana</span> <span class="t3">coco</span> </span>.
Run Code Online (Sandbox Code Playgroud)

我买了一个水果,发现一个正则表达式来完成这个:-)


在Xavier Barbosa的帮助下,我来到了最后的解决方案:

function matches($matches){
    static $pos=0;
    return sprintf('<span class="t%d">%s</span>',++$pos,$matches[1]);
}

function cambio($txt){//Markdown da Atípico : Deve ser usado …
Run Code Online (Sandbox Code Playgroud)

php regex

5
推荐指数
1
解决办法
727
查看次数

使用php脚本中的rsync同步本地和远程文件夹,而无需输入密码

如何在php脚本中使用rsync同步本地和远程文件夹而不提示输入密码?

我已经设置了一个公钥来为我的用户自动登录远程服务器.

因此cli运行没有任何问题:

rsync -r -a -v -e "ssh -l user" --delete ~/local/file 111.111.11.111:~/remote/;
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试从PHP脚本(在我的本地服务器的网页上)运行相同的程序时:

$c='rsync -r -a -v -e "ssh -l user" --delete ~/local/file 111.111.11.111:~/remote/';
//exec($c,$data);
passthru($c,$data);
print_r($data);
Run Code Online (Sandbox Code Playgroud)

这是我收到的:

255
Run Code Online (Sandbox Code Playgroud)

并且没有文件从本地上传到远程服务器.

在网上搜索我发现了这个线索:

"你可以在这里使用BASh和Expect shell代码的组合,但它不会非常安全,因为这会自动执行root登录.为nobody或生成密钥apache(无论用户执行哪个Apache).或者,安装phpSuExec ,Suhosin或suPHP,以便脚本作为调用它们的用户运行."

好吧,我不知道如何"自动化root登录"PHP,它运行为"apache".也许是为了使脚本运行,因为实际的用户是一个更好的主意,我不知道...谢谢!

更新: - 因为这工作正常:

passthru('ssh user@111.111.11.111 | ls',$data);
Run Code Online (Sandbox Code Playgroud)

返回家庭垃圾箱列表,我可以肯定,自动登录没有问题.它是从PHP脚本运行rsync的东西.

  • 我还在本地和远程文件夹上有chmod -R 0777以防万一.但我还没有得到它.

更新:

所有问题都与以下事实有关:"当在命令行上运行时,ssh使用$ HOME/.ssh /上的密钥文件,但在PHP下,它使用Apache的用户运行,因此它可能没有$ HOME;更不用说$ $ HOME/.ssh/id_dsa.所以,要么专门告诉它使用哪个密钥文件,要么手动创建该目录及其内容."

虽然我无法获得rsync,但这是我将文件从本地传输到远程的方式:

if($con=ssh2_connect('111.111.11.111',22)) echo 'ok!';
if(ssh2_auth_password($con,'apache','xxxxxx')) echo ' ok!';
if(ssh2_scp_send($con,'localfile','/remotefolder',0755)) echo ' ok!';
Run Code Online (Sandbox Code Playgroud)

本地文件需求:0644远程文件夹需要:0775

我想如果解决方案不是用同一个用户bash运行php ...

@Yzmir Ramirez给出了这样的建议:"我认为你不想"将密钥复制到apache可以访问它的地方" - 这是违反安全规定的. …

php ssh rsync openssh

5
推荐指数
1
解决办法
9536
查看次数

PDF:在现有的 PDF 文件中插入一行文本

我有一个 PDF 文件,我希望在所有页面(前两页除外)的页脚添加一行纯文本(不是徽标或类似内容)。

有没有人有一个如何做到这一点的例子(用任何语言)?

更新: 原始 PDF 是用 Scribus 制作的,我可以完全控制它。因此,如果更容易进行查找和替换操作,那也很好。

php pdf bash

5
推荐指数
1
解决办法
4286
查看次数

mv:无效选项 - '0'

如何在文件名前面用" - "重命名文件,例如:" - 0001.jpg"

我尝试运行的每一次:

for i in *; do mv "$i" "${i//-/}"; done
Run Code Online (Sandbox Code Playgroud)

要么:

for i in *; do mv "$i" "${i#*-}"; done
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

mv: invalid option -- '0'
Try `mv --help' for more information.
Run Code Online (Sandbox Code Playgroud)

谢谢你的光!

bash command-line-interface mv batch-rename

4
推荐指数
3
解决办法
7681
查看次数

JQuery:在ajax加载后关注textarea

我正在使用Ajax加载表单的一部分.如何在ajax请求之后关注textarea对象?

这是加载的html:

<legend>Test</legend>
<label for="t">This is only a test</label>
<textarea></textarea>
<a href="#" class="continue">Continue</a>
Run Code Online (Sandbox Code Playgroud)

这是JQuery/Ajax代码:

$.post(
    'ajax.php',
    { next:next },
    function(data){
        $('body').append($(data).hide().fadeIn('slow'));
    }
);
Run Code Online (Sandbox Code Playgroud)

谢谢.

ajax jquery focus

4
推荐指数
1
解决办法
5915
查看次数

Bash - wget和mv"命令未找到"

我在bash中有这个基本脚本:

SOFT=apt-fast
FILE=$SOFT.sh
PATH=$SRCF/$FILE
WWW=http://www.mattparnell.com/linux/apt-fast/$FILE
EXEC=/usr/bin/apt-fast
wget -v -U firefox $WWW -O $PATH
mv $PATH $EXEC
Run Code Online (Sandbox Code Playgroud)

渲染的代码(打开调试)如下:

SOFT=apt-fast
+ SOFT=apt-fast
FILE=$SOFT.sh
+ FILE=apt-fast.sh
PATH=$SRCF/$FILE
+ PATH=/home/rgr/src/apt-fast.sh
WWW=http://www.mattparnell.com/linux/apt-fast/$FILE
+ WWW=http://www.mattparnell.com/linux/apt-fast/apt-fast.sh
EXEC=/usr/bin/apt-fast
+ EXEC=/usr/bin/apt-fast
wget -v -U firefox $WWW -O $PATH
+ wget -v -U firefox http://www.mattparnell.com/linux/apt-fast/apt-fast.sh -O /home/rgr/src/apt-fast.sh
cleanstart.sh: line 132: **wget: command not found**
mv $PATH $EXEC
+ mv /home/rgr/src/apt-fast.sh /usr/bin/apt-fast
cleanstart.sh: line 133: **mv: command not found**
exit
+ exit
Run Code Online (Sandbox Code Playgroud)

我几乎尝试了所有的事情......我在这里犯了多么愚蠢的错误?该剧本如下所示:

sudo bash -vx script.sh #-v用于详细,-x用于打开调试模式

谢谢.

bash command-line-interface

2
推荐指数
1
解决办法
4481
查看次数

Bash - 如何知道我的Linux服务器IP地址?

有没有办法回显来自Bash的服务器ip地址?我在Linux/Debian6上.

我的意图是为我在服务器中注册的每个新域写入"/ etc/hosts"对domain_name IP.

由于这个bash脚本将打开供公众使用,我试图找到一种通过cli获取此信息的方法.

结论:

这是最终的代码,基于我的朋友帮助我的线索:

newhost() {
    DMN=$1
    X=`ifconfig | grep Bcast`
    Y=`echo "${X#*:}"`
    DNS=`echo "${Y%\  B*}"` # server DNS(207.112.37.222)
    H='/etc/hosts' #hostfile
    PAIR="$DNS\t$DMN"
    if grep -i --silent "$DMN" "$H"; then
        echo -e "$DMN already exists in $H"
    else
        bash <<EOF
echo -e "$PAIR" >> "$H"
EOF
        echo -e "$PAIR added to $H"
    fi
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,一些天生就已经聪明的家伙投票结束这个问题,这不是很有趣吗?

谢谢.

ip bash command-line-interface

1
推荐指数
1
解决办法
3431
查看次数

标签 统计

bash ×6

php ×4

command-line-interface ×3

ajax ×1

batch-rename ×1

escaping ×1

focus ×1

ip ×1

jquery ×1

mongodb ×1

mongodb-php ×1

mv ×1

openssh ×1

pdf ×1

regex ×1

rsync ×1

sed ×1

ssh ×1