PHP file_exists($ var)不起作用

时间:2011-05-28 15:01:58

标签: php file-io

我正在尝试在笔记本上编写一些代码并使用xampp环境。我有以下代码:

class A {
...
  foreach ($blocks as $block) {
    $block = 'dir/dir2/' . $block;
  }
  if (file_exists($block) == true) {
    $var .= file_get_contents($block);
  }
}

当我在foreach循环中回显$ block变量时,它会返回文件的路径。但是,file_exists函数始终返回false。你能帮我解决一下这里有什么问题吗?

8 个答案:

答案 0 :(得分:8)

file_exists的目的是检查提供的文件是否存在。这是假的。这意味着你的文件不存在于php所在的位置。 php可能正在寻找与您预期不同的区域。看起来是时候进行一些调试了。

运行此命令以确定php的位置。

echo "current working directory is -> ". getcwd();

这是你想要php看的地方吗?如果没有,那么更改php正在使用chdir函数查找的目录。

$searchdirectory = "c:\path\to\your\directory"; //use unix style paths if necessary
chdir($searchdirectory);

然后运行你的函数(注意:我将斜杠翻转为反斜杠,以便与windows样式路径保持一致。)

class A {
...
  //change working directory
  $searchdirectory = "c:\path\to\your\directory"; //use unix style paths if necessary
  chdir($searchdirectory);

  foreach ($blocks as $block) {
    $block = 'dir\dir2\' . $block;

    if (file_exists($block) == true) {
      $var .= file_get_contents($block);
    }
  }
}

答案 1 :(得分:1)

引用某人评论php file_exists手册页

  

请注意:如果您传递相对路径   到file_exists,它将返回false   除非路径碰巧是相对的   到“当前的PHP目录”(见chdir()   )。

换句话说,如果您的路径是相对于当前文件目录的,则应将dirname(__FILE__)附加到相对路径,或者从PHP 5.3开始,您可以使用__DIR__

答案 2 :(得分:1)

可能为时已晚,但在最后2小时敲打我的头后才发现它的解决方案。如果您使用的是Windows,它默认会隐藏文件扩展名。因此a.txt将显示为a,显示为a.txt的文件实际上为a.txt.txt。要查看文件扩展名,请转到 控制面板 - >表现和个性化 - >文件夹选项 - >图
并取消选中隐藏文件扩展名。现在,您可以看到file_exists()中使用的真实名称。

答案 3 :(得分:1)

你正在混合斜线,这个让我疯狂。

以下是解决方案:

echo getcwd();
$searchimg = getcwd().'\\public\\images\\pics\\'.$value['name'].'.'.$value['ext'];

你需要引用这样的斜杠:)

答案 4 :(得分:0)

据我所知,您在file_exists循环之外使用foreach。因此,$block变量当时没有约束。

编辑:实际上它仍然绑定到集合中的最后一个值。

答案 5 :(得分:0)

您是否打算在foreach循环中检查file_exists()

class A {
  ...
  foreach ($blocks as $block) {
    $block = 'dir/dir2/' . $block;

    // Inside the loop      
    if (file_exists($block) == true) {
      $var .= file_get_contents($block);
    }
  }
}

答案 6 :(得分:0)

我想file_exists的检查与使用file_get_contents打开有点不同。所以我可能会遇到这些问题之一:

  • file_exists:如果由于安全模式限制而无法访问,则返回FALSE
  • file_exists:用于检查它使用真实的UID / GID而不是有效权利
  • file_get_contents:使用file_exists不知道的协议..

也许它可以帮助你进一步!祝你好运

答案 7 :(得分:-1)

如果您为文件使用变量,请确保末尾没有空格。我发疯了直到我找到了解决办法:用trim()删除空白。见下文。

if file_exists(trim($Filename))