【PHP8.x】fputs()関数の使い方
fputs関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
fputs関数は、指定されたファイルポインタに文字列データを書き込むことを実行する関数です。この関数は、すでにfopen()関数などによって書き込み用に開かれているファイルリソースに対し、任意の文字列データを書き込む際に使用されます。例えば、プログラムの実行ログをファイルに出力したり、処理結果をファイルとして保存したりする場面などで利用されます。
具体的には、第一引数に書き込み先のファイルポインタ($handle)を、第二引数にファイルに書き込みたい文字列データ($string)を指定します。オプションとして第三引数に書き込む最大バイト数($length)を指定することも可能です。$lengthを指定した場合、$stringの先頭からそのバイト数までがファイルに書き込まれるか、$stringの終端に達するまでが書き込まれます。
処理が成功した場合、fputs関数は実際にファイルに書き込まれたバイト数を整数値で返します。何らかの理由で書き込みに失敗した場合は、falseを返します。この関数はバイナリセーフであり、改行コードや特殊文字など、どのような内容の文字列でも安全にファイルに書き込むことができます。
PHPにおいてfputs関数はfwrite関数のエイリアス(別名)として提供されており、機能は完全に同一です。そのため、通常はfwrite関数が使われることが多いですが、fputs関数も同様に利用できます。ファイルだけでなく、ネットワークソケットやプロセス間のパイプなど、PHPのストリーム機能が利用できる様々なリソースへの書き込みにも適用可能です。
構文(syntax)
1<?php 2$fileHandle = fopen('output.txt', 'w'); 3if ($fileHandle) { 4 fputs($fileHandle, "This is a line written by fputs.\n"); 5 fclose($fileHandle); 6}
引数(parameters)
resource $stream, string $data, ?int $length = null
- resource $stream: 書き込み対象のファイルポインタまたはストリームリソース
- string $data: 書き込むデータ
- ?int $length = null: 書き込むデータの最大バイト数(省略時は$dataの全バイト数)
戻り値(return)
int|false
書き込みに成功したバイト数を整数で返します。エラーが発生した場合は false を返します。
サンプルコード
PHP fputsでファイルに書き込む
1<?php 2 3/** 4 * fputs関数を使用してファイルに文字列を書き込む例を示します。 5 * fputsはfwrite関数のエイリアス(別名)です。 6 * 7 * @return void 8 */ 9function write_string_to_file_using_fputs(): void 10{ 11 // 書き込むファイルの名前を定義します。 12 $filename = 'example_output.txt'; 13 // ファイルに書き込む文字列を定義します。 14 $data_to_write = "Hello, system engineer beginner!\nThis is a sample text written using PHP's fputs function.\n"; 15 16 // 'w' モードでファイルを開きます。 17 // 'w' モードは、ファイルが存在しない場合は新規作成し、 18 // 存在する場合は既存の内容をすべて削除してから開きます。 19 // 失敗した場合は false が返されます。 20 $file_handle = fopen($filename, 'w'); 21 22 // ファイルのオープンに失敗した場合のエラーハンドリング 23 if ($file_handle === false) { 24 echo "エラー: ファイル '{$filename}' を開けませんでした。書き込み権限を確認してください。\n"; 25 return; 26 } 27 28 echo "ファイル '{$filename}' を書き込みモードで開きました。\n"; 29 30 // fputs関数を使用してファイルに文字列を書き込みます。 31 // 成功した場合は書き込まれたバイト数、失敗した場合は false が返されます。 32 $bytes_written = fputs($file_handle, $data_to_write); 33 34 // 書き込み結果の確認 35 if ($bytes_written === false) { 36 echo "エラー: ファイル '{$filename}' への書き込みに失敗しました。\n"; 37 } else { 38 echo "ファイルに {$bytes_written} バイト書き込みました。\n"; 39 echo "書き込んだ内容のプレビュー:\n---\n" . substr($data_to_write, 0, 50) . "...\n---\n"; 40 } 41 42 // ファイルハンドルを閉じます。 43 // ファイルの変更を保存し、リソースを解放するために重要です。 44 fclose($file_handle); 45 echo "ファイル '{$filename}' を閉じました。\n"; 46 47 // オプション: 書き込まれたファイルの内容を読み込んで表示します。 48 if (file_exists($filename)) { 49 echo "\n--- ファイル '{$filename}' の最終的な内容 ---\n"; 50 echo file_get_contents($filename); 51 echo "--------------------------------------\n"; 52 53 // オプション: サンプルコードの実行後に作成されたファイルを削除します。 54 // これにより、実行環境をきれいに保つことができます。 55 if (unlink($filename)) { 56 echo "ファイル '{$filename}' を削除しました。\n"; 57 } else { 58 echo "エラー: ファイル '{$filename}' の削除に失敗しました。\n"; 59 } 60 } 61} 62 63// 関数を実行します。 64write_string_to_file_using_fputs();
このサンプルコードは、PHPのfputs関数を使ってファイルに文字列を書き込む基本的な方法を示しています。fputs関数は、実際にはfwrite関数の別名(エイリアス)であり、同様にファイルへの書き込みを行います。
まず、fopen関数で'w'モード(書き込みモード)でファイルを開きます。このモードは、ファイルが存在しない場合は新しく作成し、既に存在する場合はその内容をすべて削除してから書き込みを開始します。fopenが成功するとファイルリソース(ファイルハンドル)が返され、失敗するとfalseが返されるため、その後の処理に進む前に確認しています。
ファイルが開かれたら、fputs関数を使用して指定した文字列をファイルに書き込みます。fputsの最初の引数にはfopenで得られたファイルリソースを、二番目の引数には書き込みたい文字列を渡します。オプションとして、三番目の引数で書き込む文字数を指定することもできますが、この例では指定していません。
fputs関数は、書き込みに成功すると実際にファイルに書き込まれたバイト数を整数値で返し、失敗した場合はfalseを返します。サンプルコードでは、この戻り値を確認して書き込みの成否を判断しています。
最後に、fclose関数でファイルハンドルを閉じます。これにより、書き込んだ内容がファイルに確実に保存され、使用していたシステムリソースが解放されます。一連の処理を通じて、ファイル操作の基本である「開く」「書き込む」「閉じる」の流れと、エラー発生時の対応方法を学ぶことができます。
このサンプルコードでは、ファイルを書き込みモード「w」で開くため、同名の既存ファイルがある場合はその内容がすべて消去され上書きされる点に注意が必要です。ファイルを開くfopen関数や、書き込みを行うfputs関数は、処理が失敗した場合にfalseを返します。そのため、必ず=== falseを用いて厳密に失敗をチェックし、エラーハンドリングを適切に実装してください。ファイルへの書き込み処理が終わったら、必ずfcloseでファイルハンドルを閉じ、システムのリソースを解放することが重要です。また、PHPが実行されるユーザーに、指定されたファイルを作成・書き込みする権限がない場合、エラーが発生します。fputsはfwrite関数のエイリアス(別名)であり、機能は同じです。
fputsとfwriteの違い:ファイル書き込みを検証する
1<?php 2 3/** 4 * fputs と fwrite の違いを示すサンプルコード。 5 * PHPでは、fputs と fwrite は機能的に同じ関数(エイリアス)です。 6 * どちらを使ってもファイルへの書き込みは同様に動作します。 7 */ 8 9// 一時ファイルのパスを定義 10$tempFile = 'temp_output_fputs_fwrite.txt'; 11 12echo "一時ファイル {$tempFile} を作成し、書き込みます。\n"; 13 14// ファイルを開く(書き込みモード 'w')。 15// ファイルが存在しない場合は作成され、存在する場合は内容がクリアされます。 16$fileHandle = fopen($tempFile, 'w'); 17 18// ファイルが開けなかった場合のエラーハンドリング 19if ($fileHandle === false) { 20 echo "エラー: ファイル '{$tempFile}' を開けませんでした。\n"; 21 exit(1); // スクリプトを終了 22} 23 24// fputs を使用してファイルにデータを書き込む 25// fputs は fwrite のエイリアスです。 26$data1 = "これは fputs を使って書き込まれた行です。\n"; 27$bytesWritten1 = fputs($fileHandle, $data1); 28 29if ($bytesWritten1 === false) { 30 echo "エラー: fputs での書き込みに失敗しました。\n"; 31 fclose($fileHandle); // ファイルを閉じる 32 unlink($tempFile); // 作成されたファイルを削除 33 exit(1); 34} 35echo "fputs で {$bytesWritten1} バイト書き込みました。\n"; 36 37// fwrite を使用してファイルにデータを書き込む 38// fwrite も fputs と同じように機能します。 39$data2 = "これは fwrite を使って書き込まれた行です。\n"; 40$bytesWritten2 = fwrite($fileHandle, $data2); 41 42if ($bytesWritten2 === false) { 43 echo "エラー: fwrite での書き込みに失敗しました。\n"; 44 fclose($fileHandle); 45 unlink($tempFile); 46 exit(1); 47} 48echo "fwrite で {$bytesWritten2} バイト書き込みました。\n"; 49 50// ファイルを閉じる 51fclose($fileHandle); 52echo "ファイルを閉じました。\n\n"; 53 54echo "書き込まれた内容を確認するために、ファイルを再度読み込みます。\n"; 55 56// ファイルを読み込みモード 'r' で開く 57$fileHandle = fopen($tempFile, 'r'); 58 59if ($fileHandle === false) { 60 echo "エラー: ファイル '{$tempFile}' を読み込みモードで開けませんでした。\n"; 61 // この時点でファイルは存在するため、念のため削除を試みる 62 unlink($tempFile); 63 exit(1); 64} 65 66echo "--- {$tempFile} の内容 ---\n"; 67// ファイルの終端に達するまで1行ずつ読み込む 68while (!feof($fileHandle)) { 69 echo fgets($fileHandle); 70} 71echo "--------------------------\n"; 72 73// ファイルを閉じる 74fclose($fileHandle); 75echo "ファイル読み込みを終了しました。\n"; 76 77// 作成した一時ファイルを削除する 78unlink($tempFile); 79echo "一時ファイル '{$tempFile}' を削除しました。\n"; 80 81?>
PHPのfputs関数は、開いているファイルに文字列データを書き込むために使用します。PHP 8では、fputsはfwrite関数のエイリアス(別名)であり、機能的な違いはありませんので、どちらを使ってもファイルへの書き込みは同様に動作します。
この関数の引数は、resource $stream、string $data、?int $length = nullの三つです。最初の$streamには、fopen関数などで取得したファイルのリソース(ファイルハンドル)を指定します。次に$dataには、ファイルに書き込む文字列を渡します。最後の$lengthはオプションで、整数値を指定すると$dataの文字列の先頭からそのバイト数だけが書き込まれます。$lengthを省略した場合は、$dataの文字列全体が書き込まれます。
戻り値は、書き込みに成功した場合は実際にファイルへ書き込まれたバイト数(整数値)を返します。何らかの理由で書き込みが失敗した場合はfalseを返しますので、戻り値を確認して適切にエラーハンドリングを行うことが重要です。
提供されたサンプルコードでは、一時ファイルを作成し、fputsとfwriteの両方を使ってそれぞれ文字列をファイルに書き込んでいます。その後、書き込まれた内容を読み込みで確認することで、両関数がファイル書き込みにおいて同様に機能することを示しています。最後に、作成した一時ファイルを削除するまでの一連の流れが示されています。
PHPでは、fputsとfwriteは機能的に同じエイリアス関数です。どちらを使ってもファイルへの書き込みは同様に動作しますが、コードの可読性を高めるため、プロジェクト内で使用する関数を統一すると良いでしょう。ファイルを開く際はfopenがfalseを返す可能性があるため、常に結果を確認し、エラーハンドリングを行うことが重要です。同様に、fputsやfwriteの書き込みが失敗してfalseを返す可能性もあるため、これらの戻り値も適切にチェックしてください。ファイルへの書き込み後は、必ずfcloseでリソースを解放し、ファイルロックやリソース枯渇を防ぐ必要があります。fopenで'w'モードを使用すると、既存のファイル内容がすべて上書きされる点に注意が必要です。また、fputsやfwriteの第三引数$lengthを指定することで、書き込むバイト数を制限することも可能です。
PHP fputsでファイルに改行を書き込む
1<?php 2 3/** 4 * PHPのfputs関数を使用して、ファイルに改行付きの文字列を書き込むサンプルコードです。 5 * 6 * fputs (または fwrite) 関数は、ファイルポインタに文字列を書き込みます。 7 * 改行を書き込むには、文字列の末尾に "\n" (Unix/Linux/macOS) または PHP_EOL 定数を追加します。 8 * Windows環境では、テキストエディタによっては "\r\n" (CRLF) が適切な場合がありますが、 9 * PHPは多くの場合 "\n" を適切なシステム改行に変換してくれます。 10 * PHP_EOL定数を使用すると、OSに応じた改行コードが自動的に適用されます。 11 * 12 * @return void 13 */ 14function writeLinesToFileUsingFputs(): void 15{ 16 $filename = 'example_output.txt'; // 書き込み先のファイル名 17 $line1 = "これはファイルに書き込む最初の行です。" . PHP_EOL; // PHP_EOLでOSに応じた改行を追加 18 $line2 = "fputs関数を使って2行目を書き込みます。" . PHP_EOL; 19 $line3 = "これが最後の行になります。" . PHP_EOL; 20 21 // ファイルを書き込みモード ('w') で開く 22 // 'w' モードはファイルが存在すれば中身を空にし、存在しなければ新規作成します。 23 // ファイルが開けない場合 (例: 権限不足) は false を返します。 24 $fileHandle = fopen($filename, 'w'); 25 26 if ($fileHandle === false) { 27 echo "エラー: ファイル '{$filename}' を開けませんでした。書き込み権限を確認してください。" . PHP_EOL; 28 return; 29 } 30 31 echo "ファイル '{$filename}' にデータを書き込んでいます..." . PHP_EOL; 32 33 // 最初の行をファイルに書き込む 34 // fputsは書き込んだバイト数を返します。失敗した場合は false を返します。 35 $bytesWritten1 = fputs($fileHandle, $line1); 36 if ($bytesWritten1 === false) { 37 echo "エラー: 最初の行の書き込みに失敗しました。" . PHP_EOL; 38 } else { 39 echo "1行目を {$bytesWritten1} バイト書き込みました。" . PHP_EOL; 40 } 41 42 // 2番目の行をファイルに書き込む 43 $bytesWritten2 = fputs($fileHandle, $line2); 44 if ($bytesWritten2 === false) { 45 echo "エラー: 2番目の行の書き込みに失敗しました。" . PHP_EOL; 46 } else { 47 echo "2行目を {$bytesWritten2} バイト書き込みました。" . PHP_EOL; 48 } 49 50 // 3番目の行をファイルに書き込む 51 $bytesWritten3 = fputs($fileHandle, $line3); 52 if ($bytesWritten3 === false) { 53 echo "エラー: 3番目の行の書き込みに失敗しました。" . PHP_EOL; 54 } else { 55 echo "3行目を {$bytesWritten3} バイト書き込みました。" . PHP_EOL; 56 } 57 58 // ファイルハンドルを閉じ、リソースを解放する 59 fclose($fileHandle); 60 echo "ファイル '{$filename}' への書き込みが完了し、ファイルを閉じました。" . PHP_EOL; 61 62 // オプション: 書き込まれた内容を確認するためにファイルの内容を表示 63 echo PHP_EOL . "--- ファイル '{$filename}' の内容 ---" . PHP_EOL; 64 echo file_get_contents($filename); 65 echo "--------------------------" . PHP_EOL; 66 67 // オプション: サンプル実行後にファイルを削除したい場合は、以下の行のコメントを解除してください。 68 // unlink($filename); 69 // echo "ファイル '{$filename}' を削除しました。" . PHP_EOL; 70} 71 72// 関数を実行する 73writeLinesToFileUsingFputs();
このサンプルコードは、PHPのfputs関数を用いてファイルに文字列を書き込む基本的な方法と、改行を適切に挿入する方法を示しています。fputs関数は、第一引数に指定されたファイルリソース(fopen関数などで開かれたファイル)に対し、第二引数の文字列データを書き込みます。書き込みが成功すると、実際に書き込んだバイト数を整数で返し、失敗した場合にはfalseを返します。
コードではまず、fopen($filename, 'w')でexample_output.txtという名前のファイルを書き込みモードで開いています。'w'モードは、ファイルが存在すればその内容を空にし、存在しなければ新たにファイルを作成します。ファイルを開く際にエラーが発生した場合(例:書き込み権限がない場合)は、エラーメッセージを表示して処理を中断します。
ファイルに書き込む文字列には、プラットフォーム(OS)に応じた適切な改行コードを自動的に付与するため、PHP_EOL定数を連結しています。これにより、Windows、Linux、macOSなどの異なる環境でも正しく改行が認識されます。コード内ではfputs関数を複数回呼び出し、それぞれの文字列をファイルに書き込んでおり、各書き込み操作の成功・失敗をチェックしてその結果を表示しています。
全ての書き込みが完了した後には、必ずfclose($fileHandle)を呼び出して開いたファイルリソースを閉じ、システムリソースを適切に解放することが重要です。このコードは、ファイルへの安全なデータ書き込み処理とエラーハンドリングの基礎を学ぶのに役立ちます。
fputs関数でファイルに書き込む際は、まずfopen関数でファイルを適切に開き、書き込み作業後は必ずfclose関数で閉じてリソースを解放してください。fopenがfalseを返す場合は、ファイルが存在しないか、書き込み権限がないため、必ずエラー処理を行う必要があります。fputs関数も書き込みに失敗するとfalseを返しますので、戻り値を確認し、適切にエラーハンドリングすることが安全なコードのために重要です。改行コードは、OSに依存せず自動的に適切なものを適用するPHP_EOL定数を使用することをお勧めします。ファイルを開く際のモード('w'や'a'など)により、既存ファイルの扱いやファイルポインタの位置が変わるため、目的に合ったモードを選んでください。
fputsでファイルに改行を含めて書き込む
1<?php 2 3/** 4 * fputs関数を使用してファイルに文字列を書き込み、改行を挿入するサンプルコードです。 5 * 6 * このスクリプトを実行すると、'example.txt' という名前のファイルが作成され、 7 * 指定された文字列が改行とともに書き込まれます。 8 */ 9 10// 書き込み対象のファイルパスを定義 11$filePath = 'example.txt'; 12 13// ファイルを書き込みモード ('w') で開きます。 14// ファイルが存在しない場合は作成され、存在する場合は内容がクリアされます。 15// 'w' の代わりに 'a' (追記モード) を使うと、既存の内容を保持しつつ末尾に追加できます。 16$fileHandle = fopen($filePath, 'w'); 17 18// ファイルが開けなかった場合の処理 19if ($fileHandle === false) { 20 echo "エラー: ファイル '{$filePath}' を開くことができませんでした。\n"; 21 exit(1); // スクリプトを終了 22} 23 24// ファイルに書き込むデータ。改行文字 '\n' を含めます。 25$data = "fputsによる1行目のデータです。\n"; 26$data .= "fputsによる2行目のデータです。これは改行されます。\n"; 27$data .= "これは最後の行です。\n"; 28 29// fputs (fwrite のエイリアス) を使用してファイルにデータを書き込みます。 30// 戻り値は書き込まれたバイト数、失敗した場合は false です。 31$bytesWritten = fputs($fileHandle, $data); 32 33// 書き込みが成功したかを確認 34if ($bytesWritten === false) { 35 echo "エラー: ファイル '{$filePath}' への書き込みに失敗しました。\n"; 36} else { 37 echo "ファイル '{$filePath}' に {$bytesWritten} バイトを書き込みました。\n"; 38} 39 40// ファイルハンドルを閉じます。 41// これにより、書き込みが完了し、リソースが解放されます。 42fclose($fileHandle); 43 44echo "ファイル '{$filePath}' が作成(または更新)されました。内容を確認してください。\n"; 45?>
PHPのfputs関数は、ファイルに文字列を書き込むために使用される関数です。このサンプルコードは、fputs関数を使ってファイルに文字列を書き込み、改行を挿入する基本的な方法をシステムエンジニアを目指す初心者の方にも分かりやすく説明しています。
まず、fopen関数で書き込み対象のファイル(例: 'example.txt')を書き込みモード('w')で開きます。このとき返される「ファイルリソース」が、fputs関数の最初の引数$streamに渡されます。ファイルが開けなかった場合は、エラー処理を行うことが重要です。
次に、ファイルに書き込みたい文字列を準備します。この文字列はfputs関数の第二引数$dataとして渡されます。文字列中に改行文字である\nを含めることで、ファイル内でも改行が反映されます。また、オプションの第三引数$lengthを指定すると、$dataの先頭から指定されたバイト数のみが書き込まれます。
fputs関数は、書き込みが成功した場合は実際に書き込まれたバイト数を整数値で返します。書き込みに失敗した場合はfalseを返しますので、この戻り値を確認することで、処理の成否を判断し、適切なエラーハンドリングを行うことができます。
書き込みが完了したら、必ずfclose関数を使って開いたファイルリソースを閉じます。これにより、書き込みが確定し、システムのリソースが適切に解放されます。この手順を踏むことで、安全かつ確実にファイルへデータを書き込むことができます。
fputs関数はfwrite関数の別名であり、ファイルへの文字列書き込みに使用します。ファイルを開く際にはfopenのモードに注意し、'w'モードは既存ファイルを上書きするため、データ消失を避けるには追記用の'a'モードを選ぶことも検討してください。書き込み後は必ずfcloseでファイルハンドルを閉じ、リソースを解放し書き込みを確実に完了させることが重要です。また、fopenやfputsの戻り値がfalseでないか常に確認し、ファイル操作が失敗した場合のエラー処理を行うようにしてください。文字列に改行を挿入するには、明示的に\nを含める必要があります。