2013-08-24 41 views
0

我试图尝试使用file_exists函数调试以下代码。我已经在头像目录上运行了一个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; 
} 
+1

'base_url()'的价值是什么? –

+0

最简单的方法是回显'$ avatar'并根据你的foldr结构检查它的正确路径。 – mithunsatheesh

+2

你为什么要使用本地目录的URL? –

回答

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; 
} 
+0

这是可行的,但是FCPATH常量 – user2576961

+0

这是一个在index.php中定义的codeigniter常量。所以你应该在这个问题中增加一个'codeigniter'标签 –

+0

'FCPATH'是这个文件的完整服务器路径。定义为'define('FCPATH',__FILE __);'参考http://cxzcxz.com/xref/codeigniter-1.7.1/nav.html?_constants/index.html – bansi

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/ 
+0

虽然这是一个实时网址,但这不适用于本地目录。 – user2576961

+0

[file_exists](http://us2.php.net/manual/en/function.file-exists.php)用于查看本地文件是否存在,而不是URL是否可读。 –

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评论相关信息。

1

嗯,这是双向CLI并通过Apache等...:

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

的没有返回的是一个php文件本身,而不是由根。