PHPファイルを実行後に自分自身を削除することはできる?実装方法を解説
はい、可能です。PHPには unlink() 関数が用意されており、これを使えば実行中のスクリプトが自分自身を削除できます。
方法1:unlink関数を直接呼び出す
最もシンプルなのは、__FILE__ マジック定数と unlink() 関数を組み合わせる方法です。
<?php unlink(__FILE__); ?>
__FILE__ は「現在実行中のファイルのフルパス」を返すマジック定数です。このパスを unlink() に渡すことで、スクリプト自身をファイルシステムから削除できます。
方法2:デストラクタを使って確実に削除する
処理の途中で exit() や die() が呼ばれた場合でも、スクリプト終了時に確実にファイルを削除したい場合は、デストラクタを利用したクラスを作成するのが有効です。
class DeleteOnExit {
function __destruct() {
unlink(__FILE__);
}
}
$delete_on_exit = new DeleteOnExit();PHPでは、スクリプトが終了するタイミングでオブジェクトのデストラクタ(__destruct() メソッド)が自動的に呼び出されます。そのため、このクラスのインスタンスを生成しておけば、どこで exit() が実行されても、終了時に必ず unlink(__FILE__) が走り、自分自身を削除できます。
利用時の注意点
- パーミッション: ファイルを削除するには、PHPの実行ユーザー(Webサーバー経由の場合は www-data など)にそのディレクトリへの書き込み権限が必要です。
- Windows環境: 基本的に動作しますが、他のプロセスがファイルをロックしている場合は削除に失敗することがあります。
- エラー処理:
unlink()は失敗時に警告を発します。必要に応じて戻り値をチェックし、エラーハンドリングを追加すると安全です。
このように、ワンタイムスクリプトやセットアップ用ファイルなど、「実行後には不要になるPHPファイル」を自動的にクリーンアップしたい場面で、上記の手法が役立ちます。
-
PHPのfile()関数とは?使い方・パラメータ・戻り値をわかりやすく解説
PHPのfile()関数は、指定したファイル全体を読み込み、その内容を行ごとに分割した配列として返す関数です。テキストファイルを簡単に扱いたい場合に便利な基本関数の一つです。構文file(file_path, flag, context)パラメータfile_path − 読み込みたいファイルへのパスを指定します。flag − 省略可能なパラメータで、以下の定数を1つ、または複数組み合わせて指定できます。FILE_USE_INCLUDE_PATH − include_path の中からファイルを検索します。FILE_IGNORE_NEW_LINES − 配列の各要素の末尾に改行文字を追加しません
-
PHPのdelete()関数とは?使い方とサンプルコードをわかりやすく解説
PHPのdelete()関数は、指定したファイルを削除するための関数です。削除したいファイルのパスをパラメータとして渡すことで、そのファイルをシステムから削除できます。 構文(Syntax) delete(file_path) パラメータ(Parameters) file_path: 削除したいファイルのパスを指定します。相対パス・絶対パスのどちらでも指定可能です。 戻り値(Return) delete()関数は、処理結果に応じて以下のブール値を返します。 true: ファイルの削除が成功した場合 false: ファイルの削除に失敗した場合(ファイルが存在しない、権限がないなど) 使用