I write this from my phone, so I can't find the links to docs in an easy manner. I'll try to explain this as easy as possible: blockchains are distributed ledgers that can store information that can't be altered. They're mostly used now to store transactions info, but they can store anything. In a distributed app the blockchain would be the db. In order to store info on the blockchain one has to pay a transaction fee to the network. This transaction fee goes to the miners that validate the transaction. The ethereum network (and some others) can execute smart contracts: each node is able to execute such a contract. On the ethereum network, smart contracts are written in a language called solidity, which is similar to js. Having a smart contract executed also require a small amount to be paid. Smart contracts can interact with the blockchain: store and retrieve info from it, so the smart contract would be your PHP equivalent. The front end part is done on ethereum using their own, open source client, called mist. Mist is basically an electron app which can interact with an ethereum node. In order to use a distributed app, one has to use a smart contract, which resides at an address in the blockchain, using mist.
Of course, having all the dbs of all the apps replicated in every node is not really optimal and that will be solved using sidechains.
The part about the private messages and huge media files is not clear. If I want to share some message with my friends only should I encrypt the message using their public keys and publish the result on blockchain? Would those be $number_of_friends messages or is there a way to publish it just once? How expensive that would be? Should I use IPFS for media files? Has anybody ever implemented these parts in practice?
How can I convince people to use my Facebook killer app instead of Facebook if they have to pay for every action (update profile, send message, post something, etc.), the price is not clear in advance (who knows how much "gas" every action would cost), and the process of publishing is not instant (IIRC Facebook has 2 billions of active users, can Ethereum handle that scale? It's supposed to be used by thousands of different projects, right?).
What's sidechain? Is it something I have to develop myself (i.e. something Ethereum does not provide out of the box)? If that's the case why do I need Ethereum at all?
Of course, having all the dbs of all the apps replicated in every node is not really optimal and that will be solved using sidechains.