fwrite

(PHP 4, PHP 5, PHP 7, PHP 8)

fwriteバイナリセーフなファイル書き込み処理

説明

fwrite(resource $stream, string $data, ?int $length = null): int|false

fwrite()dataの内容を streamが指しているファイル・ストリームに書き込みます。

パラメータ

stream

fopen() を使用して作成したファイルシステムポインタリソース。

data

書き込む文字列。

length

lengthパラメータが数値の場合、 lengthバイト数分の書き込みが完了したか、 dataが終わりに達したかのいずれか早い方の 事象により書き込みは中止されます。

戻り値

fwrite() は、 書き込んだバイト数、またはエラー時に false を返します。

変更履歴

バージョン 説明
8.0.0 length は、nullable になりました。

例1 簡単な fwrite() の例

<?php
$filename 
'test.txt';
$somecontent "Add this to the file\n";

// ファイルが存在しかつ書き込み可能かどうか確認します
if (is_writable($filename)) {

    
// この例では$filenameを追加モードでオープンします。
    // ファイルポインタはファイルの終端になりますので
    // そこがfwrite()で$somecontentが追加される位置になります。
    
if (!$fp fopen($filename'a')) {
         echo 
"Cannot open file ($filename)";
         exit;
    }

    
// オープンしたファイルに$somecontentを書き込みます
    
if (fwrite($fp$somecontent) === FALSE) {
        echo 
"Cannot write to file ($filename)";
        exit;
    }

    echo 
"Success, wrote ($somecontent) to file ($filename)";

    
fclose($fp);

} else {
    echo 
"The file $filename is not writable";
}
?>

注意

注意:

ネットワークストリームへの書き込みは、 すべての文字列を書き込み終える前に終了する可能性があります。 fwrite() の戻り値を確かめるようにしましょう。

<?php
function fwrite_stream($fp$string) {
    for (
$written 0$written strlen($string); $written += $fwrite) {
        
$fwrite fwrite($fpsubstr($string$written));
        if (
$fwrite === false) {
            return 
$written;
        }
    }
    return 
$written;
}
?>

注意:

(Windowsのように)バイナリとテキストファイルの形式が異なるシステムにおいては、ファイルをオープンする際に fopen()の mode パラメータに 'b' を指定する必要があります。

注意:

fopen() を使用して追記モードでオープンした stream の場合、 fwrite() はアトミックになります (ただし、一部のプラットフォームにおいて data がファイルシステムのブロックサイズを超えない場合、 そしてローカルファイルシステム上のファイルである場合に限ります)。 アトミックであるとは、つまり fwrite() をコールする前にリソースを flock() する必要がないということです。データの書き込みが中断されることはありません。

注意:

同じファイルポインタに 2 回書き込みを行うと、 データはファイルの末尾に追記されます。

<?php
$fp 
fopen('data.txt''w');
fwrite($fp'1');
fwrite($fp'23');
fclose($fp);

// 'data.txt' の中身は 123 となります。23 ではありません!
?>

参考

  • fread() - バイナリセーフなファイルの読み込み
  • fopen() - ファイルまたは URL をオープンする
  • fsockopen() - インターネット接続もしくは Unix ドメインソケット接続をオープンする
  • popen() - プロセスへのファイルポインタをオープンする
  • file_get_contents() - ファイルの内容を全て文字列に読み込む
  • pack() - データをバイナリ文字列にパックする

関連キーワード:  書き込み, バイナリ, fwrite, セーフ, 処理, ファイル, length, オープン, 注意, data