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

File does not exist though the path seems right

我不明白为什么 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/ 中。

var_dump 在 $img_path returns 我:/Applications/MAMP/htdocs/gamejutsu/www/img/avatars/Sonik_avatar.jpg.

如果我继续 localhost:8888/gamejutsu/www/img/avatars/Sonik_avatar.jpg 将显示图像。

我从不进入 if 块。如果我删除 file_exists 测试,我会收到警告:unlink(/Applications/MAMP/htdocs/gamejutsu/www/img/avatars/Sonik_avatar.jpg): No such file or directory in /Applications/ MAMP/htdocs/gamejutsu/www/admin/members.php 第 67

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

感谢您的帮助。

尝试只使用网站根目录,不要使用 $_SERVER['DOCUMENT_ROOT'].

另一种方法是通过识别路径。

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);
    }

}

在没有访问权限的情况下调试您的应用程序很复杂,但您可以尝试 return realpath();

var_dump(realpath($img_path))

如果 return 空文件不存在或您的应用程序没有访问它。

尝试打开您的控制台并执行此命令:

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

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