file_get_contents在服务器上不起作用,但在本地计算机

时间:2015-06-03 22:32:36

标签: php

我有一个调用Web服务的php脚本来检索json数据,脚本在我的本地计算机上工作正常但在联机服务器上没有工作它返回空字符串

$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) {
}

4 个答案:

答案 0 :(得分:1)

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

您可以查看this link以获得更多帮助

手册中的信息

  

allow_url_fopen boolean

     

此选项启用支持URL的fopen包装器,以便访问类似文件的URL对象。提供了使用ftp或http协议访问远程文件的默认包装器,像zlib这样的扩展可能会注册其他包装器。

另一种选择是使用CURL

答案 1 :(得分:0)

正如manual所说:

  

如果fopen,URL可以用作此函数的文件名   包装器已启用。有关如何使用的更多详细信息,请参见fopen()   指定文件名。请参阅支持的协议和包装   链接到有关各种包装器具有哪些功能的信息,   关于它们的使用和它们的任何预定义变量的信息的注释   可能会提供。

所以主机上没有启用fopen包装器

答案 2 :(得分:0)

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

  $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);

答案 3 :(得分:0)

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

$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");

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