每一个人.我喜欢漫画.而现在我也在学习爱蒙哥:-)
有一个解释说明如何使用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中重现.
提前致谢.
我试图在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)
有任何想法吗?
我试图在变量中保持sed替换的返回:
D=domain.com
echo $D | sed 's/\./\\./g'
Run Code Online (Sandbox Code Playgroud)
正确返回:domain\.com
D1=`echo $D | sed 's/\./\\./g'`
echo $D1
Run Code Online (Sandbox Code Playgroud)
返回:domain.com
我究竟做错了什么?
我写了这个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脚本中使用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的东西.
更新:
所有问题都与以下事实有关:"当在命令行上运行时,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可以访问它的地方" - 这是违反安全规定的. …
我有一个 PDF 文件,我希望在所有页面(前两页除外)的页脚添加一行纯文本(不是徽标或类似内容)。
有没有人有一个如何做到这一点的例子(用任何语言)?
更新: 原始 PDF 是用 Scribus 制作的,我可以完全控制它。因此,如果更容易进行查找和替换操作,那也很好。
如何在文件名前面用" - "重命名文件,例如:" - 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)
谢谢你的光!
我正在使用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)
谢谢.
我在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的服务器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)
顺便说一句,一些天生就已经聪明的家伙投票结束这个问题,这不是很有趣吗?
谢谢.