2012-03-08 2 views
0

私は、/ var/spool/asterisk/monitorディレクトリにコール録音を行うアスタリスクサーバを持っています。私はApache(httpd)にこのディレクトリのすべてのリストを表示させることができました。PHPまたはApacheファイルを削除する

私が一緒に来て、それらの記録をダウンロードし、彼らと何かをやっている二次プロセスを持っています。そのプロセスが完了したら、私はそれが引っ張った録音を削除できるようにしたい。

私は私ができるPHPを使用する必要がありますが、私はすでにそれを試してみましたが、それが動作するように取得するのに十分がわからない場合。私は以下のコードを試していますが、私はそのパーミッションの問題か何かを推測していますが、上位レベルのユーザーとして実行するようにApacheユーザーを変更する方法はわかりません(ルートは問題ありません。 )。

<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> 

私はとOKになり、他のオプションは、ファイルに対して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> 

を持つエントリです。

答えて

0

なぜあなたは"\\"を入れていますか?パスにはダブルスラッシュはありません!

アンリンクはパスを確認するため、前方かなりstaright

で正しい..ですはfopenを使用してファイルを開こう。それが動作すれば。リンク解除

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

チェックファイルでそれを削除して存在し、それをGET要求へ次

http://us.php.net/fileperms

+0

私は '/'に変更しましたが、unlink()コマンドでも私にはfalseが返されます。phpファイルは、すべてのwavファイルと同じディレクトリにあります。 – Matt

+0

/必要もありません。ファイル名を指定して、同じフォルダにあるファイルとして指定してください。 – zod

+0

はまだ試したことがありません: – Matt

1

を削除する

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

チェックファイルのパーミッションとあなたの権限を削除ファイルを取得するには、DELETEファイルの削除を要求します。あなたは、その後にすべてのDELETEリクエストをマップあなたの.htaccessファイルで

<?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'); 
} 

デフォルトでは、ApacheはDELETEメソッドのハンドラを要求していないが、あなたはDELETE要求の世話をする、独自のdelete.phpを作成することができますお使いの削除スクリプト:

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

、このようなスクリプトの利点は、それが正しくワットHTTPステータスコードを経由して成功したか失敗したかを伝えることであり、定義される:Hypertext Transfer Protocol -- HTTP/1.1 (RFC2616) Section 9.7 DELETE

関連する問題