2

嘿,我正在尝试使用 unlink() 让我的网站删除一个文件;功能。但是当我尝试时,它想到了这个:

Warning: unlink() [function.unlink]: cURL does not allow unlinking in /home/nzcraftn/public_html/filenz/user/delete.php on line 18

Warning: Cannot modify header information - headers already sent by (output started at /home/nzcraftn/public_html/filenz/user/delete.php:18) in /home/nzcraftn/public_html/filenz/user/delete.php on line 27

我正在使用这段代码:

if($_SESSION['user'] == $who) {
    $delete = unlink("http://www.filenz.nzcraft.net/$dl");

    if($delete) {
    $_SESSION['message'] = "<div style='color: #00FF00'>File deleted!</div>";
    header("Location: index.php");
    mysql_query("DELETE FROM fileinfos WHERE(`id`='$id')") or die(mysql_error());

} else {
    $_SESSION['message'] = "<div style='color: #FF0000'>Error while deleting!</div>";
    header("Location: index.php");
    }
}

如果你能告诉我是否有不同的方式来删除文件或帮助我解决我当前的问题,我会非常感激。

谢谢。

4

3 回答 3

6

虽然您可以通过 HTTP删除文件,但 php 的HTTP 协议包装器不支持它。如果没有身份验证,无论如何这将是一个安全漏洞,因此大多数 HTTP 服务器不支持 DELETE(除了WebDAV)。您应该执行以下操作之一:

  • Delete the file via FTP or SFTP. You'll have to configure the server, but chances are there is already an FTP or SFTP account in place. php 5's FTP and SFTP protocol wrappers support unlink, so you can use that instead of the respective deletion functions if you prefer.
  • If your server really supports WebDAV, you'll have to use the CURL extension and curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); to delete files via HTTP. Don't forget to authenticate!
  • Add a server-side script that allows file deletion. Make sure to authenticate (check user+password) and not allow CSRF attacks if you choose cookie-based authentication.
于 2011-08-26T06:16:03.243 回答
3

关于包装器的 PHP 文档说 HTTP 包装器不支持取消链接。

您可以传递文件系统中的路径以取消链接,例如:

unlink("/path_to_directory/$dl");
于 2011-08-26T06:15:16.770 回答
2

您尝试使用的协议不支持取消链接文件。有关更多信息,请参阅此处的文档。

解决此问题取决于您的情况,您可以尝试使用支持文件操作的不同协议(如 FTP)或使用文件的本地路径。同样重要的是要注意,您需要适当的权限才能执行这些操作,如果是 FTP,则需要用户名和密码。

于 2011-08-26T06:14:41.773 回答