如何将 allow_url_fopen 更改为 cURL 模式?
Posted
技术标签:
【中文标题】如何将 allow_url_fopen 更改为 cURL 模式?【英文标题】:How to Change allow_url_fopen on to cURL Mode? 【发布时间】:2016-10-04 18:37:13 【问题描述】:几天前我遇到了file_get_contents
的问题,因为服务器有allow_url_fopen=0
规则
我试图通过使用allow_url_fopen=1
制作一个 php.ini 来改变这一点,但它不起作用。这是有问题的代码部分:
if($state == 5)
$request_services=RequestServices::where('request_id', $current_request->id)->first();
$address = urlencode(Input::get('address'));
$end_address = json_decode(file_get_contents("https://maps.googleapis.com/maps/api/geocode/json?address=$address"),TRUE);
$end_location = $end_address['results'][0]['geometry'];
$latitude = $end_location['location']['lat'];
$longitude = $end_location['location']['lng'];
$request_id = $current_request->id;
$walk_location_last = WalkLocation::where('request_id',$request_id)->orderBy('created_at','desc')->first();
if($walk_location_last)
$distance_old = $walk_location_last->distance;
$distance_new = distanceGeoPoints($walk_location_last->latitude,$walk_location_last->longitude,$latitude,$longitude);
$distance = $distance_old + $distance_new;
$settings = Settings::where('key','default_distance_unit')->first();
$unit = $settings->value;
$distance = $distance;
else
$distance = 0;
错误在这一行:
$end_address = json_decode(file_get_contents("https://maps.googleapis.com/maps/api/geocode/json?address=$address"),TRUE);
它使用谷歌地图页面 URL 调用 file_get_contents。我很难将其更改为 cURL,因为已阅读的内容是正确且最佳的选择。您能否通过使此代码作为 cURL 工作来帮助我。
提前致谢。我附上页面调试模式的屏幕截图
Image with error
【问题讨论】:
您的问题可能有很多原因,您可能会错过一些扩展或可能存在配置问题。还有一个使用curl
的替代解决方案。
【参考方案1】:
你必须确保以下几点:
HTTPS 包装器
确保您已安装 HTTPS 包装器:
$w = stream_get_wrappers();
echo 'openssl: ', extension_loaded ('openssl') ? 'yes':'no', "\n";
echo 'http wrapper: ', in_array('http', $w) ? 'yes':'no', "\n";
echo 'https wrapper: ', in_array('https', $w) ? 'yes':'no', "\n";
结果必须是:
openssl:是的
http 包装器:是的
https 包装器:是的
PHP.ini
确保选项已启用:
allow_url_fopen = On
替代方案
您也可以使用cUrl
:
function getSslPage($url)
$ch = curl_init();
// THIS LINE DISABLES CERTIFICATE VERIFICATION!!!
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);
return $result;
有关更多信息,请查看以下问题的答案:
How to get file_get_contents() to work with HTTPS? How to enable HTTPS stream wrappers【讨论】:
以上是关于如何将 allow_url_fopen 更改为 cURL 模式?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 SOAP 调用交换为 cURL,以在 allow_url_fopen 限制内工作?
如何使用带有c ++的opencv库将下图中的黑色像素更改为红色像素