使用curl执行一个php文件

我的问题:我在服务器A上有一个bash脚本,而在另一个服务器B上有一个php脚本。服务器A上的shell脚本用于在其他服务器上运行php脚本,但是前几天一个人将一个错误的rm -rf命令放在一个错误的目录中,并将其删除。 我有这个shell脚本的旧备份,但在第二个服务器上调用php脚本的代码丢失。 这几行(如果我记得好的话其实是一行)是几年前另一个人写的,谁又不和我们一起工作,我也不能联络她。 我不是一个PHP的人,这种语言是相当新的,并在过去两天searchnetworking上的一些提示,没有结果,我决定在这里张贴。

我作为可以运行shell脚本的用户login到服务器A. 我有另外几个用来login服务器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脚本。 我只知道这似乎是一个curl的电话,但我不确定。

以下是我的服务器的规格:

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

服务器B: PHP Version 4.3.9系统Linux verglas 2.6.9-34.ELsmp#1 SMP Fri Feb 24 16:54:53 EST 2006 i686

感谢您的阅读或帮助。

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

首先,请确保您可以从服务器A以无密码登录到服务器B.

如果不是这样,请使用ssh-copy-id将用户的公钥从serverA复制到serverB

然后,只需使用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