Php Unlink与相对路径不起作用

时间:2016-01-14 13:01:22

标签: php unlink

我想取消链接文件。有数百篇关于此的帖子,但我似乎无法让它发挥作用。

我从:

执行我的脚本
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]不是字符串或其他东西吗?

4 个答案:

答案 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');
                       ^^^^