使用curl执行php文件

时间:2014-02-21 18:27:14

标签: php linux bash shell curl

我的问题: 我在服务器A上有一个bash脚本,在另一台服务器上有一个php脚本,服务器B.服务器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 Fri 7月3日21:38:05 UTC 2009 i686

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

感谢阅读或帮助。

1 个答案:

答案 0 :(得分:1)

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

首先,确保您无需密码即可从服务器A登录服务器B.

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

然后,只需使用服务器A的ssh到服务器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