使用PHP删除网站上的文件?

时间:2011-08-26 06:11:50

标签: php unlink

嘿我正试图让我的网站使用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");
    }
}

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

感谢。

3 个答案:

答案 0 :(得分:6)

虽然您可以通过HTTP delete files,但PHP的HTTP protocol wrapper不支持它。如果没有身份验证,它将是一个安全漏洞,因此大多数HTTP服务器不支持DELETE(除了WebDAV)。您应该执行以下操作之一:

  • 通过FTPSFTP删除文件。您必须配置服务器,但可能已经有FTP或SFTP帐户。 php 5的FTPSFTP协议包装器支持unlink,因此如果您愿意,可以使用它而不是相应的删除功能。
  • 如果您的服务器确实支持WebDAV,则必须使用CURL extensioncurl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');通过HTTP删除文件。别忘了验证!
  • 添加允许删除文件的服务器端脚本。如果选择基于cookie的身份验证,请确保进行身份验证(检查用户+密码)并且不允许CSRF攻击。

答案 1 :(得分:3)

PHP documentation about wrappers表示HTTP包装器不支持取消链接。

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

unlink("/path_to_directory/$dl");

答案 2 :(得分:2)

您尝试使用的协议不支持取消链接文件。有关详细信息,请参阅documentation here

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