文件存在的测试总是失败

时间:2010-07-14 15:07:06

标签: php

<?
$user_image = '../images/users/' . $userid . 'a.jpg';
if (file_exists($user_image)) 
{
    echo '<img src="'.$user_image.'" alt="" />';
} 
else 
{
    echo '<img src="../images/users/small.jpg" alt="" />';
}
?>

大家好,这段代码应该检查一个文件,如果它不起作用,则显示另一个。 由于某种原因,它始终显示占位符,即使它存在,也永远不会找到初始文件。 有什么东西显然不对吗? 谢谢你的阅读!

6 个答案:

答案 0 :(得分:4)

PHP正在另一个目录中运行。试试echo getcwd();

答案 1 :(得分:4)

file_exists不适用于相对路径。尝试这样的事情:

$user_image = $_SERVER{'DOCUMENT_ROOT'}.'/../images/users/' . $userid . 'a.jpg';
if (file_exists($user_image))
// blah blah

但是,正如Artefacto建议的那样,最好使用真实的路径:

$user_image = '/path/to/your/files/images/users/' . $userid . 'a.jpg';

它更容易维护,因为您可以在位于不同目录的不同PHP脚本上使用该代码,而无需更改任何内容。

答案 2 :(得分:2)

如果您的相对路径指向htdocs子目录之外,那么Web服务器将不会发送该图像

答案 3 :(得分:1)

请尝试使用realpathdirname

<?
$user_image = '../images/users/' . $userid . '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="" />';
}
?>

答案 4 :(得分:0)

我的意思是我并不总是最聪明的PHP,但你的concat位置是否正确?因为现在,它不会解析为/images/users/userida.jpg吗?这真的是你想要的吗?

答案 5 :(得分:0)

我认为您应该检查realpath('../images/users/' . $userid . 'a.jpg')返回的内容。我觉得它与相对路径

有关