繁体   English   中英

file_get_contents在服务器上不起作用,但在本地计算机上可以正常工作

[英]file_get_contents not working on the server but working fine on local machine

我有一个调用Web服务以检索json数据的php脚本,该脚本在我的本地计算机上运行良好,但在在线服务器上却不工作,它返回空字符串

$url = "https://magentoorders.elarabygroup.com/Service.asmx/AvailableToPromise";
try {
$contextOptions = array(
   'http'      => array(
    'method' => "POST",
    'timeout' => 500,
    'header' => "Accept-language: en\r\n" .
                "Content-Type: application/json\r\n".
                    "Content-Length: 0"
    )
);
$context = stream_context_create($contextOptions);
var_dump(file_get_contents($url, false, $context));
} catch (Exception $e) {
}

您需要检查您的服务器是否允许file_get_contents()打开URL。 检查您的php.ini或服务器配置中allow_url_fopen是否设置为true。

您可以查看此链接以获得更多帮助

手册中的信息

allow_url_fopen布尔值

此选项启用URL感知的fopen包装器,该包装器允许访问URL对象(如文件)。 提供了默认包装器,以使用ftp或http协议访问远程文件,某些扩展名(如zlib)可能会注册其他包装器。

另一种选择是使用CURL

手册所述

如果启用了fopen包装器,则可以将此功能用作URL的文件名。 有关如何指定文件名的更多详细信息,请参见fopen()。 请参阅受支持的协议和包装器,以获取有关各种包装器具有的功能,其使用说明以及它们可能提供的任何预定义变量的信息的链接。

因此主机上未启用fopen包装器

我通过使用此代码解决了它

  $ch = curl_init();
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch,CURLOPT_POST, 1);                 
  curl_setopt($ch,CURLOPT_POSTFIELDS,'');
  curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,200);
  curl_setopt($ch,CURLOPT_TIMEOUT, 200);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json'
  ));
  $response = curl_exec($ch);

就我而言,出于某些奇怪的原因,我的旧服务器设置不会使用此代码添加标头

$header = "Authorization: key=AAAAiQXvgZA:APA91bGKc12FiRd3l3jz\r\n"."Content-Type: application/json\r\n"."User-Agent: Mozilla/5.0 (iPad; U; CPU iPad OS 5_0_1 like Mac OS X; en-us)   AppleWebKit/535.1+ (KHTML like Gecko) Version/7.2.0.0 Safari/6533.18.5\r\n";

        $options = array(
            'http' => array(
              'method'  => 'POST',
              'content' => $data,
              'header' => $header,
              "ssl"=>array(
                              "verify_peer"=>false,
                              "verify_peer_name"=>false
                            )
            )
        );

      $context  = stream_context_create($options);

      $result = file_get_contents($url, false, $context);

在使用stream_context_create之前,我必须通过添加以下代码来解决:

ini_set("user_agent" , "Mozilla/3.0\r\nAccept: */*\r\nX-Padding: Foo\r\nAuthorization: key=AAAAiQXvgZA:APA91bGKc12FiRd3l3jzIgMVsF9Dkn25xF\r\nContent-Type: application/json");

希望有一天能对某人有所帮助,并为我的英语不好对不起!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM