使用curl执行一个php文件



我的问题:我在服务器a上有一个bash脚本,在另一台服务器B上也有一个php脚本。服务器a上的shell脚本用于在另一个服务器上运行php脚本,但几天前有人将一个错误的rm -rf命令放在错误的目录上并将其删除。我有这个shell脚本的旧备份,但在第二台服务器上调用php脚本的代码丢失了。这几行(事实上,如果我记得很清楚的话,其中一行)是几年前另一个人写的,他不再和我们一起工作了,我也无法联系她。我不是php用户,对这种语言还很陌生,在过去两天在网上搜索了一些技巧,但没有结果后,我决定在这里发布。

我以可以运行shell脚本的用户身份登录到服务器A上。我有另外两个用户名/密码用于登录服务器B。这个用户可以运行php脚本。下面是这个php脚本:

<?php
/*
php -f invoke_manage_auto_requests_files.php "create|delete|upload" "vide|pre|res|obs" "nrcc|cgcm|arpege|crcm|rc|sta|md|mds" id "processing|nom du fichier"
eg . php -f invoke_manage_auto_requests_files.php create pre nrcc 15678 processing
*/
if($argv[1] == "upload") {
$argv[5] = '@' .  realpath($argv[5]);
}
$post_fields = array( 'ACTION' => $argv[1] , 'PREFIX' => $argv[2] , 'REQ_TYPE' => $argv[3] , 'ID' => $argv[4] , 'FILE_CONTENT' => "$argv[5]");
$post_fields['VALIDATE'] = md5("This is legit");
$url = "http://serverB/scripts/manage_auto_requests_files.php";
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $post_fields );
curl_exec($ch);
curl_close($ch);
?>

我正在寻找打电话的方法:php -f invoke_manage_auto_requests_files.php create pre nrcc 15678 processing(例如)但从bash脚本来看。我只知道这似乎是一个紧急呼叫,但我不确定。

以下是我的服务器规格:

服务器A:PHP Version 4.4.4-8+etch6系统Linux hawa 2.6.26-bpo.2-686-bigmem#1 SMP 7月3日星期五21:38:05 UTC 2009 i686

服务器B:PHP Version 4.3.9系统Linux verglas 2.6.9-34.ELsmp#1 SMP美国东部时间2006年2月24日星期五16:54:53 i686

感谢您的阅读或帮助。

哼哼。这里不需要卷曲。用法注释让我认为php脚本应该从CLI执行,而不是从http web服务器执行。

首先,确保您可以在没有密码的情况下从服务器A登录到服务器B。

如果不是这样,请使用ssh-copy-id将用户的公钥从服务器A复制到服务器B

然后,只需使用ssh从服务器A到服务器B来运行脚本:

# Usage : call_server_b id
# @param string  action   "create|delete|upload"
# @param string  status   "vide|pre|res|obs"
# @param string  param3   "nrcc|cgcm|arpege|crcm|rc|sta|md|mds"
# @param integer id
# @param integer resource "processing|nom du fichier"
call_server_b() {
local usage="Usage: $0 action status param3 id resource"
if [ $# -ne 5 ]
then
echo $usage
fi
local action=$1;shift
local status=$1;shift
local param3=$1;shift
local id=$1;shift
local resource=$1
case $action in
create|delete|upload)
# all good
;;
*)
echo "wrong action parameter : " $action >&2
exit 1
;;
esac
case $status in
vide|pre|res|obs)
# all good
;;
*)
echo "wrong status parameter : " $status >&2
exit 1
;;
esac
case $param3 in
nrcc|cgcm|arpege|crcm|rc|sta|md|mds)
# all good
;;
*)
echo "wrong param3 parameter : " $param3 >&1
exit 1
;;
esac
case $resource in
processing|'nom du fichier')
# all good
;;
*)
echo "wrong resource parameter : " $resource >&1
exit 1
;;
esac

ssh user@serverB 
php -f /absolute/path/to/invoke_manage_auto_requests_files.php 
$action $status $param3 $id $resource
}
call_server_b create pre nrcc 15678 processing

最新更新