ホームページ >バックエンド開発 >PHPチュートリアル >PHP_PHP チュートリアルでのファイルの読み取りおよび書き込み操作
PHP は、ファイル システム操作やディレクトリ操作 (「コピー」など) など、必要な機能を簡単に実装できる一連の I/O 関数を提供します。以下では、基本的なファイルの読み取りおよび書き込み操作について説明します。(1) ファイルの読み取り、(2) ファイルの書き込み、(3) ファイルへの追加。
以下は、基本的なファイルの読み取りと書き込み操作に関する記事です。この記事を読んで基本的なファイル操作を学びましたので、共有するためにここに投稿します。
ファイルを読み取る:
PHPコード:
1.
2.
3. $file_name = "データ.dat";
4. // 読み込むファイルの絶対パス: homedata.dat
5.
6. $file_pointer = fopen($file_name, "r");
7. // ファイルを開きます。 8. "r" はモードです。 9. または実行したい操作方法です。 10. 詳細については、この記事の後半の紹介を参照してください
11.
12. $file_read = fread($file_pointer, filesize($file_name));
13. // ファイル ポインタを介してファイルの内容を読み取ります 14.
15.
16. fclose($file_pointer);
17. //ファイルを閉じます
18.
19. print "読み取られたファイルの内容は次のとおりです: $file_read";
20. // ファイルの内容を表示します
21.?>
22.
ファイルの書き込み:
PHPコード:
1.
2.
3. $file_name = "データ.dat";
4. // 絶対パス: homedata.dat
5.
6. $file_pointer = fopen($file_name, "w");
7. // "w" はモードです。 8. 詳細は以下を参照してください
9.
10. fwrite($file_pointer, "書きたいもの");
11. // まずファイル 12. を 0 バイトに切り取り、13. 次に
を書き込みます
14.
15. fclose($file_pointer);
16. // 終わり
17.
18. 「データがファイルに正常に書き込まれました」を印刷します
;
19.
20.?>
21.
ファイルに追加:
PHPコード:
1.
2.
3. $file_name = "データ.dat";
4. // 絶対パス: homedata.dat
5.
6. $file_pointer = fopen($file_name, "a");
7. // 「w」モード
8.
9. fwrite($file_pointer, "追加したいもの");
10. // いいえ 11. ファイルを切り取り、 12. 0 バイトにします。 13. ファイルの最後にデータを追加します
14.
15. fclose($file_pointer);
16. // 終わり
17.
18.「データがファイルに正常に追加されました」を印刷します
;
19.
20.?>
21.
上記はほんの簡単な紹介であり、以下ではさらに深い内容について説明します。
場合によっては、複数人が書き込みを行う場合があり (トラフィックの多い Web サイトで最も一般的です)、その結果、次のような無駄なデータがファイルに書き込まれます。
info.file ファイルの内容は次のとおりです ->
|1|ムクル|15|男性|インド (n)
|2|ライナス|31|男性|フィンランド (n)
2 人が同時に登録すると、ファイルが破損します ->
情報ファイル ->
|1|ムクル|15|男性|インド
|2|ライナス|31|男性|フィンランド
|3|ロブ|27|男性|アメリカ|
ビル|29|男性|アメリカ
上記の例では、PHP が Rob の情報をファイルに書き込むときに、Bill も書き込みを開始します。このとき、Rob が記録した「n」を書き込む必要があり、ファイルが破損します。
これは絶対に起こってほしくないので、ファイルのロックを見てみましょう:
PHPコード:
1.
2.
3. $file_name = "データ.dat";
4.
5. $file_pointer = fopen($file_name, "r");
6.
7. $lock = flock($file_pointer, LOCK_SH);
8. // 4.0.2 を使用します。 9. したがって、LOCK_SH を使用します。 10. 1 として直接記述する必要がある場合があります。
11.
12. if ($lock) {
13.
14. $file_read = fread($file_pointer, filesize($file_name));
15. $lock = flock($file_pointer, LOCK_UN);
16. // バージョンが PHP4.0.2 未満の場合、17. LOCK_UN の代わりに 3 を使用します
18.
19. }
20.
21. fclose($file_pointer);
22.
23. 「ファイルの内容は $file_read です」を出力します
;
24.
25.?>
26.
上記の例では、read.php と read2.php の両方のファイルがファイルにアクセスする必要がある場合、どちらもファイルを読み取ることができますが、プログラムが書き込む必要がある場合は、読み取り操作が完了してファイルが解放されるまで待機する必要があります。 。
PHPコード:
1.
2.
3. $file_name = "データ.dat";
4.
5. $file_pointer = fopen($file_name, "w");
6.
7. $lock = flock($file_pointer, LOCK_EX);
8. // バージョンが PHP4.0.2 より前の場合、 9. LOCK_EX の代わりに 2 を使用します
10.
11. if ($lock) {
12.
13. fwrite($file_pointer, "何を書きたいか");
14. flock($file_pointer, LOCK_UN);
15. // バージョンが PHP4.0.2 より前の場合、 16. LOCK_UN の代わりに 3 を使用します
17.
18. }
19.
20. fclose($file_pointer);
21.
22. 「データがファイルに正常に書き込まれました」を印刷します
;
23.
24.?>
25.
ファイルを上書きするために「w」モードが使用されますが、それは適用されないと思います。
PHPコード:
1.
2.
3. $file_name = "データ.dat";
4.
5. $file_pointer = fopen($file_name, "a");
6.
7. $lock = flock($file_pointer, LOCK_EX);
8. // バージョンが PHP4.0.2 より前の場合、 9. LOCK_EX の代わりに 2 を使用します
10.
11. if ($lock) {
12.
13. fseek($file_pointer, 0, SEEK_END);14. // バージョンが PHP4.0RC1 より小さい場合、 15. fseek($file_pointer, filsize($file_name)) を使用します。
16.
17. fwrite($file_pointer, "何を書きたいか");
18. flock($file_pointer, LOCK_UN);
19. // バージョンが PHP4.0.2 より前の場合、20. LOCK_UN の代わりに 3 を使用します
21.
22. }
23.
24. fclose($file_pointer);
25.
26. 「データがファイルに正常に書き込まれました」を印刷します
;
27.
28.?>
29.
うーん...、データの追加は他の操作とは少し異なり、FSEEK です。ファイル ポインターがファイルの最後にあることを常に確認するのが良い習慣です。
Windows システムの場合、上記のファイルの前に '' を付ける必要があります。
群れのトーク:
Flock() は、ファイルが開かれた後にのみファイルをロックします。上記の列では、ファイルは開かれた後にロックされますが、ファイルの内容はその時点の内容のみであり、他のプログラム操作の結果は反映されません。そのため、fseek はファイルの追加だけに使用する必要はありません。操作だけでなく、読み取り操作も可能です。
(ここでの翻訳は正確ではないかもしれませんが、アイデアは理解できると思います)。
パターンについて:
'r' - 読み取り専用モードで開き、ファイルポインタはファイルの先頭に配置されます
'r+' - 読み取り/書き込みモードで開き、ファイルポインターはファイルヘッダーに配置されます
'w' - 書き込み専用に開きます。ファイルポインターはファイルの先頭に配置され、ファイルは 0 バイトにカットされます。ファイルが存在しない場合は、ファイルの作成を試みます
'w+' - 読み取りと書き込みのために開きます。ファイル ポインターはファイル ヘッダーに配置され、ファイル サイズは 0 バイトにカットされます。ファイルが存在しない場合は、ファイルの作成を試みます
'a' - 書き込み専用モードで開きます。ファイルポインターはファイルの末尾に配置されます。ファイルが存在しない場合は、ファイルの作成を試みます
'a+' - 読み取りと書き込みのためにオープンされ、ファイルポインターはファイルの末尾に配置されます。ファイルが存在しない場合は、ファイルの作成を試みます
ちなみに、ファイルディレクトリを作成するコード
//「../../../xxx/xxx.txt」のようなディレクトリを作成します
function createdirs($path, $mode = 0777) //モード 077
{
$dirs = 爆発('/',$path);
$pos = strrpos($path, ".");
if ($pos === false) { // 注: 3 つの等号
// 見つからない、パスがファイルではなくディレクトリで終わっていることを意味します
$サブマウント=0;
}
他 {
$サブマウント=1;
}
for ($c=0;$c
if (!file_exists($thispath)) {
//print "$thispath
";
mkdir($thispath,$mode); //mkdir 関数はディレクトリを作成します
}
}
}
//createdirs("xxx/xxxx/xxxx",);
のように呼び出します
//$GLOBALS["dirseparator"] は元の関数で使用されていたため、「/」に変更しました
function recur_mkdirs($path, $mode = 0777) //モード 0777
{
//$GLOBALS["ディセパレータ"]
$dirs =explode($GLOBALS["dirseparator"],$path);
$pos = strrpos($path, ".");
if ($pos === false) { // 注: 3 つの等号
// 見つからない、パスがファイルではなくディレクトリで終わっていることを意味します
$サブマウント=0;
}
他 {
$サブマウント=1;
}
これらは、初心者にとって非常に役立つコードの一部にすぎません。他の人にインスピレーションを与えることを願って、ここに投稿します。