Search code examples
phpcurlasynchronousfile-get-contents

file_get_contents synchronous or asynchronous


Today I came across one situation.

I am using file_get_contents to get token from a file for a user.

$data=file_get_contents("http://example.com/aaa.php?user=tester&akey=abcdef1234");
$dec=json_decode($data,true);
$tokenid=$dec['message']['result']['tokenid'];

Using the token i will call another file to get details;

$data=file_get_contents("http://example.com/bbb.php?user=tester&token=".$tokenid);

the problem is sometimes i am not getting tokenid, after refreshing the page i get it.

There is no problem in aaa.php its working fine.

I doubt whether php is not waiting for the response of the file_get_contents of token before going to the second file_get_contents(asynchronous);

I have tried with curl too but sometimes I am not getting tokenid. I haven't faced these kind of issues.


Solution

  • Definitely not a question of synchronous vs. asynchronous. But as is debugging is pretty impossible. Try something like this. The die statements are ugly but illustrates the validation you might want to incorporate...

    $data = file_get_contents("http://example.com/aaa.php?user=tester&akey=abcdef1234");
    if (empty($data)) die('Failed to fetch data');
    
    $dec = json_decode($data, true);
    if (is_null($dec) || $dec === false) die('Failed to decode data');
    
    $tokenid = isset($dec['message']['result']['tokenid']) ? $dec['message']['result']['tokenid'] : null;
    if (is_null($tokenid) die('Token ID is not set');
    
    //...
    
    $data=file_get_contents("http://example.com/bbb.php?user=tester&token=".$tokenid);
    

    A guess might be your token sometimes contains 'special' characters that need to be escaped.