![](/img/trans.png)
[英]file_get_contents not working on production server, fine on local
[英]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.