【问题标题】:file_exists always returns falsefile_exists 总是返回 false
【发布时间】:2012-02-23 07:12:39
【问题描述】:

我有一个简单的函数可以在文件旁边输出一个文件类型的图标,但由于某种原因,file_exists() 总是返回 false。我已经输出了正在生成的路径,它显然存在于“default.png”中。我在这里遗漏了什么吗?

我尝试过使用 URL 和文件路径 - 两者总是返回 false。

我什至将所有文件权限设置为 777 以测试这是否是问题所在,但这不起作用。

/**
 * Displays the logo for the file type passed to the function
 *
 * @param required string $file_type The file type to display an icon for
 */
function show_file_type($file_type){

    $file_types_folder = get_bloginfo('template_directory').'/includes/images/file_types/';

    if(file_exists($file_types_folder.$file_type.'.png')) :
        $file_type_image = $file_types_folder.$file_type.'.png';
    elseif(file_exists($file_types_folder.'default.png')) :
        $file_type_image = $file_types_folder.'default.png';
    else :
        return false;
    endif;

    echo '<img src="'.$file_type_image.'" width="20"/>';

}

【问题讨论】:

  • 您是否确保您的 apache 进程可以读取包含该文件的目录?
  • 尝试验证get_bloginfo 的输出。如果 template_directory 不是绝对的,它可能不起作用。还可以尝试手动检查 /var/www/myblog/includes/... 等,具体取决于您的 apache 设置,看看是否解决了您的问题。
  • $file_types_folder 是相对于网络服务器根目录还是文件系统根目录?
  • 给我们一个例子来说明 $file_type 可能是什么
  • 显然,$file_type 实际上是图像的文件名,您将使用它作为 img 标签的 src。也尝试使用此file_exists(realpath($file_types_folder.$file_type.'.png')) 您可能会丢失一些 URL 重写以有效地使用绝对路径作为图像的 URI 字符串来指向服务器上图像的绝对路径。例如,/var/includes/images/file_types/default.png 将被翻译成 http://{domain}/{path}/var/includes/images/file_types/default.png 必须为此重写。

标签: php file-exists


【解决方案1】:

我也遇到了这个问题。根据docs,当在同一脚本执行期间创建或删除文件时,您应该在调用file_exists(); 之前调用clearstatcache();。让我们知道它是否有效!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-15
    • 2012-09-02
    • 2016-09-02
    • 1970-01-01
    • 2019-01-29
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多