文件存在测试总是失败

问题描述:

<? 
$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="" />'; 
} 
?> 

大家好,这段代码应该检查一个文件,如果它不起作用,显示另一个。 由于某些原因,它始终显示占位符,即使它在那里也不会找到初始文件。 这里有什么显然不对吗? 感谢您的阅读!文件存在测试总是失败

+0

您是否尝试过使用根用户目录而不是相对路径的路径? – DeaconDesperado 2010-07-14 15:10:10

+0

当前工作目录可能不是你所期望的,realpath('../ images/users /')给你什么,或者getcwd()的输出? – Wrikken 2010-07-14 15:10:33

+0

你检查过$ user_images的值了吗?例如echo($ user_image) – macleojw 2010-07-14 15:12:14

请尝试使用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="" />'; 
} 
?> 
+0

干杯芽,这个工程。 – sark9012 2010-07-14 15:21:05

PHP运行在不同的目录中。尝试echo getcwd();

如果htdocs目录的子目录地区以外的相对路径点,则图像将不会被通过服务器

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脚本中使用的代码目录而不必改变任何东西。

+0

http://www.php.net/manual/en/function.file-exists.php#93572 – DeaconDesperado 2010-07-14 15:11:19

+0

谢谢...我正在添加该示例。 – Cristian 2010-07-14 15:11:58

+1

为什么不'realpath'? – Artefacto 2010-07-14 15:13:49

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

+0

驳斥它,它会解析为:'../ images/users/123a.jpg'如果$ userid是'123' – 2010-07-14 15:16:50

+0

没错,那正是我所说的。只是忘了.. – cwill747 2010-07-14 15:22:56

+0

这就是他想要的。 – 2010-07-14 15:52:26

我想你应该检查看看realpath('../images/users/' . $userid . 'a.jpg')返回什么。我觉得它与相对路径有关