PHP中的file_exists无法按预期工作

时间:2015-03-05 21:56:51

标签: php html file-exists

对于我网站上的用户个人资料,他们可以上传1个个人资料图片。它可以是PNG,JPG,JPEG或GIF。现在我的问题是显示图像。基本上我想看看它有什么类型的文件扩展名,然后相应地显示文件。我试图用PHP中的 file_exists 函数来实现这一点,但它似乎不起作用! :(

如果我输入网址(例如,使用.png)

  

http://localhost/postin' /profiles/pictures/username.png

进入我的网址栏,它会显示该用户的图片。然后,如果我输入文件路径

  

C:/瓦帕/网络/ postin' /profiles/pictures/username.png

进入URL栏,它将显示该用户的图像。现在我的问题是,如果我在其中任何一个上执行PHP file_check 它总是说该文件不存在。这是我正在使用的代码:

<?php

$profileimagepath = "C:/wamp/www/postin'/profiles/pictures/";

$profileimageurl = "http://localhost/postin'/profiles/pictures/";

if (file_exists($profileimagepath.$username."."."png")) {   ?>
    <img src=<?php $profileimageurl.$username."."."png"; ?> id="accountpictureholderspecs">
<?php
}
elseif (file_exists($profileimagepath.$username."."."jpg")) {   ?>
    <img src=<?php $profileimageurl.$username."."."jpg"; ?> id="accountpictureholderspecs">
<?php
}
elseif (file_exists($profileimagepath.$username."."."jpeg")) {   ?>
    <img src=<?php $profileimageurl.$username."."."jpeg"; ?> id="accountpictureholderspecs">
<?php
}
elseif (file_exists($profileimagepath.$username."."."gif")) {   ?>
    <img src=<?php $profileimageurl.$username."."."gif"; ?> id="accountpictureholderspecs">
<?php
}
else {   ?>
    <img src="http://localhost/postin'/images/profileimage.png" id="accountpictureholderspecs">
<?php
}   
?>

在上面的例子中,用户名只是用户的用户名。所以我想知道为什么这段代码不起作用?谢谢!! :)

修改 这是我的整体文件路径:

C:\wamp\www\postin'\profiles\pictures\image.png

然而,当我输入时:

\pictures\image.png

它不起作用,图像不显示! :( 顺便说一句,我的目录结构:

Postin'
  Profiles
    Pictures
      image.png

2 个答案:

答案 0 :(得分:1)

来自php.net评论

使用file_exists时,似乎无法做到:

<?php 
foreach ($possibles as $poss) 
{ 
    if ( file_exists(SITE_RANGE_IMAGE_PATH .$this->range_id .'/ '.$poss .'.jpg') ) 
    { 
        // exists 
    } 
    else 
    { 
        // not found 
    } 
} 
?> 

所以你必须这样做:

<?php 
foreach ($possibles as $poss) 
{ 
    $img = SITE_RANGE_IMAGE_PATH .$this->range_id .'/ '.$poss .'.jpg' 
    if ( file_exists($img) ) 
    { 
        // exists 
    } 
    else 
    { 
        // not found 
    } 
} 
?> 

然后事情会好起来的。

至少在运行php 5.2.5和apache 2.2.3

的Windows系统上就是这种情况

不确定它是否属于串联状态,或者那里的事实是不变的,我即将逃跑并测试......

答案 1 :(得分:1)

好吧,如果您不知道具体的优惠 - 请勿使用if/else语句。您无法涵盖小写/大写字母的所有可能组合。

我个人建议将图像转换为您喜欢的格式,当用户上传时,您就知道了,您在寻找什么!

如果出于某种原因无法做到这一点,您可以使用glob()查找用户上传的任何文件。

$profileimagepath = "C:/wamp/www/postin'/profiles/pictures/";
$profileimageurl = "http://localhost/postin'/profiles/pictures/";

$files = glob($profileimagepath . $username . ".*");

foreach($files AS $file){
  echo "Found an image: <br />";
  echo $file. "<br />";
  echo "External-Adress is: " . str_replace($profileimagepath, $profileimageurl, $file);
} 

然而,这需要处理多个文件并且... nah ...转换它,保存它,使用它!