检查文件时出现语法问题

时间:2010-12-31 00:48:31

标签: php

这段代码之前已经有效,但是我把C& P带到了一个新的地方,出于某种原因,它现在还没有工作!

        <?
        $user_image = '/images/users/' . $_SESSION['id'] . 'a.jpg';
        if (file_exists(realpath(dirname(__FILE__) . $user_image))) 
        {
            echo '<img src="'.$user_image.'" alt="" />';
        } 
        else 
        {
            echo '<img src="/images/users/small.jpg" alt="" />';
        }
        ?>

正如您所看到的,我正在检查一个文件,如果存在,则显示该文件,如果没有,则显示占位符。

$ _SESSION [&#39; id&#39;]变量确实存在,并且正在脚本中的其他地方使用。

任何想法是什么问题?

由于

1 个答案:

答案 0 :(得分:5)

好吧,让我们简单一点:

您的图像位于

/foo/bar/images/users/*.jpg

你的脚本在

/foo/bar/script.php

之前,哪个有效,因为realpath(dirname(__FILE__) . $user_image)创建了

/foo/bar/image/users/*.jpg

但现在,当你将您的脚本移动到同一级别的另一个目录(/foo/baz/script.php),上一个命令的输出将是

 /foo/baz/image/users/*.jpg

此路径不存在

您在评论中说过,您已将脚本移至另一个目录。如果你没有移动图像,你的脚本肯定会失败。


另请注意,通过URL(即从外部)或通过文件路径(即从内部)访问图像存在差异。您的图片将始终通过www.yourdomain.com/images/users提供,但如果您将PHP脚本移至另一个目录,dirname(__FILE__) 为您提供另一个值,因此测试将失败

foo/
|
- baz/
| |
| - script.php <-absolut path: /foo/baz/images/users/...
|
- bar/ <- entry point of URL is always here
  |
  - script.php <- absolut path: /foo/bar/images/users/...
  - images/    
    |
    - users/
      |
      - *.jpg

<强>更新

如果您的脚本低于图像,则修复可能是:

file_exists(realpath(dirname(__FILE__) . '/../' . $_SESSION['id'] . 'a.jpg'))

这将产生类似/foo/images/users/v3/../12a.jpg的内容。 ..意味着升级。

或使用$user_image

上升几个等级
realpath(dirname(__FILE__) . '/../../..' . $user_image)