gpt4 book ai didi

php - 使用 curl 执行一个 php 文件

转载 作者:太空狗 更新时间:2023-10-29 12:32:48 26 4
gpt4 key购买 nike

我的问题:我在服务器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 脚本。我只知道这似乎是 curl 调用,但我不确定。

这是我的服务器的规范:

服务器 A:PHP 版本 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 版本 4.3.9系统 Linux verglas 2.6.9-34.ELsmp #1 SMP Fri Feb 24 16:54:53 EST 2006 i686

感谢阅读或帮助。

最佳答案

嗯。这里不需要 curl 。用法评论让我觉得 php 脚本应该从 CLI 执行,而不是从 http 网络服务器执行。

首先,确保您可以从服务器 A 免密码登录到服务器 B。

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

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

# 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

关于php - 使用 curl 执行一个 php 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21942342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com