ホームページ  >  記事  >  php教程  >  コード共有を実現するためのPHPファイル操作

コード共有を実現するためのPHPファイル操作

WBOY
WBOYオリジナル
2016-06-13 12:05:34935ブラウズ

ファイルへのデータの書き込みまたは読み取りは、基本的に 3 つのステップに分かれています。
1. ファイルを開く (存在する場合)
2. ファイルを閉じる
l ファイルを開く
ファイルを開く前に、ファイルのパスとファイルが存在するかどうかを知る必要があります。
$_SERVER["DOCUMENT_ROOT"] 組み込みグローバル変数を使用して、サイトの相対パスを取得します。以下のように:
$root = $_SERVER["DOCUMENT_ROOT"];
関数 file_exists() を使用して、ファイルが存在するかどうかを検出します。以下のように:
If(!file_exists("$root/order.txt")){echo 'ファイルが存在しません';}
次に fopen() 関数を使用してファイルを開きます。
$fp = fopen("$root/order.txt",'ab');
fopen() 関数は 2、3、または 4 つのパラメーターを受け入れます。
最初のパラメータはファイルパスで、2 番目のパラメータは動作モード (読み取り/書き込み/追加など) であり、必須パラメータです。
$fp = fopen("$root/order.txt",'ab');
PHP で include_path 内のファイルを検索する必要がある場合は、それを使用できます。ディレクトリ名またはパスを指定する必要はありません。
$fp = fopen("order.txt",'ab',true);
4 番目のパラメータもオプションで、ファイル名をプロトコル名 (http:// など) で始めることができます。リモートの場所でこのファイルを開くと、ftp などの他のプロトコルもサポートされます。
fopen() がファイルを正常に開くと、そのファイルへのポインタが返されます。上記では、それを $fp 変数に保存しました。

添付ファイルモード図

ファイルの書き込み
PHP でのファイルの書き込みは比較的簡単です。 fwrite() 関数を直接使用してください。
fwrite() のプロトタイプは次のとおりです

int fwrite(resource handle, string string [,int length]);

3 番目のパラメータはオプションであり、ファイルを指定します。最大長が書き込まれます。
文字列の長さは、次のように組み込みの strlen() 関数を通じて取得できます。

fwrite($fp,$outputinfo,strlen($outputinfo)); >この関数は PHP に、$outputinfo の情報を $fp が指すファイルに保存するように指示します。
lファイルの読み取り
1. 読み取り専用モードでファイルを開きます
引き続き fopen() 関数を使用しますが、ファイルを読み取り専用モードで開くには、「rb」ファイル モードを使用します。以下のように:

$fp = fopen("$root/order.txt",'rb');
2. ファイルがいつ読み取られたかを知る
読み取りには while ループを使用します。ファイルの内容をループ条件の終了条件として feof() 関数を使用します。以下のように:

while(!feof($fp)){
//処理される情報
}
3. 一度に 1 行のレコードを読み取ります
fgets () 関数はテキスト ファイルから 1 行を読み取ることができます。次のように:



コードをコピー

コードは次のとおりです: $fp = fopen("$root/order.txt) ",'rb ');

while(!feof($fp)){

$info = fgets($fp,999);
echo $info.'
';
}
fclose($fp)


このようにして、改行文字 (n) またはファイルの終わり文字 EOF を読み取るか、ファイルから 998B を読み取るまで、データの読み取りを続けます。読み取り可能な最大長は、指定された長さから 1B を引いたものになります。 。
4. ファイル全体を読み取る
PHP には、ファイル全体を読み取る 4 つの方法が用意されています。
a).readfile() 関数
これは、fopen($path) を使用せずに、最初にファイルを閉じたり、エコーを使用したりせずに直接使用できます。以下のようになります:
readfile(“$root/order.txt”);
ファイル情報がブラウザに自動的に出力されます。そのプロトタイプは次のとおりです:
Int readfile(string filename,[int use_include_path[,resource context]]);
2 番目のオプションのパラメーターは、PHP が include_path 内のファイルを検索するかどうかを指定します。これは fopen 関数と同じです。の場合、戻り値はファイルから読み取られた合計バイト数です。
注: fopen または fclose を使用せずに直接使用します。
b).fpassthru() 関数
この関数を使用するには、まず fopen() でファイルを開く必要があります。次に、ファイル ポインタをパラメータとして fpassthru() に渡すと、ファイル ポインタが指すファイルの内容が出力されます。次に、ファイルを閉じます。次のようになります:
$fp = fopen(“$root/order.txt”,'rb');
fpassthru($fp);
fclose($fp);ファイル内で読み取られた合計バイト数からも取得できます。
注: fopen と fclose が必要です。
c).file() 関数
ブラウザにファイルを出力するだけでなく、結果を readfile() 関数に送信します。配列。以下のように:
$fileArray = file(“$root/order.txt”);
ファイル内の各行は、配列の各要素として使用されます。
注: fopen と fclose を使用せずに直接使用してください。
d).file_get_contents() 関数
は readfile() と同じですが、この関数はファイルの内容を文字列の代わりに文字列の形式で返します。ブラウザに直接出力します。つまり、次のようにエコー出力を使用する必要があります:

echo file_get_contents(“$root/order.txt”);
注: fopen と fclose を使用せずに直接使用します。 🎜>5 .1 文字の読み取り
fgetc() 関数はファイルから一度に 1 文字を読み取り、唯一のパラメーターでもあるファイル ポインター関数を持ち、次の文字を返します。次のように:


コードをコピー コードは次のとおりです:

$fp = fopen("$root/order.txt) ",'rb ');

while(!feof($fp)){
$char = fgetc($fp);
if(!feof($fp)){
echo ( $char == "n" ? '
' : $char)
}
}
fclose($fp); () 関数の欠点の 1 つは、この関数はファイルの終わり文字 EOF を返すのに対し、fgets() は返さないことです。文字を読んだ後は、feof() を判断する必要があります。
6. 任意の長さの読み取り
fread() 関数は、ファイルから任意の長さのバイトを読み取ります。関数のプロトタイプは次のとおりです。
この関数を使用すると、長さパラメータで指定されたバイト数を読み取るか、ファイルの終わりを読み取ります。




コードをコピー

コードは次のとおりです:

$fp = fopen("$root/order.txt",' rb') ; echo fread($fp,10); //10 バイトを読み取りますfclose($fp);

ファイルを閉じます単純です。 fclose() 関数を直接呼び出すだけです。true が返された場合は成功を示し、その逆も同様です。次のように:


fclose($fp);
lDelete file
unlink() 関数 (delete という名前の関数はありません):

unlink("$root / order.txt");
l ファイル サイズを決定する
次のように、filesize() 関数を使用してファイルのサイズ (バイト単位) を確認できます:
echo filesize("$root) /order.txt ");


次の記事も参照できます

以下は、基本的なファイルの読み書き操作に関する記事です。ファイルの基本を一度学習しました。この記事を読んだ後、操作はみんなと共有するためにここに投稿されます:
ファイルを読みます:
PHP コード:


コードをコピーします
コード


1. 2. 3. $file_name = "data.dat"; // ファイルの絶対パス読み込む: homedata.dat 5. 6. $file_pointer = fopen($file_name, "r"); // ファイルを開きます。8. "r" はモードです。 9. または、やりたいこと 操作方法、10. この記事の後半で説明します。12. $file_read = fread($file_pointer, filesize($file_name)); // ファイル ポインタを読み取ります。 14. ポインタ ファイルの内容を取得します。

16. fclose($file_pointer); // ファイルを閉じます。

19. print "読み取ったファイルの内容は次のとおりです: $file_read "; // ファイルの内容を表示します
21.


PHP コード:



コードをコピー

コードは次のとおりです:


1. 3. $file_name = "data.dat";
5. 🎜>6. $file_pointer = fopen($file_name, "w");
7. // "w" はモードです、8. 詳細は以下を参照してください
9. file_pointer, "何を書き​​たいか");
11. 最初にファイル 12. を 0 バイトに切り取り、次に
14.
15. 16. // 終了
17.
19.


ファイルの末尾に追加します:
PHP コード:



コードをコピー

コードは次のとおりです:


1. 2. 3. $file_name = "data.dat" 4. // 絶対パス: homedata.dat 6. = fopen ($file_name, "a"); 7. // "w" モード

9. fwrite($file_pointer, "追加したいもの"); // いいえ 11. ファイル 12. を 0 バイトに切り取ります。 13. ファイルの最後にデータを追加します

14.
15. fclose($file_pointer); // End
17 .
18. print "データがファイルに追加されました";
20.
21.簡単な紹介。次に、さらに深い内容について説明します。
複数のユーザーが書き込みを行う場合があり (トラフィックの多い Web サイトで最も一般的です)、その場合、ファイルに無駄なデータが書き込まれます。例:
info.file ファイルの内容は次のとおりです ->
|1|Mukul|15|男性|インド (n)
|2|Linus|31|男性|フィンランド (n)
現在 2 人が同時に登録されているため、ファイルが破損しています-> >情報ファイル ->
|1|ムクル|15|男性|インド
|2|ライナス|31|男性|フィンランド
|3|ロブ|27|男性|アメリカ
Bill|29 |男性|USA
上記の例では、PHP が Rob の情報をファイルに書き込むときに、Bill はちょうど書き込みを開始するときに、Rob のレコードの「n」を書き込む必要があるため、ファイルが破損する可能性があります。
これは絶対に起こってほしくないので、ファイルのロックを見てみましょう:
PHP コード:


コードをコピー

コードは次のとおりです。


1. 3. $file_name = "data.dat";
5. ($file_name , "r");
6.
7. $lock = flock($file_pointer, LOCK_SH); // 4.0.2、9 を使用します。 1.
11.
12. if ($lock) {
14. $file_read($file_pointer, file_name) );
15 . $lock = flock($file_pointer, LOCK_UN); // バージョンが PHP4.0.2 より小さい場合は、LOCK_UN を 3
19 に置き換えます。 . }

21. fclose($file_pointer); 24. ; 26. 🎜> 上記の例では、read.php と read2.php の両方のファイルがファイルにアクセスする必要がある場合、両方ともファイルを読み取ることができますが、プログラムが書き込む必要がある場合は待機する必要があります。読み取られるまで 操作が完了し、ファイルが解放されます。 PHP コード:



コードをコピー

コードは次のとおりです:


1. 2.
3. $file_name = "data.dat";
5. $file_pointer = fopen($file_name, "w"); lock = flock ($file_pointer, LOCK_EX);
8. // バージョンが PHP4.0.2 より前の場合、9. LOCK_EX を 2
10. if ($lock) {
12.
13. fwrite($file_pointer, "何を書き​​たいか");
14. flock($file_pointer, LOCK_UN); // バージョンが PHP4 より低い場合。 0.2、16. を 3 LOCK_UN
17.
19. fclose($file_pointer)
22. に置き換えます。ファイルが正常に保存されました";
23.
24. ?>
25.


「w」モードはファイルの上書きに使用されますが、そうではないと思います該当する。
PHP コード:


コードをコピー

コードは次のとおりです: 1. 2.

3. $file_name = "data.dat";

5. $file_pointer($file_name, "a"); 7. lock = flock ($file_pointer, LOCK_EX);
8. // バージョンが PHP4.0.2 より低い場合、9. LOCK_EX を 2
10. if ($lock) 🎜>12.
13. fseek($file_pointer, 0, SEEK_END);
14. // バージョンが PHP4.0RC1 より小さい場合は、fseek($file_pointer, filsize($file_name)) を使用します。 ;
16.
17. fwrite($file_pointer, "何を書き​​たいか");
18. バージョンが以前の場合PHP4.0.2、20. LOCK_UN を 3
22. }
24.
25.ファイルに正常に書き込まれました";
27 .
28. ?>
29.


うーん...、データの追加は他の操作とは少し異なります。つまり、FSEEK です。ファイル ポインターがファイルの最後にあることを常に確認することをお勧めします。
Windows システムの場合、上記のファイルの前に '' を付ける必要があります。
FLOCK その他:
Flock() はファイルが開かれた後にのみロックします。 上記の列では、ファイルは開かれた後にロックされますが、ファイルの内容はその時点の内容のみであり、他のプログラム操作の結果は反映されません。そのため、fseek はファイルの追加だけに使用する必要はありません。操作だけでなく、読み取り操作も可能です。
(ここでの翻訳は正確ではないかもしれませんが、アイデアは理解できると思います)。
モードについて:
'r' - 読み取り専用モードで開き、ファイル ポインタはファイルの先頭に配置されます。
'r ' - 読み取り/書き込みモードで開き、ファイル ポインタはファイルの先頭に配置
'w' - 書き込み専用にオープンします。ファイル ポインタはファイルの先頭に配置され、ファイルは 0 バイトにカットされます。ファイルが存在しない場合は、ファイル
'w ' - 読み取りと書き込みのために開きます。ファイル ポインターはファイルの先頭に配置され、ファイル サイズは 0 バイトにカットされます。ファイルが存在しない場合は、ファイル
の作成を試みます。 'a' - 書き込み専用に開きます。ファイル ポインタはファイルの末尾に配置されます。ファイルが存在しない場合は、ファイルの作成を試みます。
'a ' - 読み取りと書き込みのために開きます。ファイル ポインタは次のとおりです。ファイルが存在しない場合は、ファイルを作成してみてください
ちなみに、ファイルディレクトリを作成するコード

コードをコピーします コードは次のとおりです:


//「../../../xxx/xxx.txt」のようなディレクトリを作成します
function createdirs($ path, $mode = 0777) //mode 077
{
$dirs =explode('/',$path);
$pos = strrpos($path, "."); if ($pos === false) { // 注: 3 つの等号
// 見つからない場合は、パスがファイルではないディレクトリで終わることを意味します
$subamount=0>}
else {
$submount=1;
}
for ($c=0;$c < count($dirs) - $submount; $c ) {
$thispath=""; >for ($cc=0; $cc $thispath.=$dirs[$cc].'/'
}
if (!file_exists( $thispath)) {
//print " $thispath";
mkdir($thispath,$mode); // mkdir 関数はディレクトリを作成します
}
}
//createdirs("xxx/xxxx/xxxx" ,); などの呼び出し
//元の関数は $GLOBALS["dirseparator"] を使用していましたが、それを '/' に変更しました
function recur_mkdirs($path , $mode = 0777) //モード 0777
{
//$GLOBALS["dirseparator"]
$dirs =explode($GLOBALS["dirseparator"],$path); pos = strrpos($path, ".");
if ($pos === false) { // 注: 3 つの等号
// パスがファイルではないディレクトリで終わっていることを意味します
$subamount=0;
}
else {
$subamount=1;
}


これらは非常に基本的なファイル操作コードの一部であると思います。初心者にとって役立つことを願って、ここに投稿します。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。