我想取消链接文件。有数百篇关于此的帖子,但我似乎无法让它发挥作用。
我从:
执行我的脚本public_html/dev/admin/upload/picture.jpeg
我试图删除的文件位于:
$sql = "SELECT url FROM news WHERE id='$id'";
$result = db::get_instance()->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
unlink($row['url']);
}
}
代码:
upload/picture.jpeg
行内容= unlink('upload/picture.jpeg');
现在为什么这不起作用。 Php文档说如果我正确的话可以使用相对垫吗?
编辑:
所以我发现我是否对其工作的网址进行了硬编码:
unlink($row[url]);
但是当我使用以下内容时它不会:
echo ($row[url]);
但upload/picture.jpeg
打印:Team Explorer -> Branches
可以这样,$ row [url]不是字符串或其他东西吗?
答案 0 :(得分:1)
Oke所以$row['url']
似乎在网址中产生了额外的空格。
一个简单的trim($row['url'])
修复了它!
全部谢谢!
答案 1 :(得分:0)
确保$row['url']
路径正确且文件具有正确的权限。
答案 2 :(得分:0)
总是使用绝对路径的文件系统例程是一个非常非常好的主意,这样就不会出现“相对”错误。删除错误文件夹中的错误文件可能代价高昂!
因此,在每个文件系统链接前添加$_SERVER['DOCUMENT_ROOT']
并可能使用硬编码或使用getcwd()
来获取当前目录(通常是PHP文件所在的目录)。
给你:
// remove potential double slashes in complete address.
// Also add trailing slash before the $row
$currentWD = ltrim(getcwd(),"/")."/";
unlink($_SERVER['DOCUMENT_ROOT'].$currentWD.$row['url']);
其中:
$_SERVER['DOCUMENT_ROOT'] == "home/public_html/"
getcwd() == "/dev/admin"
$row['url'] == "upload/picture.jpeg"
请注意,在Apache系统(以及我认为的大多数其他系统)上,文件系统 CasE SensiTiVe !!
另外,请小心使用数组键周围的引号,您希望$row['url']
使用(单个)引号而不是引号。
修改强> 一些调试:
什么是echo getcwd()
?这应该是当前文件夹。
你的字符串是否正确地进行了字符编码,因此它所寻找的文件系统的字母是正确的字母,而不是看起来相同但不完全相同的cryllic或类似字母(我知道这是模糊不清的但是......)?
答案 3 :(得分:0)
发现差异?
public_html/dev/admin/upload/picture.png
^^^
unlink('upload/picture.jpeg');
^^^^