虽然路径似乎正确,但文件不存在

时间:2015-05-15 10:20:39

标签: php path file-exists

我无法弄清楚为什么file_exists()找不到我的文件,虽然路径似乎正确。

这是我的剧本:

if($_POST['delete-avatar'] == 'on') {
  $q = execute_query("SELECT avatar FROM gj_customers WHERE id_customer = '$_GET[id]'");
  $customer = $q->fetch_assoc();
  $img_path = $_SERVER['DOCUMENT_ROOT'] . WEBSITE_ROOT . $customer['avatar'];
  var_dump($img_path);

  if(!empty($customer['avatar'])  && file_exists($img_path)){
    unlink($img_path);
  }
}

我在MAMP,我的网站是htdocs / gamejutsu / www /,WEBSITE_ROOT包含' / gamejutsu / www /'和头像是img / avatars /。

$ img_path上的

var_dump返回给我:/Applications/MAMP/htdocs/gamejutsu/www/img/avatars/Sonik_avatar.jpg。

如果我继续使用localhost:8888 / gamejutsu / www / img / avatars / Sonik_avatar.jpg,则会显示图像。

我从未参加过if bloc。如果我删除了file_exists测试,我会发出警告:unlink(/Applications/MAMP/htdocs/gamejutsu/www/img/avatars/Sonik_avatar.jpg):/ Applications / MAMP / htdocs / gamejutsu / www /中没有这样的文件或目录第67行的admin / members.php

我很确定我错过了一些东西,但对我来说一切似乎都没问题,我在网站上的其他地方使用相同的方法没有任何问题。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

复杂的调试你的应用程序没有访问权限,但你可以尝试返回realpath();

var_dump(realpath($img_path))

如果返回null文件不存在或您的应用程序无法访问它。

尝试打开您的控制台和此命令:

cd /Applications/MAMP/htdocs/gamejutsu/www/img/avatars/

如果你有错误你有错误的路径并且必须手动检查它(最简单的将是通过控制台)如果你可以在这个目录中cd。请在此处添加此目录的ls以获取检查权限:

ls -la /Applications/MAMP/htdocs/gamejutsu/www/img/avatars/

如果一切顺利,请尝试将您的控制台用户更改为网络服务器用户(通常是www-data)并尝试访问文件

sudo su
su www-data
cat /Applications/MAMP/htdocs/gamejutsu/www/img/avatars/Sonik_avatar.jpg

如果你可以访问这个文件(它将是二进制数据),那么权限是可以的,在其他情况下检查你是否拥有正确的文件权限,以及你是否拥有良好的所有者和文件组。

答案 1 :(得分:0)

尝试使用网站root,不要使用$ _SERVER [' DOCUMENT_ROOT']。

答案 2 :(得分:0)

另一种方法是识别路径。

if($_POST['delete-avatar'] == 'on') {
    $q = execute_query("SELECT avatar FROM gj_customers WHERE id_customer = '$_GET[id]'");
    $customer = $q->fetch_assoc(); 
    $img_path =' filename' . WEBSITE_ROOT . $customer['avatar']; 
    var_dump($img_path);

    if(!empty($customer['avatar']) && file_exists($img_path)) {       
        unlink($img_path);
    }

}