如何使用Unlink()函数

13

我正在尝试使用PHP unlink()函数来删除文件夹中的特定文档。这个文件夹已经被分配给IIS用户完全权限。

代码:

$Path = './doc/stuffs/sample.docx';
if (unlink($Path)) {    
    echo "success";
} else {
    echo "fail";    
}

它一直返回失败。sample.docx确实位于该特定路径上。请给予建议。


你确定你有删除文件的权限了吗?此外,尝试使用绝对路径,像这样: $Path = '/doc/stuffs/sample.docx' - Marcio Mazzucato
是的,我可以下载那个特定的文件,所以我的路径应该是有效的。 - JLearner
如果您确定权限正确,我猜测路径是错误的,就像Marcio所建议的那样。您尝试使用file_exists()检查过它了吗? - SilverSnake
我试过 var_dump(file_exists($Path)) 但是它返回了 bool (false) :( 但是我设置的那个路径确实用于下载文档,并且它是有效的... - JLearner
您可能想要启用错误报告以检查错误。 - user1299518
你的服务器是在Windows还是Linux下运行? - Marcio Mazzucato
5个回答

13

我在unlink()函数的评论中找到了这个信息。

在Windows系统和Apache下,拒绝访问文件是解除文件链接时常见的错误。为了删除文件,你必须更改文件的所有者。以下是一个示例:

chown($tempDirectory . '/' . $fileName, 666); //Insert an Invalid UserId to set to Nobody Owern; 666 is my standard for "Nobody" 
unlink($tempDirectory . '/' . $fileName); 

那么尝试像这样:

$path = './doc/stuffs/sample.docx';

chown($path, 666);

if (unlink($path)) {
    echo 'success';
} else {
    echo 'fail';
}

编辑 1

尝试在路径中使用这个:

$path = '.'
         . DIRECTORY_SEPARATOR . 'doc'
         . DIRECTORY_SEPARATOR . 'stuffs'
         . DIRECTORY_SEPARATOR . 'sample.docx';

它不起作用。它进入了失败的else语句 :( - JLearner
我在文件路径上犯了一些粗心的错误,少输入了一个“.”。 - JLearner

9

试试这个:

$Path = './doc/stuffs/sample.docx';
if (file_exists($Path)){
    if (unlink($Path)) {   
        echo "success";
    } else {
        echo "fail";    
    }   
} else {
    echo "file does not exist";
}

如果你遇到了“文件不存在”的错误提示,那么你可能是路径填写错误。如果不是这个原因,那么就有可能是权限问题。

嗨 Travis,它告诉我文件不存在。但是该路径也用于下载文档,而且它有效... - JLearner
./ 表示路径相对于脚本运行的路径。这个脚本是从下载文件的脚本所在的目录运行的吗? - Travis
你提到路径是从另一个页面获取的,在其前面加上了"./"。请问能否提供更多代码或详细参考,说明文件路径的来源? - Travis
嗨Travis,路径可以解析为这种形式。我确认了,因为我可以将其输出。它与给定的示例路径相同。 - JLearner

2
一旦您解决了权限问题,这应该可以正常工作。同时,请尝试。
ini_set('display_errors', 'On');  

那会告诉你出了什么问题。

1
尝试删除($_SERVER['DOCUMENT_ROOT']."/doc/stuffs/sample.docx"); - leet

1
define("BASE_URL", DIRECTORY_SEPARATOR . "book" . DIRECTORY_SEPARATOR);
define("ROOT_PATH", $_SERVER['DOCUMENT_ROOT'] . BASE_URL);

$path = "doc/stuffs/sample.docx";

if (unlink(ROOT_PATH . $Path)) {   
  echo "success";
} else {
  echo "fail";    
}

// http://localhost/book/doc/stuffs/sample.docx
// C:/xampp/htdocs\book\doc/stuffs/sample.docx

0

您需要获取感兴趣文件的完整文件路径。例如:C:\doc\stuff\sample.docx。尝试使用__DIR____FILE__来获取相对文件位置,以便您可以导航到感兴趣的文件。


我做不到那个,因为那个特定的路径是从另一个带有'./'的网页解析出来的。 - JLearner
你是在尝试删除另一个站点文件系统上的文件吗? - James Woodruff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接