最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于PHP實(shí)現(xiàn)文件讀寫與上傳功能的詳細(xì)步驟

 更新時(shí)間:2026年03月31日 09:09:45   作者:我叫黑大帥  
這篇文章主要為大家詳細(xì)介紹了基于PHP實(shí)現(xiàn)文件讀寫與上傳功能的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

判斷與信息獲取

判斷文件

函數(shù)說(shuō)明返回值
file_exists($path)判斷文件或目錄是否存在bool
is_file($path)判斷是否是文件bool
is_dir($path)判斷是否是目錄bool
is_readable($path)判斷是否可讀bool
is_writable($path)判斷是否可寫bool
<?php
$file = './config.php';
$dir = './logs';
// 1. 判斷文件是否存在
if (file_exists($file)) {
    echo "文件存在
";
    // 2. 判斷是否是文件
    if (is_file($file)) {
        echo "這是一個(gè)文件
";
    }
}
// 3. 判斷目錄是否存在且可寫
if (is_dir($dir) && is_writable($dir)) {
    echo "目錄存在且可寫
";
}
?>

獲取文件信息

函數(shù)說(shuō)明
filesize($path)獲取文件大?。ㄗ止?jié))
filemtime($path)獲取文件最后修改時(shí)間(時(shí)間戳)
pathinfo($path)獲取文件路徑信息(目錄、文件名、后綴)
<?php
$file = './photo.jpg';

// 獲取文件大小
$size = filesize($file);
echo "文件大小:" . round($size / 1024, 2) . " KB<br>";

// 獲取最后修改時(shí)間
$mtime = filemtime($file);
echo "最后修改時(shí)間:" . date('Y-m-d H:i:s', $mtime) . "<br>";

// 獲取路徑信息
$info = pathinfo($file);
echo "文件名:" . $info['filename'] . "<br>";
echo "后綴名:" . $info['extension'] . "<br>";
echo "目錄:" . $info['dirname'] . "<br>";
?>

文件讀寫

簡(jiǎn)單方式:file_get_contents()/file_put_contents()

// 讀取文件內(nèi)容到字符串
$content = file_get_contents(string $filename);

// 將字符串寫入文件(返回寫入的字節(jié)數(shù))
file_put_contents(string $filename, mixed $data, int $flags = 0);

讀取 JSON 配置文件

<?php
// 假設(shè) config.json 內(nèi)容:{"db_host": "localhost", "db_user": "root"}
$json = file_get_contents('./config.json');
$config = json_decode($json, true); // 轉(zhuǎn)數(shù)組

echo "數(shù)據(jù)庫(kù)主機(jī):" . $config['db_host']; // 數(shù)據(jù)庫(kù)主機(jī):localhost
?>

寫入日志文件(追加模式)

<?php
// 日志內(nèi)容
$log = "[".date('Y-m-d H:i:s')."] 用戶登錄成功\n";

// FILE_APPEND:追加寫入(不覆蓋原內(nèi)容)
// LOCK_EX:獨(dú)占鎖(防止多人同時(shí)寫入導(dǎo)致數(shù)據(jù)混亂)
file_put_contents('./logs/app.log', $log, FILE_APPEND | LOCK_EX);
?>

底層方式:fopen()/fwrite()/fclose()

當(dāng)你需要逐行讀取、寫入大文件更精細(xì)的控制時(shí),使用這組函數(shù)。

// 打開(kāi)文件,返回資源句柄
$handle = fopen(string $filename, string $mode);

// 寫入文件
fwrite(resource $handle, string $data);

// 讀取一行
$line = fgets(resource $handle);

// 關(guān)閉文件
fclose(resource $handle);

常用 mode 參數(shù)

模式說(shuō)明
r只讀,指針在開(kāi)頭
w只寫,清空文件內(nèi)容,指針在開(kāi)頭
a追加,指針在末尾
r+讀寫,指針在開(kāi)頭

逐行讀取大文件(不占內(nèi)存)

<?php
// 打開(kāi)一個(gè)大文件(比如 1GB 的日志)
$handle = fopen('./large_file.log', 'r');

if ($handle) {
    // 逐行讀取,直到文件結(jié)束
    while (($line = fgets($handle)) !== false) {
        // 處理每一行(比如過(guò)濾錯(cuò)誤日志)
        if (strpos($line, 'ERROR') !== false) {
            echo "發(fā)現(xiàn)錯(cuò)誤:" . $line . "<br>";
        }
    }
    fclose($handle);
}
?>

目錄操作:創(chuàng)建、刪除與遍歷

函數(shù)說(shuō)明
mkdir($path)創(chuàng)建目錄
rmdir($path)刪除空目錄
unlink($path)刪除文件

遞歸創(chuàng)建多級(jí)目錄

<?php
// 要?jiǎng)?chuàng)建的目錄路徑
$dir = './uploads/2023/10/01';

// mkdir 第三個(gè)參數(shù) true:遞歸創(chuàng)建父目錄
if (!is_dir($dir)) {
    mkdir($dir, 0755, true);
    echo "目錄創(chuàng)建成功";
}
?>

遍歷目錄

scandir()(簡(jiǎn)單遍歷,適合單層目錄)

<?php
$dir = './uploads';

// 獲取目錄下所有文件和目錄(包含 . 和 ..)
$files = scandir($dir);

// 遍歷并過(guò)濾掉 . 和 ..
foreach ($files as $file) {
    if ($file != '.' && $file != '..') {
        // 判斷是文件還是目錄
        $type = is_file($dir . '/' . $file) ? '文件' : '目錄';
        echo $type . ":" . $file . "<br>";
    }
}
?>

RecursiveDirectoryIterator(遞歸遍歷,適合多層目錄)

<?php
$dir = './uploads';

// 使用遞歸迭代器
$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
    RecursiveIteratorIterator::SELF_FIRST
);

foreach ($iterator as $file) {
    // $file 是 SplFileInfo 對(duì)象
    echo "路徑:" . $file->getPathname() . " - 大?。? . $file->getSize() . " 字節(jié)<br>";
}
?>

文件上傳 :圖片上傳

文件上傳是 Web 開(kāi)發(fā)的經(jīng)典需求,PHP 通過(guò) $_FILES 超全局變量和 move_uploaded_file() 函數(shù)處理。

<form action="upload.php" method="post" enctype="multipart/form-data">
    選擇圖片:<input type="file" name="avatar" accept="image/*">
    <input type="submit" value="上傳">
</form>
<?php
// 檢查是否有上傳錯(cuò)誤
if ($_FILES['avatar']['error'] !== UPLOAD_ERR_OK) {
    exit('上傳錯(cuò)誤:' . $_FILES['avatar']['error']);
}
// 定義上傳目錄
$uploadDir = './uploads/';
if (!is_dir($uploadDir)) {
    mkdir($uploadDir, 0755, true);
}
// 獲取文件后綴,生成唯一文件名
$ext = pathinfo($_FILES['avatar']['name'], PATHINFO_EXTENSION);
$filename = uniqid() . '.' . $ext;
$destPath = $uploadDir . $filename;
// 驗(yàn)證文件類型(簡(jiǎn)單驗(yàn)證:只允許圖片)
$allowedTypes = ['jpg', 'jpeg', 'png', 'gif'];
if (!in_array(strtolower($ext), $allowedTypes)) {
    exit('只允許上傳圖片文件');
}
// 驗(yàn)證文件大小(限制 2MB)
if ($_FILES['avatar']['size'] > 2 * 1024 * 1024) {
    exit('文件大小不能超過(guò) 2MB');
}
// 從臨時(shí)目錄移動(dòng)到目標(biāo)目錄
if (move_uploaded_file($_FILES['avatar']['tmp_name'], $destPath)) {
    echo "上傳成功!文件路徑:" . $destPath;
} else {
    exit('文件移動(dòng)失敗');
}
?>

到此這篇關(guān)于基于PHP實(shí)現(xiàn)文件讀寫與上傳功能的詳細(xì)步驟的文章就介紹到這了,更多相關(guān)PHP文件讀寫與上傳內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

吉安县| 台前县| 手机| 威信县| 丽江市| 肇州县| 宣汉县| 彩票| 湛江市| 宜川县| 长子县| 横峰县| 麟游县| 伊宁市| 拉萨市| 昆明市| 合阳县| 三台县| 江北区| 井研县| 东兰县| 石渠县| 改则县| 武邑县| 广南县| 肥城市| 沛县| 繁昌县| 舟山市| 泽普县| 广昌县| 尼勒克县| 凤山市| 宜黄县| 富民县| 龙江县| 腾冲县| 凉城县| 泰和县| 浦县| 汪清县|