0

我正在尝试使用 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;
}
4

4 回答 4

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;
}
于 2013-08-24T11:05:36.977 回答
1

从名称上看,它base_url似乎是一个会获得类似 url 的函数http://www.mysite.com,它不适用于执行本地目录功能。

你需要类似的东西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/
于 2013-08-24T11:05:43.873 回答
1

假设您的意思是 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 的评论添加相关信息。

于 2013-08-24T11:13:23.170 回答
1

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

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

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

于 2013-08-24T11:13:34.753 回答