【PHP8.x】unlink関数の使い方

unlink関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

unlink関数は、ファイルシステムからファイルを削除する関数です。この関数は、指定されたパスのファイルを削除しようと試みます。削除が成功した場合、関数はtrueを返します。削除が失敗した場合、たとえばファイルが存在しない、または適切な権限がない場合、関数はfalseを返します。

unlink関数を使用する際には、削除するファイルへの書き込み権限があることを確認する必要があります。また、open_basedir制限やセーフモード設定など、PHPの設定によっては、ファイル削除が制限される場合があります。これらの設定は、セキュリティ上の理由からファイルシステムへのアクセスを制限するために設けられています。

unlink関数の引数には、削除するファイルのパスを指定します。パスは文字列で指定し、絶対パスまたは相対パスを使用できます。相対パスは、現在のスクリプトの実行ディレクトリからの相対位置として解釈されます。

エラー処理として、unlink関数がfalseを返した場合、error_get_last()関数を使用して詳細なエラー情報を取得できます。これにより、削除が失敗した原因を特定し、適切な対応を行うことができます。

ファイルが削除されると、そのファイルが占有していたディスクスペースは解放され、他のファイルやデータのために利用できるようになります。unlink関数は、不要になったファイルを削除し、ディスクスペースを効率的に管理するために使用されます。ただし、一度削除されたファイルは通常、復元することが困難であるため、削除するファイルが本当に不要であることを慎重に確認する必要があります。バックアップを取るなどの対策も有効です。

構文(syntax)

1unlink(string $filename, ?resource $context = null): bool

引数(parameters)

string $filename, ?resource $context = null

  • string $filename: 削除するファイル名を指定する文字列
  • ?resource $context = null: ストリームコンテキストを指定するリソース。省略可能

戻り値(return)

bool

unlink関数は、指定したファイルを削除する関数です。ファイルの削除に成功した場合は true を、失敗した場合は false を返します。

サンプルコード

PHP unlink関数でファイルを削除する

1<?php
2
3/**
4 * PHPのunlink関数を使用してファイルを安全に削除するサンプルコードです。
5 * unlink関数はファイルのみを削除できます。ディレクトリの削除には使用できません。
6 * ディレクトリ内のファイルを削除するシナリオを想定しています。
7 */
8function demonstrateUnlinkFunction(): void
9{
10    // 削除対象のファイルを作成する一時ディレクトリを準備します。
11    // sys_get_temp_dir() でOSの一時ディレクトリパスを取得し、
12    // DIRECTORY_SEPARATOR でOSに応じたパス区切り文字を使用します。
13    $tempDirectory = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'php_unlink_example_' . uniqid();
14    
15    // ディレクトリが存在しない場合は作成します。
16    if (!mkdir($tempDirectory, 0777, true)) {
17        echo "エラー: 一時ディレクトリ '{$tempDirectory}' の作成に失敗しました。\n";
18        return;
19    }
20    echo "一時ディレクトリを作成しました: {$tempDirectory}\n";
21
22    $fileName = "delete_me.txt";
23    $filePath = $tempDirectory . DIRECTORY_SEPARATOR . $fileName;
24
25    // 削除対象となるファイルを準備します。
26    // file_put_contents() でファイルに内容を書き込み、ファイルを作成します。
27    if (file_put_contents($filePath, "このファイルはunlink関数によって削除されます。\n") === false) {
28        echo "エラー: ファイル '{$filePath}' の作成に失敗しました。\n";
29        // ファイル作成失敗時は、作成したディレクトリを削除してクリーンアップします。
30        rmdir($tempDirectory);
31        return;
32    }
33    echo "ファイルを作成しました: {$filePath}\n";
34
35    // ファイルが作成されたことを確認します。
36    if (file_exists($filePath)) {
37        echo "ファイル '{$filePath}' が存在します。削除を試みます。\n";
38
39        // unlink関数を使ってファイルを削除します。
40        // 第1引数: 削除するファイルのパス (string)
41        // 第2引数: オプションでストリームコンテキストを指定できますが、通常はnullで十分です。
42        if (unlink($filePath)) {
43            echo "ファイルを正常に削除しました: {$filePath}\n";
44        } else {
45            // 権限の問題などで削除に失敗する場合があります。
46            echo "エラー: ファイル '{$filePath}' の削除に失敗しました。\n";
47        }
48    } else {
49        echo "エラー: 削除しようとしたファイル '{$filePath}' が見つかりません。\n";
50    }
51
52    // 削除後、ファイルが存在しないことを確認します。
53    if (!file_exists($filePath)) {
54        echo "ファイルは現在、存在しません。\n";
55    }
56
57    // 最後に、作成した一時ディレクトリをクリーンアップします。
58    // unlinkはファイルを削除する関数であり、ディレクトリは削除できません。
59    // rmdir関数は空のディレクトリを削除するために使用します。
60    // scandirの結果が '.' と '..' のみの場合、ディレクトリは空と判断できます。
61    if (is_dir($tempDirectory) && count(scandir($tempDirectory)) === 2) {
62        if (rmdir($tempDirectory)) {
63            echo "一時ディレクトリ '{$tempDirectory}' を削除しました。\n";
64        } else {
65            echo "注意: 一時ディレクトリ '{$tempDirectory}' の削除に失敗しました。\n";
66        }
67    } else {
68        echo "注意: 一時ディレクトリ '{$tempDirectory}' が空ではないため削除できませんでした。手動で確認してください。\n";
69    }
70}
71
72// 関数の実行
73demonstrateUnlinkFunction();
74

PHP 8のunlink関数は、ファイルシステムから指定されたファイルを削除するための基本的な関数です。この関数は、プログラムから不要なファイルを削除する際に利用されます。

第一引数$filenameには、削除したいファイルの完全なパスを文字列として渡します。もしファイルが存在しない場合や、PHPスクリプトにファイルを削除する適切な権限がない場合などには、削除に失敗します。第二引数$contextはオプションで、ストリームコンテキストを指定する際に使用しますが、通常は省略可能です。関数がファイルの削除に成功した場合はtrueを返し、何らかの理由で失敗した場合はfalseを返します。

特に重要な点として、unlink関数はファイルのみを対象とし、ディレクトリ(フォルダ)を削除することはできません。もしディレクトリを削除しようとすると、エラーが発生します。サンプルコードでは、一時ディレクトリを作成し、その中に一時的なファイルを作成した後、unlink関数を使ってそのファイルを削除する手順を具体的に示しています。ファイルの削除後、作成したディレクトリはrmdir関数を使ってクリーンアップしており、ファイルとディレクトリの削除には異なる関数が必要であることが理解できます。

PHPのunlink関数は、ファイルのみを削除できる関数です。ディレクトリを削除することはできませんので、ディレクトリの削除にはrmdir関数を使用してください。ただし、rmdir関数は空のディレクトリしか削除できない点にご注意ください。unlink関数を使用する際は、削除対象のファイルパスが正しいか、またPHPがそのファイルを削除する適切な権限を持っているかを必ず確認してください。関数は成功するとtrue、失敗するとfalseを返しますので、必ず戻り値を確認し、エラーハンドリングを行うようにしましょう。サンプルコードのように、一時的に作成したファイルやディレクトリは、処理の最後に必ず削除(クリーンアップ)することが、システムを安全に保つ上で非常に重要です。

PHP unlink 存在しないファイル安全に削除する

1<?php
2
3/**
4 * 指定されたファイルを安全に削除します。
5 * ファイルが存在しない場合は削除を試みず、その旨を通知します。
6 *
7 * @param string $filename 削除するファイルのパス
8 * @return void
9 */
10function safeUnlink(string $filename): void
11{
12    echo "--- ファイル削除処理: {$filename} ---\n";
13
14    // 削除対象のファイルが存在するかどうかを確認します。
15    if (file_exists($filename)) {
16        echo "ファイル '{$filename}' は存在します。削除を試みます...\n";
17        
18        // ファイルが存在する場合、unlink関数で削除を試みます。
19        // unlink関数は成功した場合に true、失敗した場合に false を返します。
20        if (unlink($filename)) {
21            echo "ファイル '{$filename}' の削除に成功しました。\n";
22        } else {
23            // 削除に失敗した場合、エラーメッセージを出力します。
24            // 権限不足などが原因で失敗することがあります。
25            echo "エラー: ファイル '{$filename}' の削除に失敗しました。\n";
26        }
27    } else {
28        // ファイルが存在しない場合、unlink関数を呼び出す必要がないことを通知します。
29        // 存在しないファイルに対してunlinkを呼び出すと、E_WARNINGが発生し、falseが返されます。
30        echo "ファイル '{$filename}' は存在しません。削除処理をスキップします。\n";
31    }
32    echo "\n";
33}
34
35// --- 実際の使用例 ---
36
37// 1. 存在しないファイルを削除しようとするケース
38$nonExistentFile = __DIR__ . '/non_existent_example.txt';
39safeUnlink($nonExistentFile);
40
41// 2. 存在するファイルを削除しようとするケース
42$existentFile = __DIR__ . '/existent_example.txt';
43
44// テスト用にファイルを事前に作成します。
45file_put_contents($existentFile, 'このファイルはテスト用に作成され、削除されます。');
46echo "テスト用にファイル '{$existentFile}' を作成しました。\n\n";
47
48safeUnlink($existentFile);
49
50// 3. (再度) 既に削除されたファイルを削除しようとするケース
51//    これは1番目のケースと同じ結果になります。
52safeUnlink($existentFile);
53
54?>

PHPのunlink関数は、ファイルシステムから指定されたファイルを削除するために使用します。第一引数の$filenameには削除したいファイルのパスを文字列で指定し、第二引数の$contextは高度な用途で使用されるため通常は省略します。この関数は、ファイルの削除に成功した場合はtrueを、失敗した場合はfalseをブール値で返します。

特に注意が必要なのは、存在しないファイルに対してunlink関数を直接呼び出すと、PHPが警告(E_WARNING)を発出し、戻り値はfalseとなる点です。これを避けてより安全にファイルを削除するために、サンプルコードのsafeUnlink関数のアプローチが推奨されます。

safeUnlink関数は、まずfile_exists()関数を使って削除対象のファイルが存在するかどうかを事前に確認します。ファイルが存在する場合のみunlink関数を呼び出し、その成否に応じて適切なメッセージを表示します。ファイルが存在しない場合はunlinkの呼び出し自体をスキップし、ファイルが存在しない旨を通知することで、不要な警告の発生を防ぎ、堅牢なファイル削除処理を実現しています。

unlink関数はファイルを削除しますが、存在しないファイルに対して呼び出すとPHPの警告(E_WARNING)が発生し、処理が失敗したと判断されます。サンプルコードのようにfile_exists関数で事前にファイルの存在を確認することは非常に重要です。これにより、存在しないファイルへのunlinkの呼び出しによる無用な警告を避け、安全に削除処理をスキップできます。結果として、エラーログの肥大化を防ぎ、プログラムの安定性を高めます。また、unlink関数の戻り値は削除の成否を示すため、必ず確認してください。削除失敗の原因としては、ファイルへの権限不足などが考えられます。

関連コンテンツ

【PHP8.x】unlink関数の使い方 | いっしー@Webエンジニア