我无法弄清楚为什么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
我很确定我错过了一些东西,但对我来说一切似乎都没问题,我在网站上的其他地方使用相同的方法没有任何问题。
感谢您的帮助。
答案 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);
}
}