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.
  ...