Take a look at crc32.cpp. You'll need the data from "int32 CRC32Table[256]" at the top. Also the function "SetEQChecksum()" is passed a reference to the profile and it creates the checksum and then copies it into the profile.
I don't know if the checksum is actually used by the server, but it is set.
I wrote a C++ app a while back to display the profile using the profile struct from the server code. I started to make it write the profile back to the DB but was unsure of what type of problems it could create. I got lazy and never finished it.
I do know that some events cause the server to save the profile like a change in coin, zoning and inventory changes. Spells don't seem to cause the server to save the profile.
You'll need to unpack() the data with PHP unless you're just doing a string replace on the binary data. AndMetal wrote a nice PHP script to unpack the profile
here.