Anndexi9
Anndexi9

Reputation: 141

file_get_contents does not work for getting json from API in PHP 7

I juz upgraded php from 5.6 to 7.2.

Before 7.2, both file_get_contents worked fine for getting json from API but after upgrade to 7.2, it returned false.

file_get_contents($url) => false

The url is like this: 'https://username:password@project_domain/api/json/xxx/?param_a=' . $a . '&param_b='. $b

And I didn't even touch the default setting in php.ini which is probably related to file_get_contents: allow_url_fopen = On

I did google for this but there is no straight answer for my problem.

What is the reason for this?

How to fix to it?

Thanks!

Upvotes: 1

Views: 2673

Answers (2)

F5 Buddy
F5 Buddy

Reputation: 494

$url = "https://www.f5buddy.com/";

$options = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
          "User-Agent: Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7\r\n"
));

$context = stream_context_create($options);
$file = file_get_contents($url, false, $context);
$file=htmlentities($file);
echo json_encode($file);

Upvotes: 1

Anndexi9
Anndexi9

Reputation: 141

Finally got it with curl. It only worked when I skipped the ssl stuff. It is juz https to own project anyway so it shouldn't be a problem in security.

function getJsonFromAPI($url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $result = curl_exec($ch);
    curl_close($ch);
    $data = json_decode($result);

    return $data;
}

Btw, I found out file_get_contents only worked for https to external url but not for https connection to the project itself. Any fix to that is appreciated.

Upvotes: 0

Related Questions