fwrite

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

説明

intfalse fwrite(resource $stream, string $data, intnull $length = null)

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

パラメータ

stream

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

data

書き込む文字列。

length

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

戻り値

fwrite は、 書き込んだバイト数を返します。 失敗した場合に false を返します

エラー / 例外

fwrite は、 失敗した場合に E_WARNING を発生させます。

変更履歴

バージョン 説明
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
  • fsockopen
  • popen
  • file_get_contents
  • pack