This is because file_exists() reports broken symlinks as non-existent files:
[weirdan@server bin]$ ls -la
total 792
drwxr-xr-x 5 weirdan weirdan 4096 2008-03-05 00:36 .
drwxr-xr-x 12 weirdan weirdan 4096 2008-03-05 00:37 ..
drwxr-xr-x 6 weirdan weirdan 4096 2008-03-05 00:36 content
-rwxr-xr-x 1 weirdan weirdan 783673 2008-03-05 00:36 file
lrwxrwxrwx 1 weirdan weirdan 9 2008-03-05 12:10 php -> ../../php
drwxr-xr-x 5 weirdan weirdan 4096 2008-03-05 00:36 scheduler
drwxr-xr-x 6 weirdan weirdan 4096 2008-03-05 00:36 .svn
[weirdan@server bin]$ php -r 'var_dump(file_exists("php"));'
bool(false)
[weirdan@server bin]$ php -r 'var_dump(is_link("php"));'
bool(true)
In this example, there is no ../../php file, so symlink is broken.