【问题标题】:Strange behaviour from file_exists来自 file_exists 的奇怪行为
【发布时间】:2014-01-22 15:14:09
【问题描述】:

我无法检查图像是否存在我曾尝试使用 file_exists 但总是得到错误的响应。

$fjpg = $code . ".jpg";
$imurl = "producers/$dir/images/$fjpg";
if(file_exists($imurl))
{

$cimage = <<<end
    <a href="$imurl"><span style="color:#990000;"><b>$code</b></span>:&nbsp; $desc</a></div></td>
    end;
    }
    $cimage = <<<end
    <span style="color:#990000;"><b>$code</b></span>:&nbsp; $desc</div></td>
    end;

由于我越来越沮丧,heredoc 就在那里。我已经结束了;在实际文件中它前面没有空格。更令人困惑的是,在同一个文件中工作正常如下

<?
if (file_exists("producers/$dir/header.php")) {
    include("producers/$dir/header.php");
}
?>

我尝试使用 is_file 获得相同的结果。 我已经交换了这两个语句并使用提供的链接来访问文件,所以我的假设是 $imurl 提供了一个可行的路径,而不是 file_exists 需要的路径。 我按照 Jompper 的建议使用了 echo getcwd(); 并得到 /home/caliver/public_html/figures

【问题讨论】:

  • 您能告诉我们您的目录结构以及您从哪个文件调用这段代码吗?
  • 您的相对路径很可能有问题。您是否尝试过检查文件的绝对路径?如果可行,那么您将不得不调整尝试引用它的相对路径。
  • 打印出 $imurl 会发生什么?它读什么?
  • @Dan:缩进编辑不会影响heredoc的行为吗?
  • echo getcwd(); 查看当前位置的相对路径

标签: php


【解决方案1】:

确保使用服务器文档根目录:

$doc_root = $_SERVER['DOCUMENT_ROOT'];

if (file_exists($doc_root . "/" . $imurl)) {

【讨论】:

  • 好的,我刚刚尝试过,但我仍然是错误的。所以我复制了工作 file_exists 查询if(file_exists("producers/$dir/header.php")) 两者之间唯一真正的区别是在一个大的while循环中。
  • 是的 $dir 已设置,它在代码中多次使用,每次似乎都有效。但是我可以确保它是在 while 循环的开头设置的,看看会发生什么!
  • 使用上面的代码,确实 echo $doc_root 。 “/”。 $imurl 实际上返回了一个肯定存在的文件的路径?
  • 是的,刚刚试了一下,得到 /home/caliver/public_html/producers/battbuild/images/GR01.jpg 这绝对是一个文件。
  • 只是询问,因为您的文件名返回为 GR01.jpg - 您知道 file_exists 区分大小写,对吗?如果您的实际文件是 gr01.jpg,它将失败。
【解决方案2】:

OK 这个问题的答案是 $cimage 应该在 if 语句之前定义,或者应该使用 else。我对明显的编码错误视而不见,并认为经常尴尬的 file_exists 一定是问题所在。谢谢各位大佬的建议。

【讨论】:

    猜你喜欢
    • 2018-05-20
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    相关资源
    最近更新 更多