ファイルのデータを読み書きする

この研修では、htdocs/LetsEngineer/curriculum/2-16フォルダに課題を作成してください。
PHPは取得したデータを別ファイルに書き込んだり、別ファイルからデータを取得することもできます。

テキストファイルの作成


それでは準備として、index.phpとtest.txt2-16フォルダの中につくりましょう。
中身は何もなくて良いです。

ファイルへの読み込み、書き込みは処理が長くなりがちなので、少しずつ実装していきます。

ファイルが書き込み可能なのか確認する


<?php
// index.php
$testFile = "test.txt";
$contents = "こんにちは!";

if (is_writable($testFile)) {

    // 書き込み可能なときの処理
    // とりあえず、確認のため、echoで表示だけさせる
    echo "writable!!";

} else {
    // 書き込み不可のときの処理
    echo "not writable!";
    exit;
}

まず、書き込み対象のファイルを変数に入れておきましょう。
ファイル名は今後何度か使用するので、初めに変数に入れておけば、あとで変更するときも修正箇所が少なく済みます。
あとは書き込む文字も変数にしておきましょう。

$testFile = "test.txt";
$contents = "こんにちは!";

まずは、ファイルが書き込み可能なのかどうか調べます。
パーミッション(書き込み権限)次第では、書き込めないこともありえます。

書き込みできるのかどうかはis_writableメソッドで調べます。
is_writable($testFile)で、$testFileが書き込み可能なのかどうか、True / Falseで返してくれます。
そのため、書き込み可能な場合と、不可の場合で条件を分けておきます。

<?php
// index.php
$testFile = "test.txt";
$contents = "こんにちは!";

if (is_writable($testFile)) {

    // 書き込み可能なときの処理
    // とりあえず、確認のため、echoで表示だけさせる
    echo "writable!!";

} else {
    // 書き込み不可のときの処理
    echo "not writable!";
    exit;
}

書き込み不可だった場合は、exitで処理を終了します。
http://localhost/LetsEngineer/curriculum/2-16/index.php
にアクセスして確認してみましょう。

書き込みをする


<?php
$testFile = "test.txt";
$contents = "こんにちは!";

if (is_writable($testFile)) {
    // 書き込み可能なときの処理
    // 対象のファイルを開く
    $fp = fopen($testFile, "w");
    // 対象のファイルに書き込む
    fwrite($fp, $contents);
    // ファイルを閉じる
    fclose($fp);
    // 書き込みした旨の表示
    echo "finish writing!!";
} else {
    // 書き込み不可のときの処理
    echo "not writable!";
    exit;
}

書き込みが可能だった場合は、手順に従い書き込みします。
まずは、fopenです。これは対象のファイルを開きます。
第二引数にて、wを記載していますが、これは後ほど説明します。
ファイルを開いた状態を$fpという変数に格納します。

fwrite関数で、書き込みます。
第一引数で$fp(開いたファイル)を、第二引数に書き込む文字列を渡します。

最後にファイルを閉じます。
fclose関数ですね。
これは分かるかと思います。
開きっぱなしだと無駄なメモリを消費してしまうので、忘れずに閉じましょう。

それでは http://localhost/LetsEngineer/curriculum/2-16/index.php
にアクセスしましょう。
そうすると、先ほど作成した空のtest.txtに「こんにちは」と記載されていると思います。

書き込みモード


さて、何回かアクセスすると、あることに気づくはずです。
何回もアクセスしているのに、「こんにちは」が1つしかできない。
これは書き込みモードが関与しています。

先ほど説明しなかったfopen関数にて、wを追記したと思います。

wを指定すると 完全上書き となります。
つまり、元々のデータを消して新しく作成します。

このwaに変えてください。
aは追記モードなので、「こんにちは」の末尾に「こんにちは」がつくと思います。

書き込みモード、および読み込みモードについてはいくつか種類があると思いますが、一旦はwar(読み込み)くらいを覚えておけば良いかな、と思います。
PHP公式ドキュメント-fopen-

ファイルからデータを読み込む


ファイルの準備


書き込みをやったので、読み込みもほぼ同じです。
まずは適当な文章を書いたtest2.txtを用意します。
添付ファイルを2-16フォルダ内に保存してください。
(適当な文章を持ってきただけです。)
test2

zファイルの読み込み


<?php
$test_file = "test2.txt";

if (is_readable($test_file)) {
    // 読み込み可能なときの処理
    // 対象のファイルを開く
    $fp = fopen($test_file, "r");
    // 開いたファイルから1行ずつ読み込む
    while ($line = fgets($fp)) {
        // 改行コード込みで1行ずつ出力
        echo $line.'<br>';
    }
    // ファイルを閉じる
    fclose($fp);
} else {
    // 読み込み不可のときの処理
    echo "not readable!";
    exit;
}

まずはtest2.txtを変数に入れます。

is_readable関数は、is_writableと同じように使います。
ファイルが読み込み可能な場合はTrueを返します。
読み込み可能な場合はファイルを開きます。
読み込みモードはrです。

ここまでは書き込みの場合と同様な流れです。
読み込みの場合は、全て一括で内容を取得するわけではなく、1行ずつ読み込むのが通例です。
fgets関数はファイルを1行ずつ読み込む関数です。
これは決まった書き方なのですが、読み込めなくなるまでループ処理を実行します。

// 開いたファイルから1行ずつ読み込む
while ($line = fgets($fp)) {
    // 改行コード込みで1行ずつ出力
    echo $line.'<br>';
}

はじめのうちは、このように記述するようにしましょう。
最後にファイルを閉じて終了です。

さて、http://localhost/LetsEngineer/curriculum/2-16/index.php
にアクセスしてみましょう。
PHPに関する文章が表示されていれば成功です。

課題


  • 今回のカリキュラム(書き込み、読み込み)を記載したファイルを提出してください。
  • 必要なファイルはindex.phptest.txttest2.txtです。
  • 今回のカリキュラムをしっかり自分でやった証として提出してください。

IT用語 SESに向けて準備しよう


3章では一つ一つの項目で数個のIT用語について調べていただきます。
どの用語もSESでよく耳にする言葉なのできちんと調べていきましょう!

下記の用語について、調べてみましょう。
※IT用語についてはチェックテストの範囲外です。

1. CakePHPの2系・3系の違い
2. LAMP
3. AWS

用語の意味を調べて同じく2-16フォルダ内に記載してください。

カテゴリー

アーカイブ

Close Bitnami banner
Bitnami