Generating Bitcoin Public and Private Keys I managed to write the below code which will create public and private keys

Private Key

$input = "satoshinakamoto";
$sha256 = hash("sha256", ($input));
echo "&lt;strong&gt;Private Key: &lt;/strong&gt;".$sha256."&lt;br/&gt;";


Public Key

    $step1 = hexStringToByteString("0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6");
    echo "&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; ".$step1."&lt;/p&gt;";
    $step2 = hash("sha256", $step1);
    echo "&lt;p&gt;&lt;strong&gt;Step 2: &lt;/strong&gt;".$step2."&lt;/p&gt;";
    $step3 = hash('ripemd160', hexStringToByteString($step2));
    echo "&lt;p&gt;&lt;strong&gt;Step 3: &lt;/strong&gt;".$step3."&lt;/p&gt;";
    $step4 = '00'.$step3;
    echo "&lt;p&gt;&lt;strong&gt;Step 4: &lt;/strong&gt;".$step4."&lt;/p&gt;";
    $step5 = hash("sha256", hexStringToByteString($step4));
    echo "&lt;p&gt;&lt;strong&gt;Step 5: &lt;/strong&gt;".$step5."&lt;/p&gt;";
    $step6 = hash("sha256",hexStringToByteString($step5));
    echo "&lt;p&gt;&lt;strong&gt;Step 6: &lt;/strong&gt;".$step6."&lt;/p&gt;";
    $step7 = substr($step6,0,8);
    echo "&lt;p&gt;&lt;strong&gt;Step 7: &lt;/strong&gt;".$step7."&lt;/p&gt;";
    $step8 = $step4.$step7;
    echo "&lt;p&gt;&lt;strong&gt;Step 8: &lt;/strong&gt;".$step8."&lt;/p&gt;";
    $step9 = bc_hexdec($step8);
    echo "&lt;p&gt;&lt;strong&gt;Step 9: &lt;/strong&gt;".$step9."&lt;/p&gt;";
    $step10 = bc_base58_encode($step9);
    echo "&lt;p&gt;&lt;strong&gt;Step 10: &lt;/strong&gt;1".$step10."&lt;/p&gt;";
    return $step10;


To generate public key I took reference from https://en.bitcoin.it/wiki/Technical_background_of_version_1_Bitcoin_addresses

In that link they provided Step by Step process and I followed the same and if 
I input from Step 1 in the link then I am able to convert the code to public key but I am not sure how to convert Step 0 to Step 1

i.e.

From:

18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725


To

0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6


Document says

Take the corresponding public key generated with it (65 bytes, 1 byte 0x04, 32 bytes corresponding to X coordinate, 32 bytes corresponding to Y coordinate)

What does that mean? How can I generate this value from Private Key.

Edit 1

This question says https://stackoverflow.com/questions/17672696/generating-bitcoin-address-from-ecdsa-public-key 

Joining the Elliptic Public Key and I still don't understand what are they.
Bitcoin uses point multiplication on the Elliptic Curve secp256k1 to generate a public key from a private key. Basically, this curve has a defined Generator point G, and a method for 'adding' two points together in a way to get a new point (EC Point Addition). 

Your private key is just a number, aka a Scalar, so to get your public key you just add the generator point to itself privkey number of times - basically scalar multiplication on the Elliptic curve. At the end, you'll end up with a point on the curve, with an X and Y coordinate, and this point is your public key. Those two coordinates of your point are what is referred to by the document you quoted, using 32 bytes for each coordinate plus a prefix.

The 0x04 prefix used is to denote the fact this is an uncompressed private key. You can also form a compressed version, by just using the X coordinate with either 0x02 or 0x03 prefix, because the Elliptic curve has only 2 values for Y coordinate for each X coordinate (one positive and one negative), so it's trivial to recover the Y coordinate if you know the X coordinate and the sign (based on your choice of prefix).