PHP или Apache Удалить файлы - PullRequest
       11

PHP или Apache Удалить файлы

0 голосов
/ 09 марта 2012

У меня есть сервер звездочки, который помещает записи вызовов в каталог / 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>

Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 09 марта 2012

Рядом с запросом 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, которые определены: Протокол передачи гипертекста - HTTP / 1.1 (RFC2616) Раздел 9.7 УДАЛЕНИЕ .

0 голосов
/ 09 марта 2012

Почему вы ставите "\\"?путь не будет иметь двойную косую черту!

unlink - довольно прямолинейно

Для подтверждения правильности пути ... попробуйте открыть файл с помощью fopen.если он работает .удалите его с помощью unlink

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

проверьте, существует ли файл и удалите его

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

Проверьте разрешение на доступ к файлу и ваши права на удаление

http://us.php.net/fileperms

...