ファイルを読み込む/ファイルに書き込む

[参考記事] gzファイルを読み込む/ファイルに書き込む

ファイルを読み込む

<?php

// 対象のファイル・URL
$target="test.txt";
// $target="http://www.example.com/test.txt";

// 対象がファイルなら
// ファイルの存在を確認
if(!is_file($target) && !is_link($target)){
  echo "指定されたファイルがありません。";
  exit;
}

// 対象がURLなら
// URLを確認
//if (!preg_match('/^(https?|ftp):\/\/[-_\.!~*\'()a-z0-9;\/?:\@&=+\$,%#]+$/i',
//     $target)) {
//  echo "URLが不正です。";
//  exit;
//}

// ファイルハンドルを読み込みモードで開く
if (!($fp = @fopen($target,"r"))) {
  echo "ファイルの取得に失敗しました。";
  exit;
}

$data="";
//ファイルを1行づつ取得
while (!feof($fp)) {
  $data.=fgets($fp, 4096);
}

echo $data;

// ファイルハンドルを閉じる
fclose($fp);
?>

標準関数では

<?php
$data = file_get_contents($target);
?>

ファイルに書き込む

Linuxサーバなどでは、webアクセスされた時のファイルの書き込みユーザはapacheなどになり、FTP等のユーザと違う場合があります。
このファイルはファイルの削除変更などがFTP経由でできなくなります。
このためファイルを書き込んだら、パーミッションを777などに変更しておいたほうがいいです。

[参考記事] ディレクトリ内のファイルのパーミッションを一括で変更する

<?php

// 対象のファイル
$target="test.txt";

// ファイルが存在する場合
if (file_exists($target)) {
  if (is_dir($target)) {
    echo "同名のフォルダが存在します。";
    exit;
  }

  if (!is_writable($target)) {
    echo "ファイルの書き込み権限がありません。";
    exit;
  }
}

// ファイルハンドルを書き込みモードで開く
if (!($fp = @fopen($target,"w"))) {
  echo "ファイルの書き込みに失敗しました。";
  exit;
}

// 排他ロックを行います
if (!@flock($fp, LOCK_EX)) {
  echo "ファイルのロックに失敗しました。";
  exit;
}

//ファイルに書き込む
fputs($fp, $data);

// 排他ロックを終了します
if (!@flock($fp, LOCK_UN)) {
  echo "ファイルのロック解放に失敗しました。";
  exit;
}

// ファイルハンドルを閉じる
fclose($fp);

// パーミッションを変更する
@chmod($target, 0777);
?>

ファイルハンドルのモード一覧

mode説明
r読み込みのみ
ファイルポインタをファイルの先頭に置きます
r+読み込み/書き出し
ファイルポインタをファイルの先頭に置きます
w書き出しのみ
ファイルポインタをファイルの先頭に置き、ファイルサイズをゼロにします
ファイルが存在しない場合には、 作成を試みます
新規・書き換えに使用します
w+読み込み/書き出し
ファイルポインタをファイルの先頭に置き、ファイルサイズをゼロにします
ファイルが存在しない場合には、作成を試みます
新規・書き換えに使用します
a書き出し用のみ
ファイルポインタをファイルの終端に置きます
ファイルが存在しない場合には、作成を試みます
新規・追記に使用します
a+読み込み/書き出し
ファイルポインタをファイルの終端に置きます
ファイルが存在しない場合には、作成を試みます
新規・追記に使用します
x書き込みのみ
ファイルポインタをファイルの先頭に置きます
ファイルが既に存在する場合には fopen() は失敗し、 E_WARNING レベルのエラーを発行します
ファイルが存在しない場合には新規作成を試みます
PHP4.3.2以降でサポートされ、また、 ローカルファイルに対してのみ有効です
x+読み込み/書き出し
ファイルポインタをファイルの先頭に置きます
ファイルが既に存在する場合には fopen() は失敗し、 E_WARNING レベルのエラーを発行します
PHP 4.3.2 以降でサポートされ、また、 ローカルファイルに対してのみ有効です

関連記事

スポンサーリンク

Apacheをコマンドプロンプトから起動・停止・再起動する方法

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る