2

unlink(); を使用して、Web サイトでファイルを削除しようとしています。関数。しかし、試してみると、次のようになります。

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");
    }
}

ファイルを削除する別の方法があるかどうか、または現在の問題を解決するのに役立つかどうかを教えていただければ、非常に感謝しています。

ありがとう。

4

3 に答える 3

6

HTTP 経由でファイルを削除できますが、php のHTTP プロトコル ラッパーはそれをサポートしていません。認証がなければ、とにかくセキュリティ ホールになるため、ほとんどの HTTP サーバーは ( WebDAVを除いて) DELETE をサポートしていません。次のいずれかを実行する必要があります。

  • FTPまたはSFTP経由でファイルを削除します。サーバーを構成する必要がありますが、FTP または SFTP アカウントが既に配置されている可能性があります。PHP 5 のFTPおよびSFTPプロトコル ラッパーは をサポートunlinkしているため、必要に応じて、それぞれの削除関数の代わりにそれを使用できます。
  • サーバーが実際に WebDAV をサポートしている場合は、CURL 拡張機能を使用し、 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');HTTP 経由でファイルを削除する必要があります。認証をお忘れなく!
  • ファイルの削除を許可するサーバー側スクリプトを追加します。Cookie ベースの認証を選択した場合は、必ず認証し (ユーザーとパスワードを確認してください)、CSRF攻撃を許可しないようにしてください。
于 2011-08-26T06:16:03.243 に答える
3

ラッパーに関する PHP ドキュメントによると、unlink は HTTP ラッパーではサポートされていません。

リンクを解除するには、ファイルシステム内のパスを渡すことができます。次に例を示します。

unlink("/path_to_directory/$dl");
于 2011-08-26T06:15:16.770 に答える
2

使用しようとしているプロトコルは、ファイルのリンク解除をサポートしていません。詳細については、こちらのドキュメントを参照してください。

これを修正する方法は状況によって異なります。ファイル操作をサポートする FTP などの別のプロトコルを使用するか、ファイルへのローカル パスを使用することができます。これらの操作を実行するには適切な権限が必要であり、FTP の場合はユーザー名とパスワードが必要であることに注意することも重要です。

于 2011-08-26T06:14:41.773 に答える