According to the man:
The cron daemon starts a subshell
from your HOME directory. If you
schedule a command to run when you are
not logged in and you want commands
in your .profile file to run, the
command must explicitly read your
.profile file.
The cron daemon supplies a default
environment for every shell, defining
HOME, LOGNAME, SHELL (=/usr/bin/sh),
and PATH (=/usr/bin).
So cron daemon doesn't know where php is and you should specify the full php path by hand, for example (I don't know your real PHP path):
#!/bin/sh
/usr/local/bin/php /home/v/file.php
sh /root/x/some.sh
Another way is to source the /etc/profile (or your .profile/.bashrc), for example
* * * * * . /home/v/.bashrc ; sh /home/v/test.sh
This is useful if your .bashrc set the environment variables that you need (i.e. PATH)
EDIT
An interesting reading is "Newbie: Intro to cron", don't undervalue the article from the title (It's a reading for everybody), in fact it's well written complete and answer perfectly to your question:
...
PATH contains the directories which
will be in the search path for cron
e.g if you've got a program 'foo' in
the directory /usr/cog/bin, it might
be worth adding /usr/cog/bin to the
path, as it will stop you having to
use the full path to 'foo' every time
you want to call it.
...