They have slightly different purposes.
exec()
is for calling a system command, and perhaps dealing with the output yourself.system()
is for executing a system command and immediately displaying the output - presumably text.passthru()
is for executing a system command which you wish the raw return from - presumably something binary.
Regardless, I suggest you not use any of them. They all produce highly unportable code.