【问题标题】:File exists issues文件存在问题
【发布时间】:2013-08-24 10:56:06
【问题描述】:

我正在尝试使用 file_exists 函数调试以下代码。我在头像目录上运行了一个 var_dump,它总是返回为 bool(false)。我不确定为什么。我测试了下面的代码,它得到了文件存在,但它每次都证明 if 语句是错误的。有什么想法吗?我看过了,图片在目录中是正确的。

$default_avatar = 'default.jpg';
$avatar_directory = base_url() . 'assets/globals/images/avatars/';
if (!is_null($user_data->avatar))
{
    $avatar = $avatar_directory . $user_data->avatar;
    if (file_exists($avatar))
    {
        $user_data->avatar = $avatar_directory . $user_data->avatar;
    }
    else
    {
        $user_data->avatar = $avatar_directory . $default_avatar;
    }
}
else
{
    $user_data->avatar = $default_avatar;
}

【问题讨论】:

  • base_url() 的值是多少?
  • 最简单的方法是回显$avatar 并根据您的文件夹结构检查其路径是否正确。
  • 你为什么要使用本地目录的 url?
  • 这不是base_url() 的用途。您需要文件的本地路径...
  • @ppeterka 是什么意思?

标签: php codeigniter


【解决方案1】:
$default_avatar = 'default.jpg';
$avatar_directory = 'assets/globals/images/avatars/';
if (!is_null($user_data->avatar))
{
    $avatar = $avatar_directory . $user_data->avatar;
    if (file_exists(FCPATH . $avatar))
    {
        $user_data->avatar = base_url() . $avatar_directory . $user_data->avatar;
    }
    else
    {
        $user_data->avatar = base_url() . $avatar_directory . $default_avatar;
    }
}
else
{
    $user_data->avatar = $default_avatar;
}

【讨论】:

  • 这是一个在 index.php 中定义的 codeigniter 常量。所以你应该在这个问题中添加一个codeigniter 标签
  • FCPATH 是此文件的完整服务器路径。定义为define('FCPATH', __FILE__); 参考cxzcxz.com/xref/codeigniter-1.7.1/nav.html?_constants/…
  • @user2576961,这仍然是一个本地文件,而不是像你说你想要我的答案的网址
【解决方案2】:

从名称base_url 看来,这个函数会得到一个类似http://www.mysite.com 的url,它不适用于执行本地目录函数。

你需要getcwd 之类的东西,或者完整路径

getcwd 将获取当前工作目录(执行初始脚本的目录):

//If say script.php was exectued from /home/mysite/www
$avatar_directory = getcwd() . '/assets/globals/images/avatars/';

//$avatar_directory would be
/home/mysite/www/assets/globals/images/avatars/

【讨论】:

  • 这不是本地目录,虽然这是一个实时 url。
  • file_exists 用于查看本地文件是否存在,而不是如果 url 可读。
【解决方案3】:

嗯,这适用于 CLI 和通过 Apache 等...:

$avatar_directory = substr(str_replace(pathinfo(__FILE__, PATHINFO_BASENAME), '', __FILE__), 0, -1) . '/assets/globals/images/avatars/'

返回的 did 是 php 文件本身所在的那个,而不是根目录。

【讨论】:

    【解决方案4】:

    假设您的意思是 base_url() 指向项目的根目录 -

       $file = __DIR__ . "/path/to/file.ext";
    
       if (file_exists($file)) {
    
           //...
    
       }
    

    或其一些变体。这也有效:

       __DIR__ . "/.."
    
    • 解析为__DIR__的父目录。

    查看 PHP 的魔法常量:

    http://php.net/manual/en/language.constants.predefined.php

    如果你正在寻找一个远程资源——一个不在你本地文件系统上的文件——你必须改变你的 php.ini 来允许它。这可能不是一个好主意,这通常不被认为是安全的。完全没有。

    http://php.net/manual/en/features.remote-files.php

    注意:

    "This function returns FALSE for files inaccessible due to safe mode restrictions. However these files still can be included if they are located in safe_mode_include_dir."
    

    --来自http://php.net/manual/en/function.file-exists.php

    -- 根据 OP 的评论进行编辑以添加相关信息。

    【讨论】:

      猜你喜欢
      • 2020-10-22
      • 2013-09-13
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      • 2011-11-22
      • 2020-06-02
      • 1970-01-01
      相关资源
      最近更新 更多