Pengurusan Sistem Fail dengan PHP

Saya pernah menulis blog menggunakan PHP pada baris perintah, tetapi saya tidak membuat liputan menggunakan PHP untuk mengakses sistem fail dalam catatan itu demi kepentingan ukuran catatan blog. Saya menggunakan catatan ini untuk merangkumi beberapa asas pengurusan sistem fail PHP.

Ramai di antara kita yang menulis dan menggunakan skrip melakukannya untuk fungsi yang berkaitan dengan sistem fail. Kami membuat skrip tindakan yang biasa kami lakukan dalam sistem fail. Secara khusus, kita sering mendapati diri kita perlu menyalin fail, menamakan semula fail, membuang fail, dan membuka dan menutup fail. Kita sering perlu melakukan logik tertentu berdasarkan ciri-ciri fail dan direktori tertentu. Sukar untuk menganggap bahasa sebagai bahasa skrip dengan serius tanpa sokongan sistem fail yang baik. Nasib baik, PHP mempunyai sokongan terpadu untuk pengurusan sistem fail. Sokongan ini boleh digunakan bersama dengan baris perintah PHP.

W3Schools.com adalah sumber yang terbukti berguna untuk belajar mengenai teknologi web dan liputan mereka mengenai PHP Filesystem Functions adalah contoh lain dari itu. Halaman ini mengingatkan kita bahawa fungsi sistem fail PHP "adalah sebahagian daripada teras PHP" dan "membolehkan anda mengakses dan memanipulasi sistem fail." Lebih penting lagi, halaman ini juga merangkum perincian konfigurasi sistem fail PHP, fungsi sistem fail PHP, dan pemalar sistem fail PHP. Mengklik pada nama fungsi menuju ke halaman dengan perincian lebih lanjut mengenai fungsi tersebut dan juga contoh kod PHP menggunakan fungsi tersebut. Kerana saya hanya akan merangkumi subkumpulan ini dalam catatan ini, saya ingin memastikan merujuk halaman W3Schools ini lebih awal.

Skrip berikut demoPhpFileSystemManagement.php, menunjukkan beberapa fungsi PHP untuk menentukan maklumat fail. Saya menyenaraikan keseluruhan skrip di sini dan kemudian menghasilkan semula bahagian skrip sekali lagi semasa saya membincangkannya.

demoPhpFileSystemManagement.php

#!/usr/bin/php  

Sebelum melihat liputan yang lebih terperinci mengenai fungsi sistem fail PHP yang digunakan dalam contoh di atas, saya telah memerhatikan latar belakang Java saya dalam kod PHP tersebut. Sebagai contoh, saya menggunakan komen gaya Javadoc untuk fungsi dalam kod. Nasib baik, PHPDocumentor menghormati komen gaya Javadoc ketika membuat dokumentasi kod. Kod di atas juga menunjukkan perbezaan konvensyen penamaan yang saya terbiasa di Java (sarung unta) dan konvensi penamaan PHP (semua nama huruf kecil dengan kata-kata dipisahkan oleh garis bawah) seperti yang ditunjukkan oleh fungsi PHP yang dipanggil.

Bahagian pertama skrip PHP menyediakan menu baris perintah teks ringkas yang mendorong pengguna memasukkan pilihan dan nama fail dan jalan. Coretan kod ini tidak melakukan apa-apa dengan fungsi sistem fail PHP, tetapi menunjukkan input dan output PHP standard dan pernyataan suis PHP. Bahagian pertama dikeluarkan di sini.

Menu Baris Perintah dan Pemprosesan Input

do { echo "\nWhich PHP File System Operation Do You Want To Run?\n\n"; echo "1. Parse File Path Information\n"; echo "2. Acquire an Absolute Path\n"; echo "3. Get File Size\n"; echo "4. Get Disk Size and Free Space\n"; echo "5. Get File Times\n"; echo "\nEnter 0 to Exit\n"; echo "\n\nYour Choice: "; $selection = trim(fgets(STDIN)); } while (!( ($selection == "0") || ($selection == "1") || ($selection == "2") || ($selection == "3") || ($selection == "4") || ($selection == "5"))); switch ($selection) { case "1": echo "Enter a file path: "; $filePath = trim(fgets(STDIN)); $filePathInfo = parseFilePath($filePath); echo $filePathInfo; break; case "2": echo "Enter path: "; $filePath = trim(fgets(STDIN)); $realPath = convertPathToAbsolute($filePath); echo $realPath; break; case "3": echo "Enter path and name of file: "; $filePath = trim(fgets(STDIN)); $sizeOfFile = getSizeOfFile($filePath); echo "File ".$filePath." has a size of ".$sizeOfFile." bytes."; break; case "4": echo "Enter disk label: "; $diskLabel = trim(fgets(STDIN)); $diskSpace = getDiskSizeAndFreeSpace($diskLabel); $percentageFree = $diskSpace[1] / $diskSpace[0]; echo "Disk ".$diskLabel." has ".$diskSpace[1]." of ".$diskSpace[0] ." bytes free (".round($percentageFree*100)."%)."; break; case "5": echo "Enter a file who access/changed/modified times are desired: "; $filePath = trim(fgets(STDIN)); $fileTimes = getFileTimes($filePath); echo "File ".$filePath." was last accessed on ".$fileTimes[0] .", was last changed on ".$fileTimes[1] .", and was last modified on ".$fileTimes[2]; break; case "0": default: echo "\n\n"; exit(); } 

Sisa skrip PHP mengandungi fungsi yang menggunakan dan menunjukkan fungsi pengurusan sistem fail PHP.

PHP menyediakan fungsi untuk akses mudah ke perincian jalur fail seperti direktori file, nama lengkap file itu sendiri, peluasan fail, dan nama fail tanpa perluasan. Sebilangan ini ditunjukkan dalam contoh di atas dalam parseFilePathfungsi, yang akan dihasilkan semula. Fungsi ini menunjukkan fungsi nama basen, dirname, dan pathinfo PHP.

PHP Menyediakan Maklumat Laluan Fail

/** * Parse the provided file path. Demonstrates the following PHP functions: * * - basename() : Provides base portion of file path (file name). * - dirname() : Directory name portion of file path. * - pathinfo() : All components of path (basename, directory name, extension). * * @param $filePath File path to be parsed. * @return File path information in a single String. */ function parseFilePath($filePath) { echo "Parsing file path ...", $filePath, "\n"; $fileBaseName = basename($filePath); $fileDirectoryName = dirname($filePath); $pathInfo = pathinfo($filePath); return "File Name: ".$fileBaseName."\nDirectory Name: ".$fileDirectoryName ."\nFileName: ".$pathInfo['basename']."\nDirectory Name: " .$pathInfo['dirname']."\nFile Extension: ".$pathInfo['extension'] ."\nFile name without extension: ".$pathInfo['filename']; } 

Output dari menjalankan perkara di atas terhadap fail contoh kini ditunjukkan.

PHP menyediakan fungsi jalan yang berguna yang menyediakan versi mutlak dari jalan yang disediakan. Sebagai contoh, ia akan menyelesaikan pautan lembut dan direktori relatif untuk mengembalikan jalan mutlak. Ini ditunjukkan dalam convertPathToAbsolutefungsi dalam contoh saya (dan dihasilkan dalam senarai kod seterusnya).

Menunjukkan Laluan Mutlak melalui jalan nyata

/** * Convert the provided path to an absolute path. * * @param $filePath File path to be made absolute. * @return Absolute version of provided file path. */ function convertPathToAbsolute($filePath) { echo "Converting file path ", $filePath, " to absolute path...\n"; return realpath($filePath); } 

Bahagian skrip di atas menghasilkan output berikut.

PHP mempermudah menentukan ukuran fail dengan fungsi ukuran file yang diberi nama. getSizeOfFileFungsi saya menunjukkan ini dan disenaraikan sendiri dalam senarai kod seterusnya.

Mendapatkan Ukuran Fail dalam PHP

/** * Determine size of provided file. * * @param? $filePath Path and name of file whose size is needed. * @return Size of file indicated by provided file path and name (in bytes). */ function getSizeOfFile($filePath) { echo "Getting size of file ", $filePath, "...\n"; return filesize($filePath); } 

Kod tersebut membawa kepada output yang ditunjukkan pada gambar seterusnya.

PHP juga memudahkan untuk mendapatkan maklumat ruang cakera. Fungsi disk_total_space dan disk_free_space PHP ditunjukkan dalam senarai kod di bawah untuk fungsi getDiskSizeAndFreeSpace saya.

Saiz Cakera PHP dan Ruang Kosong

/** * Provide disk size and free space on disk for provided disk. * * @param $diskLabel Label of disk whose total size and free space are to be * provided. * @return Array of two elements, first of which is total disk space (in bytes) * and second of which is free disk space (in bytes). */ function getDiskSizeAndFreeSpace($diskLabel) { return array(disk_total_space($diskLabel), disk_free_space($diskLabel)); } 

Contoh di atas tidak hanya menunjukkan fungsi disk_total_space dan disk_free_space PHP, tetapi juga menunjukkan penggunaan fungsi array PHP untuk membuat array dan meletakkan elemen dalam array dalam satu pernyataan.

Keluaran bahagian skrip ini ditunjukkan seterusnya.

Fungsi terakhir dalam skrip saya adalah getFileTimesdan tujuannya adalah untuk menunjukkan tiga kaedah PHP untuk mengakses tarikh / masa yang berkaitan dengan fail. Secara khusus, fungsi fileatime, filectime, dan waktu filem ditunjukkan.

Masa Fail PHP