【问题标题】:PHP file_get_contents blocked on my serverPHP file_get_contents 在我的服务器上被阻止
【发布时间】:2020-02-02 16:55:51
【问题描述】:

我在检索外部服务器发送给我的数据时遇到问题。我会更好地解释:为了更改数据库中记录的状态,我联系了一个外部应用程序,该应用程序将我在标题中创建的调用结果发送到应用程序。

现在,我的问题是:如果我的服务器中有 file_get_contents("php://input") 被阻止或限制,我是否有替代解决方案来检索该数据?如果是,它是什么?

编辑:这是一个代码示例。

//the function will be called every time the external server calls my file
function remoteValidation(){
    $requestData = file_get_contents("php://input");
    if (isset($requestData) && !empty($requestData) && $requestData['signature'] == $this->savedSignature) {
        // validation on the signature
    } else {
        throw new Exception ('The signature is not valid, or is empty!);
    }
}

【问题讨论】:

  • 您的服务器正在阻止“远程服务器连接”。请联系您的主机提供商以允许“file_get_contents()” php 功能。
  • 这个问题似乎有点混乱 - 是外部服务器连接到您的服务器(例如有人正在向您的服务器发出 POST 请求),还是您的服务器试图连接到外部服务器(cURL 到也许是一个 API)?
  • 你能提供一些示例代码吗?我理解您的问题是这样的:您的应用程序是从外部服务器调用的,并且您想访问请求的正文?另一方面,您提到了标题。如果您要查找的信息在标题中,则可以通过其他方式获取它。
  • @ahuemmer 我已经编辑了帖子以提供代码示例。
  • @CD001 外部服务器调用我的应用程序的特定文件,每次服务器调用它时,我都会触发函数“remoteValidation”,就像上面的代码示例中一样(在调用的文件中。我只需从对象的构造函数中触发它)。

标签: php web-applications server header-files file-get-contents


【解决方案1】:

file_get_contents("php://input") 将为您提供原始 数据,因此您将无法以数组形式访问它(如在$requestData['signature'] 中)。您首先必须根据其“真实”格式进行解析(如 json_decode,如果它是 JSON)。

替代方案 - 如果您绝对不能在您的服务器上使用 file_get_contents("php://input") - 将使用 GET 请求和 @CD001 声明或可能使用请求 headers 来传输您的信息.

如果您对外部服务器如何向您发送数据没有影响,则可以使用$HTTP_RAW_POST_DATA - 但请注意,如果您可以避免使用它,那么您不应该这样做,因为它已被弃用并被删除无论如何在 PHP7 中。

【讨论】:

    猜你喜欢
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 2022-08-15
    • 1970-01-01
    相关资源
    最近更新 更多