PHP runs the command via /bin/sh in both cases, the difference is in the shells, not PHP. dash forks the process to run the command (cat in this case) and waits for it to finish. bash does an execve(), so it replaces its own process with cat.
They seem to have fixed it in later versions though: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=436466
Using bash or the latest version of dash should fix your problem, since the executed command gets the PID of the spawned shell and thus receives the signals.