繁体   English   中英

检查文件时的语法问题

[英]Syntax problem when checking for a file

这段代码以前可以运行,但是我将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 ['id']变量确实存在,并且正在脚本中的其他地方使用。

任何想法是什么问题?

谢谢

好吧,简单点说:

您的图片在

/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/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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM