PHP編程中八種常見的文件操作方式_PHP教程
Jul 21, 2016 pm 04:00 PM
文件和目錄的操作
PHP處理本地服務(wù)器上的文件和目錄是非常方便的,但有時候會出現(xiàn)權(quán)限和路徑相關(guān)的問題
1.打開文件
resource?fopen?(?string?filename,?string?mode?[,?bool?use_include_path?[,?resource?zcontext]]?)
$handle?=?fopen(filename,mode)//打開文件,返回代表此文件的資源的句柄
文件名稱可以使用相對路徑或者絕對路徑也可以使用網(wǎng)絡(luò)協(xié)議模式,打開模式具有r\r+\w\w+\a\a+\x\x+\b
在操作二進制文件時如果沒有指定?'b'?標(biāo)記,可能會碰到一些奇怪的問題,包括壞掉的圖片文件以及關(guān)于?\r\n?字符的奇怪問題。
為移植性考慮,強烈建議在用?fopen()?打開文件時總是使用?'b'?標(biāo)記。
以下是幾種打開文件的方式
$fp?=?@fopen('log.txt',"rb");
$fp?=?@fopen('../log.txt',"rb");
$fp?=?@fopen("http://www.runer.com.cn/default.htm","rb");//還可以使用ftp和ghoper等協(xié)議,必須啟用php.ini文件中的allow_url_fopen選項
////////////////////////////代碼部分////////////////////////////////////////
$filename1?=?"userinfo.txt";//目錄下或include_path中存在這個文件
$filename2?=?"test.txt";//目錄下或include_path并不存在這個文件
$resource1?=?fopen($filename1,"rb");
@$resource2?=?fopen($filename2,"rb");//因為目錄中不存在這個文件,并且并未使用或include_path尋找包含文件所在路徑則此操作會報錯,使用錯誤抑制符@可以迫使瀏覽器不輸出錯誤信息
if($resource1)
echo?"打開文件{$filename1}成功";
if(!@fopen($filename2,"r"))
echo?"打開文件{$filename2}不成功";
//////////////////////////////////////////////////////////////////////////
---------------------輸出結(jié)果----------------------------------------
打開文件userinfo.txt成功
---------------------------------------------------------------------
2.使用完畢文件后,要顯式的告訴PHP已經(jīng)使用完文件,讓操作系統(tǒng)確保將文件的所有內(nèi)容正確地從緩沖區(qū)刷新到硬盤
使用fclose()關(guān)閉文件,
bool?fclose?(?resource?handle?)//關(guān)閉一個已打開的文件指針
3.讀取文件,fopen函數(shù)的mode參數(shù)允許讀取,PHP提供了幾個函數(shù)從文件讀取數(shù)據(jù)
string?fgets?(?int?handle?[,?int?length]?)從文件指針中讀取一行,在二進制文件上嘗試fgets會產(chǎn)生不可預(yù)測的結(jié)果
如果不指定長度,默認(rèn)讀取1K數(shù)據(jù),碰到換行符(包括在返回值中)、EOF?或者已經(jīng)讀取了?length?-?1?字節(jié)后停止
string?fgetss?(?resource?handle?[,?int?length?[,?string?allowable_tags]]?)從文件指針中讀取一行并過濾掉?HTML?標(biāo)記
fgetc()讀取單個字符
fread()讀取任意二進制數(shù)據(jù)
////////////////////////////代碼部分////////////////////////////////////////
$handle?=?fopen?("test.jpg",?"rb");
$c;
while?(!feof($handle))?{
$contents?.=?@fread($handle,?8192);//循環(huán)讀取并將其合并為一個大塊文件
}
fclose($handle);
//////////////////////////////////////////////////////////////////////////
---------------------輸出結(jié)果----------------------------------------
---------------------------------------------------------------------
4.判斷文件讀取的狀態(tài)
每個文件句柄都有一個文件指針,或者一個指出下一個操作將在文件中哪里發(fā)生的游標(biāo),根據(jù)fopen函數(shù)的mode參數(shù)
文件指針最初位于文件的開頭(0),或者文件的末尾
feof()可以判斷文件是否已經(jīng)到末尾(到末尾后函數(shù)返回TRUE)
filesize()函數(shù)返回文件的大小?5.寫入文件
fwrite()函數(shù)執(zhí)行文件寫入
////////////////////////////代碼部分////////////////////////////////////////
$filename?=?'test.txt';
$somec;
//?首先我們要確定文件存在并且可寫。
if?(is_writable($filename))?{
//?在這個例子里,我們將使用添加模式打開$filename,
//?因此,文件指針將會在文件的開頭,
//?那就是當(dāng)我們使用fwrite()的時候,$somecontent將要寫入的地方。
if?(!$handle?=?fopen($filename,?'a'))?{
echo?"不能打開文件?$filename";
exit;
}
//?將$somecontent寫入到我們打開的文件中。
if?(fwrite($handle,?$somecontent)?===?FALSE)?{
echo?"不能寫入到文件?$filename";
exit;
}
echo?"成功地將?$somecontent?寫入到文件$filename";
fclose($handle);
}?else?{
}
echo?"文件?$filename?不可寫";
//////////////////////////////////////////////////////////////////////////
---------------------輸出結(jié)果----------------------------------------
成功地將?添加這些文字到文件?寫入到文件test.txt
---------------------------------------------------------------------
對于二進制數(shù)據(jù),必須指定第三個參數(shù),它包含寫入到磁盤的數(shù)據(jù)字節(jié)數(shù)
$result?=?@fwrite($fp,$binary_data,mb_strlen($binary_data,'8bit'));
6.文件權(quán)限和其他信息
is_readable()//判斷文件是否可讀
is_writeable()//判斷文件是否可寫
is_writable()//判斷文件是否可寫
fileperms()//判斷文件的權(quán)限(UNIX風(fēng)格的文件權(quán)限測試函數(shù))
file_exists()//是否存在這個文件
fileowner()//判斷文件所屬用戶
filegroup()//判斷文件所屬組
7.刪除和重命名文件
unlink()//刪除文件
rename()//重命名文件
8.訪問目錄
目錄訪問建議使用前向斜線"/",兼容windows和unix系統(tǒng)
basename()//返回不包括路徑信息的文件名
dirname()//返回文件名的目錄部分
realpath()//接受相對路徑,返回文件的絕對路徑
pathinfo()//提取給定路徑的目錄名,基本文件名和擴展名
opendir()//打開目錄,返回資源句柄
readdir()//讀取目錄項
rewinddir()//將讀取指針返回開頭
closedir()//關(guān)閉讀取句柄
chdir()//改變當(dāng)前腳本執(zhí)行期間的當(dāng)前工作目錄
mkdir()//創(chuàng)建目錄
rmdir()刪除目錄
////////////////////////////代碼部分////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
---------------------輸出結(jié)果----------------------------------------
filename:?web?:?filetype:?dir
filename:?study?:?filetype:?dir

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Fail Tetapan.JSON terletak di laluan peringkat pengguna atau ruang kerja dan digunakan untuk menyesuaikan tetapan vscode. 1. Laluan peringkat pengguna: Windows adalah C: \ Users \\ AppData \ Roaming \ code \ user \ settings.json, macOS adalah /users//library/applicationsupport/code/user/settings.json, linux adalah/ 2. Laluan Tahap Ruang Kerja: .VSCODE/Tetapan dalam Direktori Root Projek

ReadonlypropertiesinPHP8.2canonlybeassignedonceintheconstructororatdeclarationandcannotbemodifiedafterward,enforcingimmutabilityatthelanguagelevel.2.Toachievedeepimmutability,wrapmutabletypeslikearraysinArrayObjectorusecustomimmutablecollectionssucha

Gunakan DateTime.StrpTime () untuk menukar rentetan tarikh ke dalam objek DateTime. 1. Penggunaan Asas: Parse "2023-10-05" sebagai objek DateTime melalui "%y-%m-%d"; 2. Menyokong pelbagai format seperti "%m/%d/%y" untuk menghuraikan tarikh Amerika, "%d/%m/%y" untuk menghuraikan tarikh British, "%b%d,%y%i:%m%p" untuk menghuraikan masa dengan am/pm; 3. Gunakan dateUtil.parser.parse () untuk secara automatik menyimpulkan format yang tidak diketahui; 4. Gunakan .D

Pertama, gunakan JavaScript untuk mendapatkan pilihan sistem pengguna dan tetapan tema yang disimpan di dalam negara, dan memulakan tema halaman; 1. Struktur HTML mengandungi butang untuk mencetuskan Topik Switching; 2. CSS menggunakan: Root untuk menentukan pembolehubah tema yang cerah, kelas mod-mode mentakrifkan pembolehubah tema gelap, dan menggunakan pembolehubah ini melalui VAR (); 3. JavaScript mengesan lebih suka skema-skema dan membaca LocalStorage untuk menentukan tema awal; 4. Tukar kelas mod gelap pada elemen HTML apabila mengklik butang, dan menjimatkan keadaan semasa ke LocalStorage; 5. Semua perubahan warna disertakan dengan animasi peralihan 0.3 saat untuk meningkatkan pengguna

Ya, menu drop-down CSS biasa boleh dilaksanakan melalui HTML dan CSS tulen tanpa JavaScript. 1. Gunakan UL dan Li bersarang untuk membina struktur menu; 2. Gunakan: Hover pseudo-Class untuk mengawal paparan dan menyembunyikan kandungan tarik-turun; 3. Tetapkan Kedudukan: Relatif untuk Ibu Bapa Li, dan submenu diletakkan menggunakan kedudukan: mutlak; 4. Submenu mungkir untuk memaparkan: Tiada, yang menjadi paparan: blok apabila melayang; 5. Multi-level pull-down boleh dicapai melalui bersarang, digabungkan dengan peralihan, dan menambah animasi pudar, dan disesuaikan dengan terminal mudah alih dengan pertanyaan media. Penyelesaian keseluruhannya mudah dan tidak memerlukan sokongan JavaScript, yang sesuai untuk besar

Gunakan alat analisis prestasi untuk mencari kesesakan, gunakan VisualVM atau JProfiler dalam peringkat pembangunan dan ujian, dan memberi keutamaan kepada async-profiler dalam persekitaran pengeluaran; 2. Mengurangkan penciptaan objek, menggunakan semula objek, gunakan StringBuilder untuk menggantikan splicing rentetan, dan pilih strategi GC yang sesuai; 3. Mengoptimumkan penggunaan koleksi, pilih dan preset kapasiti awal mengikut tempat kejadian; 4. Mengoptimumkan keserasian, gunakan koleksi serentak, mengurangkan granulariti kunci, dan tetapkan kolam benang dengan munasabah; 5. Tune Parameter JVM, tetapkan saiz timbunan yang munasabah dan pemungut sampah rendah dan membolehkan log GC; 6. Elakkan refleksi di peringkat kod, ganti kelas pembalut dengan jenis asas, penangguhan permulaan, dan gunakan akhir dan statik; 7. Ujian dan Pemantauan Prestasi Berterusan, digabungkan dengan JMH

iTertools.Combinations digunakan untuk menjana semua kombinasi yang tidak berulang (perintah tidak relevan) yang memilih bilangan elemen tertentu dari objek Itable. Penggunaannya termasuk: 1. Pilih 2 kombinasi elemen dari senarai, seperti ('a', 'b'), ('a', 'c'), dan sebagainya, untuk mengelakkan perintah berulang; 2. Ambil 3 kombinasi watak rentetan, seperti "ABC" dan "ABD", yang sesuai untuk penjanaan berikutnya; 3. Cari kombinasi di mana jumlah dua nombor adalah sama dengan nilai sasaran, seperti 1 5 = 6, memudahkan logik gelung berganda; Perbezaan antara kombinasi dan susunan terletak pada sama ada perintah itu penting, kombinasi menganggap Ab dan BA sebagai sama, sementara permutasi dianggap berbeza;

Python adalah alat yang cekap untuk melaksanakan proses ETL. 1. Pengekstrakan data: Data boleh diekstrak dari pangkalan data, API, fail dan sumber lain melalui panda, sqlalchemy, permintaan dan perpustakaan lain; 2. Penukaran Data: Gunakan panda untuk pembersihan, penukaran jenis, persatuan, pengagregatan dan operasi lain untuk memastikan kualiti data dan mengoptimumkan prestasi; 3. Pemuatan Data: Gunakan kaedah Pandas 'TO_SQL atau platform awan SDK untuk menulis data ke sistem sasaran, perhatikan kaedah menulis dan pemprosesan batch; 4. Cadangan Alat: Airflow, Dagster, Prefect digunakan untuk penjadualan dan pengurusan proses, menggabungkan penggera log dan persekitaran maya untuk meningkatkan kestabilan dan mengekalkan.
