【问题标题】:file_get_contents HTTP request failed errorfile_get_contents HTTP 请求失败错误
【发布时间】:2021-10-19 04:59:04
【问题描述】:

所以我有 GetMessages.php,这个脚本从数据库 (MongoDB) 中获取数据。然后它向 MyMessagesMDB.php 发送一个 cURL POST。这是代码:

<?php
$FirstName = '';
$LastName = '';
$Email = '';
$Subject = '';
$Message = '';

GetFromDB();

echo $FirstName." ".$LastName;
echo "<br>";
echo $Email;
echo "<br>";
echo $Subject;
echo "<br>";
echo $Message;
echo "<br>";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://192.168.0.163/MyMessagesMDB.php");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,
            "FirstName=$FirstName&LastName=$LastName&Email=$Email&Subject=$Subject&TextMessage=$Message");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close($ch);

function GetFromDB(){
    $client = new MongoDB\Driver\Manager('mongodb+srv://####:####@####.tldyu.mongodb.net/Data');
    $filter = [];
    $options = [];
    $query = new MongoDB\Driver\Query($filter, $options);
    $cursor = $client->executeQuery('ContactMessages.ContactForm', $query);

    foreach($cursor as $document){
        $document = json_decode(json_encode($document),true);

        global $FirstName, $LastName, $Email, $Subject, $Message;
        $FirstName = $document['FirstName'];
        $LastName = $document['LastName'];
        $Email = $document['Email'];
        $Subject = $document['Subject'];
        $Message = $document['Message'];
    }
}
?>

MyMessagesMDB.php 是首先被调用的脚本。它调用 GetMessages.php,然后应该接收它发布的信息。代码如下:

<?php
$FirstLoop = true;
if($FirstLoop == true){
    file_get_contents('http://192.168.0.102/test/GetMessages.php');
    $FirstLoop = false;
}

$FirstName = $_POST["FirstName"] ?? "";
$LastName = $_POST["LastName"] ?? "";
$Email = $_POST["Email"] ?? "";
$Subject = $_POST["Subject"] ?? "";
$Message = $_POST["TextMessage"] ?? "";

echo $FirstName." ".$LastName;
echo "<br>";
echo $Email;
echo "<br>";
echo $Subject;
echo "<br>";
echo $Message;
echo "<br>";
?>

但这里开始我的问题。

如果我调用 MyMessagesMDB.php 我会收到错误:

PHP 警告:file_get_contents(http://192.168.0.102/test/GetMessages.php):打开流失败:HTTP 请求失败!。

如果我尝试手动加载页面,则不会出现错误,并且数据库中的数据会打印在屏幕上。

在 MyMessagesMDB.php 中,我这样评论以下行:

#file_get_contents('http://192.168.0.102/test/GetMessages.php');

我可以毫无问题地加载页面。

问题

如何从 MyMessagesMDB.php 调用 GetMessages.php 并从数据库中接收信息?

注意:我试过了

$curl_handle=curl_init();
curl_setopt($curl_handle, 
CURLOPT_URL,'http://###.##.##.##/mp/get? 
mpsrc=http://mybucket.s3.amazonaws.com/11111.mpg&mpaction=convert 
format=flv');
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Your application 
name');
$query = curl_exec($curl_handle);
curl_close($curl_handle);

【问题讨论】:

  • 在您的问题中,您能否将脚本 A 和 B 重命名为它们的文件名,这有点难以跟踪。
  • 是的,我的错。我改了!
  • 我有点糊涂,所以GetMessages调用了MyMessagesMDB,然后又调用了GeMessages,这不是无限循环吗?你想要完成什么?我也许可以就如何更好地组织代码提供一些提示
  • 所以 MyMessagesMDB.php 将是一个网页,将显示数据库中的内容,该文件将托管在我学校的服务器上。为了从数据库中获取数据,我调用 GetMessages.php,然后将内容发布到 MyMessagesMDB.php 页面。我无法从学校服务器直接连接到数据库,所以我需要 GetMessages.php 文件。它充当学校和数据库之间的中间人。
  • 啊,是的,我想我现在明白了。因此,您希望 MyMessagesMDB 既是您在本地运行以开始从数据库获取内容的脚本,也是接收信息的脚本?当前在您的 GetMessages 脚本中,如果其中有超过 1 个文档,它只会获取最后一条消息,这是有意的吗?

标签: php curl


【解决方案1】:

在我们的 cmets 来来回回之后,我认为您的实现比它需要的要复杂得多。而不是MyMessagesMDB.php既是流程的发起者又是数据的接收者,它只需要是一个发起者。

在此实现中,mdb.php 充当与您的数据库一起使用的脚本,它的全部工作是从 ContactMessages.ContactForm 查询中获取所有内容并将其输出为 JSON。

<?php

$client = new MongoDB\Driver\Manager('mongodb+srv://####:####@####.tldyu.mongodb.net/Data');
$filter = [];
$options = [];
$query = new MongoDB\Driver\Query($filter, $options);
$cursor = $client->executeQuery('ContactMessages.ContactForm', $query);

header('Content-Type: application/json');
echo json_encode($cursor);

然后你有get.php,你在学校的服务器上拥有它,它使用file_get_contents 来获取 JSON,然后将其转换回 PHP 数组,然后你可以输出你认为合适的任何内容。

<?php

$mdb_url = 'http://192.168.0.102/test/GetMessages.php';
$get = file_get_contents($mdb_url);
$decoded = json_decode($get, true);

foreach ($decoded as $document) {
    echo $document['FirstName'] . '<br>' . 
        $document['LastName'] . '<br>' . 
        $document['Email'] . '<br>' . 
        $document['Subject'] . '<br>' . 
        $document['Message'] . '<br><hr>';
}

【讨论】:

  • 目前没有任何回应,但我明天会检查一下,如果我能让它工作,我会告诉你。非常感谢!
  • 不客气,这是一个有趣的问题!让我知道你的进展:)
  • 您的解决方案有效,我只是更改了一些东西,现在我有了一个工作系统,非常感谢! @mulquin
  • @MikeAelbrecht 不客气,祝你一切顺利!
猜你喜欢
  • 2022-10-02
  • 2014-11-19
  • 2017-08-07
  • 2012-07-26
  • 2015-04-10
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 2016-06-02
相关资源
最近更新 更多