我正在尝试使用file_exists函数尝试调试以下代码。我在avatar目录上运行了一个var_dump,它总是以bool(false)的形式返回。我不知道为什么。我测试了下面的代码并且它到达文件存在但是每次都证明if语句为false。有什么想法吗?我看了,图像正确地在目录中。
$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;
}
答案 0 :(得分: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;
}
答案 1 :(得分:1)
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/
答案 2 :(得分: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的评论添加相关信息。
答案 3 :(得分:1)
这适用于CLI和Apache等...:
$avatar_directory = substr(str_replace(pathinfo(__FILE__, PATHINFO_BASENAME), '', __FILE__), 0, -1) . '/assets/globals/images/avatars/'
返回的是php文件本身所在的,而不是root。