首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 刪除檔案與變數:unlink() 與 unset() 完全指南

     編輯:PHP 相關知識

前言

PHP 沒有名為 delete() 的函數。刪除檔案請用 unlink(),刪除變數請用 unset()。本文詳細說明兩者語法、行為差異、常見陷阱與實戰範例。

unlink() — 刪除檔案

語法

unlink(string $filename, resource $context = null): bool
  • 成功回傳 true,失敗回傳 false (權限不足、檔案不存在、被鎖定)。
  • 刪除符號連結僅移除連結,目標檔案保留。

實戰範例

<?php
$file = '/tmp/cache/data.json';
if (file_exists($file)) {
    if (unlink($file)) {
        echo "刪除成功";
    } else {
        echo "刪除失敗,檢查權限";
    }
} else {
    echo "檔案不存在";
}

// 批次刪除目錄下所有 .tmp 檔
$files = glob('/tmp/*.tmp');
foreach ($files as $f) {
    @unlink($f); // 抑制單一失敗警告
}
?>

unset() — 刪除變數

語法

unset(mixed $var, mixed ...$vars): void
  • 銷毀變數,釋放記憶體 (引用計數歸零時)。
  • 不影響全域變數在其他作用域的副本 (參考賦值除外)。
  • 靜態變數在函數內 unset 僅銷毀區域引用,下次呼叫仍保留原值。

實戰範例

<?php
$a = 'hello';
$b = &$a; // 參考
unset($a);
echo $b; // hello (參考計數仍為 1)

$arr = [1,2,3];
unset($arr[1]); // 移除索引 1,陣列變 [0=>1, 2=>3] (索引不重排)
// 重排索引用 array_values()
$arr = array_values($arr); // [0=>1, 1=>3]

// 釋放大型陣列記憶體
$big_data = range(1, 1000000);
unset($big_data); // 立即釋放
?>

常見誤區對比

操作函數錯誤用法正確用法
刪除檔案unlinkdelete($file)unlink($file)
刪除變數unsetdelete($var)unset($var)
刪除陣列元素unset$arr = []; (重新賦值)unset($arr[key])
清空陣列unsetunset($arr) 後無法直接用$arr = []; 或 array_splice($arr, 0)

進階:垃圾回收與循環引用

<?php
class Node {
    public $parent = null;
    public $children = [];
}
$a = new Node();
$b = new Node();
$a->children[] = $b;
$b->parent = $a; // 循環引用
unset($a, $b);   // 計數歸零但未立即釋放
gc_collect_cycles(); // 強制回收循環引用
?>

結語

記住:檔案用 unlink(),變數用 unset()。PHP 無 delete() 函數。掌握兩者作用域、引用計數與陣列索引行為,能避免記憶體洩漏與邏輯錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved