PHP の fwrite と file_put_contents の違い

WBOY
リリース: 2016-07-06 13:34:26
オリジナル
2511 人が閲覧しました

PHP では、fwrite と file_put_contents は細部が異なりますが、パフォーマンスの点では file_put_contents の方が強力です。以下の例で比較してみましょう。

<script>ec(2);</script>

類似点: file_put_contents() 関数は文字列をファイルに書き込みます。これは fopen()、fwrite()、fclose() を順番に呼び出すのと同じ機能を持ちます。

違い: file_put_contents() 関数で FILE_APPEND を使用すると、ファイル内の既存のコンテンツの削除を回避できます。つまり、同じファイルを複数回書き込むときに追加関数を実現できます。

例:

echo file_put_contents("test.txt","Hello World. テスト中!",FILE_APPEND);

file_put_contents は文字列を append の形式で test.txt に書き込みます。

fwrtie は以前のレコードをクリアし、現在書き込まれているコンテンツのみを保持します

$file = fopen("test.txt","w");
echo fwrite($file,"Hello World. テスト中!");
fclose($file);

file_put_contents には fwrite の代わりに多くの利点があります

以下は file_put_contents のコード例です:

$filename = 'file.txt';
$word = "Hello!rnwebkaka"; //二重引用符は折り返されますが、一重引用符は折り返されません
file_put_contents($filename, $word);
?>

同じ関数に fwrite を使用するコード例:

$filename = 'file.txt';
$word = "Hello!rnwebkaka"; //二重引用符は折り返されますが、一重引用符は折り返されません
$fh = fopen($filename, "w"); //wを先頭から書き、aを追加して書きます
echo fwrite($fh, $word);
fclose($fh);
?>

上記の 2 つの例から、file_put_contents は実際には fopen、fwrite、および fclose の簡略化された記述メソッドであることがわかります。これは、一方ではコードの量が削減され、さらにはコードの最適化に役立ちます。一方、fclose がミスするルーズなコードがある場合は、デバッグやメンテナンスが非常に便利になります。

上記の例では、file_put_contentsを最初から書いていますが、追加で書きたい場合はどうすればよいでしょうか?

file_put_contentsの構文には、追加書き込み文であるFILE_APPENDというパラメータがあります。コード例は次のとおりです:

echo file_put_contents('file.txt', "これは別のものです。", FILE_APPEND);
?>

FILE_APPEND は追記書き込み用のステートメントです。追加して書き込む場合、他の人が同時に操作するのを避けるために、ファイルをロックする必要があることがよくあります。この場合、次のように記述される LOCK_EX ステートメントを追加する必要があります。

echo file_put_contents('file.txt', "これはまた別のものです。", FILE_APPEND|LOCK_EX);
?>

上記のコードでは、echo がディスプレイに出力するのは、ファイルに書き込まれた文字列の長さであることに注意してください。

よくある質問:

警告: fopen(file.txt) [function.fopen]: ストリームを開けませんでした: 許可が拒否されました

ファイルに書き込み権限がないために、上記の問題が発生することがあります。このエラーを回避するには、ファイルを書き込むときにファイルが書き込み可能かどうかを判断する必要があります。これには is_writable() 関数を使用する必要があります。コード例は次のとおりです:

$filename = 'file.txt';
if (is_writable($filename)) {
echo file_put_contents($filename, "これは別のものです。", FILE_APPEND);
} その他 {
echo "ファイル $filename は書き込み可能ではありません";
}
?>

fwrite は単にデータをハンドラーに書き込むだけです

file_put_contents は contentxt を処理する必要がある可能性があり、データ型が混合されているため、より多くの処理が必要です
file_put_contents の関数の説明を見ると、 fopen()、fwrite()、fclose() を順番に呼び出したのと同じ機能です。
ただし、微妙な違いがあるはずです。特に大量のデータを繰り返し書き込む場合、file_put_contents は間違いなく fopen と fclose を繰り返します。また、fwrite は fopen と fwrite を 1 回しか実行できません

テストする簡単なプログラム、250M ファイルを作成します


結論: 複数の実行結果は、fopen、fwrite、および fclose メソッドが直接 file_put_contents よりも高速であることを示しています。

それでは、ソースコードをご覧ください

ubuntu12.04を使用しています

直接 sudo apt-get ソース php5
解凍:silver@silver-desktop:~/php/php5-5.3.3

関数 fwrite function を見つけます: silver@silver-desktop:~/php/php5-5.3.3$ grep -rn “PHP_FUNCTION(fwrite)”
./ext/standard/file.c:1233:PHPAPI PHP_FUNCTION(fwrite)
./ext/standard/file.h:43:PHPAPI PHP_FUNCTION(fwrite);

fwrite

対応するソースコードを見つけます。関数は非常に簡単です:

file_put_contents
この関数にはさらに多くの処理操作があります



久しぶりに fwrite,file_put_contents ?

1、関数数原型すでに説明済み它们処理のデータ型型不一样
2、简单の文書処理、追求速度用fwrite
3、個別用の file_put_contents を書き込みます – (種類のデータはすべて処理できます、マジックアー。ただし、種類の判断機構を理解してください。保存されるデータは望ましくない可能性があります)

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート