一个 cURL 执行另一个执行
One cURL does executing the other does
大家好,我正在处理 PHP、cURL 和 JSON 数据。
架构:
FRONT <-> MIDDLE <-> BACK
问题所在:
MIDDLE <-> BACK
描述:
在我的 MIDDLE 文件(PHP 服务器)中,我调用了一个函数,该函数将 cURL 生成到我的 BACK 文件( PHP 服务器)。
我遇到的问题是它会执行其中一个调用(HTTP cURL 请求)而不执行另一个调用,未执行的是第一个调用。
你们能指导我解决这个问题吗,我该如何解决?
我的尝试:
- 我研究(文章、视频)关于 curl 的信息,认为我可能必须处理它 mysql-like,如果我需要从同一个请求不同的项目,我必须创建多个 cURL 连接服务器(返回)。
- 我已经实现了虚拟打印输出以查看执行的内容并得出了我在 描述 部分中描述的结论。
注:
下面是MIDDLE、BACK和两张图片的代码:
- 图 1 是带有虚拟打印输出的代码,显示了一个 cURL 如何执行而另一个不执行。请注意文本 "what back gets".
- 图2是cURL没有执行的样子
中间文件:
注意:
看看在 "EXAMSOLVED" 情况下我如何调用两个函数。与图一有关
如果我注释掉与图2相关的第二个函数
<?php
/*------------------------------------------------------------------*/
include "exam_grading_system.php";
/*------------------------------------------------------------------*/
function http_post_back_server($url, $data)
{
$obj = curl_init();
curl_setopt($obj, CURLOPT_URL, $url);
curl_setopt($obj, CURLOPT_POST, strlen($data));
curl_setopt($obj, CURLOPT_POSTFIELDS, $data);
curl_setopt($obj, CURLOPT_RETURNTRANSFER, true);
$ans = curl_exec($obj);
curl_close($obj);
return $ans;
}
//--------------------------------------------------------------------
function get_question_info($ulr, $id_question)
{
//Set UP Request Packet
$askDB->case = "GradingInfo";
$askDB->id_question = $id_question;
//Convert Packet to JSON format
$askDB = json_encode($askDB);
//echo $askDB;
//Ask Back Server
$BK_Srv_Ans = http_post_back_server($url,$askDB);
return $BK_Srv_Ans;
}
//--------------------------------------------------------------------
/*URL TO BACK SERVER*/
$url_myserver = "https: MY URL ";
/*GLOBAL VARS*/
$back_ans ="";
/*RECEIVE DATA FROM POST REQUEST*/
$indata = file_get_contents("php://input");
$data = json_decode($indata,true);
/*MAKE REQUEST TO SERVERS*/
switch($data["case"]){
case "_EXAMSOLVED_":
$questions_Info = get_question_info($url_myserver, $data["id_question"]);
//$indata = Grading($data, $questions_Info);
//$back_ans = http_post_back_server($url_myserver,$indata);
break;
default:
$back_ans = http_post_back_server($url_myserver,$indata);
break;
}
/*ANSWER BACK TO FRON END*/
echo $back_ans;
?>
后备文件:
注意:看看我在文件开头的虚拟 echo 语句
<?php
/*------------------------------------------------------------------*/
include "Prof_backend_tools.php";
include "Student_backend_tools.php";
/*------------------------------------------------------------------*/
echo "what back gets: ";
/*RECEIVING DATA FROM POST REQUEST */
$indata = file_get_contents("php://input");
/*DATA TO JSON OBJ*/
$indata = json_decode($indata, true);
/*CHECKING DATABASE CONNECTIVITY */
if(mysqli_connect_error())
{ echo "Connection Error: ".mysqli_connect_error; }
switch($indata["case"])
{
case "_EXAMSOLVED_":
echo store_exam_slutions($indata,DB_s());
break;
case "GradingInfo":
echo "--IN BACK--";
//echo Needed_data_for_grading($indata);
break;
default:
echo "NADA";
break;
}
?>
图片1:
图2:
任何指南都会很棒。
谢谢。
好的,我发现发生了什么!!!
调试中:
- 检查中间文件。
- 检查函数定义中的参数get_question_info
- 现在检查函数调用的参数 http_post_back_server
- 问题就出在这里。
大家好,我正在处理 PHP、cURL 和 JSON 数据。
架构:
FRONT <-> MIDDLE <-> BACK
问题所在:
MIDDLE <-> BACK
描述:
在我的 MIDDLE 文件(PHP 服务器)中,我调用了一个函数,该函数将 cURL 生成到我的 BACK 文件( PHP 服务器)。
我遇到的问题是它会执行其中一个调用(HTTP cURL 请求)而不执行另一个调用,未执行的是第一个调用。
你们能指导我解决这个问题吗,我该如何解决?
我的尝试:
- 我研究(文章、视频)关于 curl 的信息,认为我可能必须处理它 mysql-like,如果我需要从同一个请求不同的项目,我必须创建多个 cURL 连接服务器(返回)。
- 我已经实现了虚拟打印输出以查看执行的内容并得出了我在 描述 部分中描述的结论。
注:
下面是MIDDLE、BACK和两张图片的代码:
- 图 1 是带有虚拟打印输出的代码,显示了一个 cURL 如何执行而另一个不执行。请注意文本 "what back gets".
- 图2是cURL没有执行的样子
中间文件:
注意: 看看在 "EXAMSOLVED" 情况下我如何调用两个函数。与图一有关
如果我注释掉与图2相关的第二个函数
<?php
/*------------------------------------------------------------------*/
include "exam_grading_system.php";
/*------------------------------------------------------------------*/
function http_post_back_server($url, $data)
{
$obj = curl_init();
curl_setopt($obj, CURLOPT_URL, $url);
curl_setopt($obj, CURLOPT_POST, strlen($data));
curl_setopt($obj, CURLOPT_POSTFIELDS, $data);
curl_setopt($obj, CURLOPT_RETURNTRANSFER, true);
$ans = curl_exec($obj);
curl_close($obj);
return $ans;
}
//--------------------------------------------------------------------
function get_question_info($ulr, $id_question)
{
//Set UP Request Packet
$askDB->case = "GradingInfo";
$askDB->id_question = $id_question;
//Convert Packet to JSON format
$askDB = json_encode($askDB);
//echo $askDB;
//Ask Back Server
$BK_Srv_Ans = http_post_back_server($url,$askDB);
return $BK_Srv_Ans;
}
//--------------------------------------------------------------------
/*URL TO BACK SERVER*/
$url_myserver = "https: MY URL ";
/*GLOBAL VARS*/
$back_ans ="";
/*RECEIVE DATA FROM POST REQUEST*/
$indata = file_get_contents("php://input");
$data = json_decode($indata,true);
/*MAKE REQUEST TO SERVERS*/
switch($data["case"]){
case "_EXAMSOLVED_":
$questions_Info = get_question_info($url_myserver, $data["id_question"]);
//$indata = Grading($data, $questions_Info);
//$back_ans = http_post_back_server($url_myserver,$indata);
break;
default:
$back_ans = http_post_back_server($url_myserver,$indata);
break;
}
/*ANSWER BACK TO FRON END*/
echo $back_ans;
?>
后备文件:
注意:看看我在文件开头的虚拟 echo 语句
<?php
/*------------------------------------------------------------------*/
include "Prof_backend_tools.php";
include "Student_backend_tools.php";
/*------------------------------------------------------------------*/
echo "what back gets: ";
/*RECEIVING DATA FROM POST REQUEST */
$indata = file_get_contents("php://input");
/*DATA TO JSON OBJ*/
$indata = json_decode($indata, true);
/*CHECKING DATABASE CONNECTIVITY */
if(mysqli_connect_error())
{ echo "Connection Error: ".mysqli_connect_error; }
switch($indata["case"])
{
case "_EXAMSOLVED_":
echo store_exam_slutions($indata,DB_s());
break;
case "GradingInfo":
echo "--IN BACK--";
//echo Needed_data_for_grading($indata);
break;
default:
echo "NADA";
break;
}
?>
图片1:
图2:
任何指南都会很棒。 谢谢。
好的,我发现发生了什么!!!
调试中:
- 检查中间文件。
- 检查函数定义中的参数get_question_info
- 现在检查函数调用的参数 http_post_back_server
- 问题就出在这里。