Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使文件获取内容(';php://input';)对http和https的支持_Php - Fatal编程技术网

如何使文件获取内容(';php://input';)对http和https的支持

如何使文件获取内容(';php://input';)对http和https的支持,php,Php,如何使文件\u获取\u内容('php://input“)以支持http和https,这样来自http或https的任何请求都可以顺利处理 在服务器上,我添加了重定向以将用户从http重定向到https。目前,我们的网站应用程序指向HTTP,下一版本的应用程序将连接到HTTPS。我必须返回对这两个版本的web服务的支持 我正在使用文件获取内容('php://input“)从应用程序的请求中获取变量,它适用于除JSON请求之外的所有请求 我在谷歌上搜索了很多,找到了下面的解决方案,但效果并不理想 $

如何使
文件\u获取\u内容('php://input“)
以支持http和https,这样来自http或https的任何请求都可以顺利处理

在服务器上,我添加了重定向以将用户从http重定向到https。目前,我们的网站应用程序指向HTTP,下一版本的应用程序将连接到HTTPS。我必须返回对这两个版本的web服务的支持

我正在使用文件获取内容('php://input“)从应用程序的请求中获取变量,它适用于除JSON请求之外的所有请求

我在谷歌上搜索了很多,找到了下面的解决方案,但效果并不理想

$opts = array('http' =>
    array(
        'follow_location' => 1,
    )
);
$context = stream_context_create($opts);
$result = file_get_contents('http://example.com/', false, $context);
我也试过同样的方法

$result = file_get_contents('php://input', false, $context);

我知道,您正在将选定的请求从http重定向到https,很可能是通过.htaccess规则。http或https协议应在某个特定时间使用

这意味着您的脚本应该通过file_get_contents()函数发出请求,该函数的协议与它本身被调用的协议相同。因此,没有必要“跟踪位置”

以下代码将从其自己的请求中获取协议,并将其用于辅助请求:

<?php
// Find out the protocol we were called
$encrypted = ((isset($_SERVER["HTTPS"])) && (strtoupper($_SERVER["HTTPS"]) == 'ON'));
$proto = ($encrypted) ? "https://" : "http://";

$opts = array(
    'http'=>array(
        'method'=>"GET",
    )
);

$context = stream_context_create($opts);

// Open a file with the headers defined.
// Use the same protocol as we were called
$file = file_get_contents($proto . 'www.example.com/path/test.php', false, $context);
echo "<pre>$file</pre>";

我知道,您正在将选定的请求从http重定向到https,很可能是通过.htaccess规则。http或https协议应在某个特定时间使用

这意味着您的脚本应该通过file_get_contents()函数发出请求,该函数的协议与它本身被调用的协议相同。因此,没有必要“跟踪位置”

以下代码将从其自己的请求中获取协议,并将其用于辅助请求:

<?php
// Find out the protocol we were called
$encrypted = ((isset($_SERVER["HTTPS"])) && (strtoupper($_SERVER["HTTPS"]) == 'ON'));
$proto = ($encrypted) ? "https://" : "http://";

$opts = array(
    'http'=>array(
        'method'=>"GET",
    )
);

$context = stream_context_create($opts);

// Open a file with the headers defined.
// Use the same protocol as we were called
$file = file_get_contents($proto . 'www.example.com/path/test.php', false, $context);
echo "<pre>$file</pre>";

您试图读取传入请求的请求正文,这意味着POST或PUT请求。但是,您也将此请求重定向到另一个URL您无法重定向POST/PUT请求,重定向后,它们将始终成为GET请求,请求正文将不会被转发

  • 客户→ 服务器:
    POST/foo{大量数据}
  • 客户← 服务器:谢谢,请看这里:
    302找到位置:/bar
  • 客户→ 服务器:
    GET/bar
    (看,没有数据!)
  • 您的问题不是PHP无法读取
    php://input
    如果请求是HTTPS,您的问题是根本没有要读取的请求正文,因为您已重定向了请求,并且在此过程中丢弃了正文


    客户端必须自行向正确的URL(HTTP或HTTPS)发出请求,并且您需要在第一次尝试时处理该请求,而无需重定向。

    您正在尝试读取传入请求的请求正文,这意味着POST或PUT请求。但是,您也将此请求重定向到另一个URL您无法重定向POST/PUT请求,重定向后,它们将始终成为GET请求,请求正文将不会被转发

  • 客户→ 服务器:
    POST/foo{大量数据}
  • 客户← 服务器:谢谢,请看这里:
    302找到位置:/bar
  • 客户→ 服务器:
    GET/bar
    (看,没有数据!)
  • 您的问题不是PHP无法读取
    php://input
    如果请求是HTTPS,您的问题是根本没有要读取的请求正文,因为您已重定向了请求,并且在此过程中丢弃了正文


    客户端必须自己向正确的URL(HTTP或HTTPS)发出请求,并且您需要在第一次尝试时处理该请求,而无需重定向。

    在web应用程序中,
    php://input
    读取已解密的请求正文。加密不会发生在PHP级别,而是发生在web服务器级别的一层之外。我的印象是你面临着一个特定的问题,但得到了一个错误的诊断。但由于您询问的是诊断而不是症状,我们无法真正帮助您。在web应用程序中,
    php://input
    读取已解密的请求正文。加密不会发生在PHP级别,而是发生在web服务器级别的一层之外。我的印象是你面临着一个特定的问题,但得到了一个错误的诊断。但既然你问的是诊断而不是症状,我们就帮不了你。我明白了。当我看到这个方向的问题时,我也找到了解决办法。我所需要的只是更新我的htaccess文件,问题在没有任何代码更新的情况下得到了解决。谢谢你告诉我正确的方向,我明白了。当我看到这个方向的问题时,我也找到了解决办法。我所需要的只是更新我的htaccess文件,问题在没有任何代码更新的情况下得到了解决。谢谢你告诉我正确的方向。