PHP或Apache删除文件



我有一个星号服务器,它正在/var/spool/aster/monitor目录中放置呼叫记录。我已经设法让Apache(httpd)显示该目录中所有内容的列表。

我有一个次要的过程,下载这些录音并用它们做一些事情。当这个过程完成后,我希望它能够删除它提取的录音。

如果我必须使用PHP,我可以,但我已经尝试过了,而且还不知道如何让它发挥作用。我正在尝试下面的代码,我猜这是权限问题或其他什么问题,但我不知道如何将apache用户更改为更高级别的用户运行(root用户可以,是的,我知道后果)。

<html>
 <head>
  <title>PHP Test</title>
 </head>
 <body>
 <?php
        if($_GET['action'] == 'delete')
        {
                $myfile = $_GET['filename'];
                $path = getcwd();
                echo($path . "/" . $myfile);
                if(unlink($path . "/" . $myfile))
                {
                        echo('Success!!!');
                }
                else
                {
                        echo('Failure');
                }
        }
        else
        {
                echo('doing nothing');
        }
?>
</body>
</html>

我可以接受的另一个选项是对文件执行HTTP DELETE谓词并让Apache处理它,但我也找不到关于如何设置它的好文章。

这是我在httpd.conf文件中的条目

Alias /recordings "/var/spool/asterisk/monitor"
<Directory "/var/spool/asterisk/monitor">
        Options Indexes FollowSymLinks MultiViews ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
</Directory>

请帮忙。

GET请求检索文件的旁边,可以执行DELETE请求删除文件。

默认情况下,Apache没有DELETE方法的请求处理程序,但您可以创建自己的delete.php来处理DELETE请求:

<?php
/**
 * delete script
 */
if ($_SERVER['REQUEST_METHOD'] !== 'DELETE') {
    header('Method not allowed', 405);
    exit;
}
$basepath = __DIR__;
$file = basename($_SERVER['REQUEST_URI']);
$path = $basepath . '/' . $file;
$exists = file_exists($path);
if (!$exists) {
    header($_SERVER['SERVER_PROTOCOL'] . ' 204 No Content'); // HTTP/1.1 ...
    exit;
}
$success = unlink($path);
if ($success) {
    printf("Deleted %sn", $file);
} else {
    header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error');
}

.htaccess文件中,您可以将所有DELETE请求映射到您的删除脚本:

RewriteEngine On
RewriteCond %{REQUEST_METHOD} =DELETE [NC]
RewriteRule .* delete.php

这种脚本的好处是,它通过定义的HTTP状态代码正确地传达成功或失败:超文本传输协议-HTTP/1.1(RFC2616)Section 9.7 DELETE。

为什么要放"\"?这条路不会有双斜线,是吗!

unlink在前是相当不错的

用于确认路径是否正确。。尝试使用fopen打开文件。如果有效的话。用取消链接的删除它

http://php.net/manual/en/function.unlink.php

检查文件是否存在并将其删除

http://php.net/manual/en/function.file-exists.php

检查文件权限和您删除的权限

http://us.php.net/fileperms

最新更新