gpt4 book ai didi

PHP 或 Apache 删除文件

转载 作者:行者123 更新时间:2023-12-04 19:39:11 25 4
gpt4 key购买 nike

我有一个星号服务器,它将通话录音放在/var/spool/asterisk/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 %s\n", $file);
} else {
header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error');
}

在您的 .htaccess文件然后映射所有 DELETE对您的删除脚本的请求:
RewriteEngine On
RewriteCond %{REQUEST_METHOD} =DELETE [NC]
RewriteRule .* delete.php

这样一个脚本的好处是,它通过定义的 HTTP 状态代码正确地传达成功或失败: Hypertext Transfer Protocol -- HTTP/1.1 (RFC2616) Section 9.7 DELETE .

关于PHP 或 Apache 删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9625232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com