条件分岐 if

ifを使う

「もし条件がAだったら処理Xを実行し、条件がBならばYを実行する」のように、状況に応じて処理を選択する手法を条件分岐と呼びます。

構文
if(条件式) {
 条件が満たされたときのスクリプト
}
サンプル

$nameにあらかじめ「Jeanluc」という文字列を格納し、 $nameの中身がJeanlucであるかを判定し、Trueならば文字列を表示しています。

<?php
   $name = "Jeanluc";
   if ($name == "Jeanluc") echo ("$name はうちの犬です");
?>
実行

elseif やelse を使う

複数の条件を判別する場合は、elseif やelse と組み合わせます。
下記例では最初の2つの条件には当てはまらないため、最後の条件を実行します。

<?php
	$numa = 100;
	$numb = 200;

	if ($numa > $numb) {
		echo ("$numa は $numb より大きい");
	} elseif ($numa == $numb) {
		echo ("$numa と $numb は等しい");
	} else {
		echo ("$numa は $numb より小さい");
	}
?>
実行

PHP 小数点以下の処理

小数点以下の数値の処理

  • 小数点以下の数値を切り上げるには、ceil()関数を使います。
  • 小数点以下の数値を切り捨てるには、floorl()関数を使います。
  • 小数点以下の数値を指定位置で丸めるには、round()関数を使います。
サンプル

※数値を全角で入力すると正しく計算されません。

スクリプト
<form method=post action="">
<table  align="center" bgcolor="#FFFFFF">
  <tr align="center">
    <td width="232">浮動小数点の数値:</td>
    <td width="72"><input size="10" type="text" name="num_a">
    </td>
    <td width="136">桁(丸めの場合)</td>
    <td width="55"><p>
      <input size="5" type="text" name="num_b">
    </p>
      </td>
  </tr>
 </table>
<div align="center"><br>
  <font color="#FF0000">※計算の種類を必ずチェックしてください
    </font>
  <p align="center">
    <br>  
</div>
<div align="center">
  <label>
    <input type="radio" name="calc" value="age">
    切上げ</label>
    <label>
    <input type="radio" name="calc" value="sute">
    切捨て</label>
    <label>
    <input type="radio" name="calc" value="marume">
    丸め</label>
   
  
  </p>
</div>
<p>&nbsp;</p>
<p><br>
</p>
<div align="center">
  <INPUT name="submit2" TYPE="submit" VALUE="計算">
</div>

</FORM>

<table width="352" border="1" align="center" cellpadding="5" bgcolor="#FFFFCC">
  <tr>
    <td align='center' width="334"><span class="brown"><strong>計算結果</strong></span><br><br>

<?php
   extract($_POST);
   //計算の種類(ラジオボタンから取得)
   $kind = @$calc;
   
   //半角数値かを判定
   if (is_numeric(@$num_a)) {
	  
	  //計算の種類を判定して計算する     
	switch ($kind) {
		case "age": 
			$ans = ceil(@$num_a);
			$text = @$num_a."の小数点を切り上げます。".@$num_b."= ";
			break; 
		case "sute":
			$ans = floor(@$num_a);
			$text = @$num_a."の小数点を切捨てます".@$num_b."= ";
			break; 
		case "marume":
			$ans = round(@$num_a,@$num_b);
			$text = @$num_a."の小数点以下".@$num_b."位で丸めます ";
			break; 
	}
	
	  echo "<center><table>";
	  echo "<tr>";
	  echo "<td><b> $text $ans </td>";
	  echo "</table></center>";
   }
   else {
      echo "数値を半角で入力してください。<br>";
   }
?> 

PHP ログイン情報を保つ

今回は、「ログアウト」をクリックするまで、ログイン情報を保つスクリプトを作ってみました。
Webブラウザを開いている間だけ覚えさせておきたいときには、$_SESSION()関数が便利です。

セッションに関するリファレンス

※ブラウザの文字コードをユニコード(UTF-8)にしないと文字化けします。

スクリプト(session.php)

幾つかのPHPファイルを使っていますが、メインになる部分はこんな感じです。
「myid」の中身は、フォームで入力した文字です。

<?php
header("Content-Type: text/html; charset=UTF-8");

//セッションの使い始め
session_start();

//内容が保存されているかチェック
if(isset($_POST['myid'])){
  //変数にIDを保存する
  $_SESSION['myid'] = $_POST['myid'];
}

?>

<p>いらっしゃいませ<?php echo $_SESSION['myid']; ?>さん</p>
<p><a href="./session_second.php">次のページへ</a></p>

PHP クッキーにIDを保存する

今日は、クッキーにIDを保存してみました。
クッキーに保存するには、setcookie()関数を使います。

書式

setcookie(クッキー名,値,保存期間,ディレクトリ,ドメイン,セキュア接続のみ,HTTP接続のみ)

下記サンプルは3番目のパラメータまでです。
ボタンを押すと実行画面に移動します。

PHP ブログテーマ更新は要注意!

今まで読み込めていた、PHPファイルが表示されなくなりました。
更新したらファイルの中身が全とっかえされてしまったようです。
functions.php の中身もすっかり初期化されていました。

今後は要注意することにします。
いろいろと動かなくなりそうなので、ブログに直接埋め込むよりは、サイトの中から動かすほうがよいのかもしれません。

PHP ファイル情報の取得

ファイル情報の取得

fileatime()関数 ファイルへの最終アクセス時刻を取得できます。
filemtime()関数 ファイルの最終更新時刻を取得することができます。
filesize()関数 ファイルサイズをバイト単位で取得することができます。
fileperms()関数 ファイルの許可属性が取得できます。
pathinfo()関数を ファイルの拡張子が取得できます。
サンプル
最終アクセス時刻 : 2023/04/10 14:11:24
最終更新時刻 : 2023/10/31 10:37:04
ファイル(バイト)サイズ : 24
許可属性:33188
ファイル名:sample.txt
ファイルの拡張子:txt

<?php
 $filename = "sample.txt";
 echo "最終アクセス時刻 : ".date("Y/m/d H:i:s", fileatime($filename));
 echo "<br>最終更新時刻 : ".date("Y/m/d H:i:s", filemtime($filename));
 echo "<br>ファイル(バイト)サイズ : ".filesize($filename);
 echo "<br>許可属性:".fileperms($filename);
 $path = pathinfo($filename);
 echo"<br> ファイル名:".$filename;
 echo "<br>ファイルの拡張子:".$path["extension"];
 ?>

ファイルを調べる

  • file_exists()関数は、ファイルが存在するかを調べることができます。
  • is_readable()関数は、読み取り可能かどうかを調べることができます。
  • is_writeable()関数は、書き込み可能かどうかを調べることができます。
  • is_executalbe()関数は、実行可能かどうかを調べることができます。
  • is_uploaded_file()関数は、アップロードされたものかを調べることができます。
サンプル
存在するファイル名:sample.txt
読み取り可能なファイル:sample.txt
書き込み可能なファイル:sample.txt
実行できないファイルsample.txt
ソース
<?Php
 $filename = "sample.txt";
 //ファイルが存在するか調べる
if(file_exists($filename)){
 echo "存在するファイル名:".$filename;
 }
 else {
 echo "存在しないファイル".$filename;
 }

 echo "<br>";
 //読み取り可能か調べる
if(is_readable($filename)){
 echo "読み取り可能なファイル:".$filename;
 }
 else {
 echo "読み取りできないファイル".$filename;
 }
 echo "<br>";
 //書き込み可能か調べる
if(is_writeable($filename)){
 echo "書き込み可能なファイル:".$filename;
 }
 else {
 echo "書き込みできないファイル".$filename;
 }
 echo "<br>";
 //実行可能か調べる
if(is_executable($filename)){
 echo "実行可能なファイル:".$filename;
 }
 else {
 echo "実行できないファイル".$filename;
 } 
 ?>

PHP ファイルの表示2

ファイルを読み込んで1バイトだけ表示する

fgetc()関数を使って、指定されたファイルから1バイト読み込みます。ファイルポインタは後ろに移動します。

1バイトを読み込む → A
<?php
$file_name = "sample.txt";
//ファイルを読み取りモードで開く
$file = fopen($file_name, "r") or die("OPENエラー $file_name"); 
//ファイルのデータを1バイト表示する
$moji = fgetc($file);
echo "1バイトを読み込む → ".$moji;
//ファイルを閉じる
fclose($file);

指定バイト数だけ表示する

fread()関数を使うと、ファイルから指定バイト数だけを読み込みます。指定した文字数より小さい場合はファイル全体が表示されます。
下記サンプルは4バイトを表示しています。

4バイトだけ表示: ABCE
<?php
 $file_name = "sample.txt";
 //ファイルを読み取りモードで開く
$file = fopen($file_name, "r") or die("OPENエラー $file_name"); 
//ファイルのデータを4バイト表示する
$moji = fread($file,4);
 echo "4バイトだけ表示: ".$moji;

//ファイルを閉じる
fclose($file);
 ?>

まとめて表示する

filesize()関数を使うと、ファイルサイズを調べてすべての内容を読み込むことができます。
1つの変数にファイルの内容をすべて取り込むので、あまり大きなサイズには不向きです。

<ファイルのすべて>
ABCEDFG
テスト文字
<?php
 $file_name = "sample.txt";
 //ファイルを読み取りモードで開く
$file = fopen($file_name, "r") or die("OPENエラー $file_name"); 
//ファイルのデータをまとめて取得
$moji = fread($file,filesize($file_name));
 echo "<ファイルのすべて><br />".$moji;

//ファイルを閉じる
fclose($file);
 ?>

PHP アクセスカウンタ

イメージ付のアクセスカウンター

ファイルの読み書きを勉強したので、アクセスカウンターを作ってみました。

「実行」をクリックするとカウンタが表示される(はず)です。
6秒経たないとボタンを押してもカウントは増えません。

サンプル


ボタンが押されていません。

ソース

<form method=post action="">
	<input type="hidden" name="answer" value="start">
    <input type="submit" value="実行">
</form>

<?php
//実行が押されたら
if(isset($_POST['answer'])) {
 $logfile = "./count.log";

if ($fn = @fopen($logfile, 'r')){
$str = trim(fgets($fn));
fclose($fn);
 }

//explodeは「<>」で区分された文字列を、分割して変数名に代入するための関数です。
//listは配列に入れるための関数です。

list($counter,$wDate,$ip)=explode("<>", $str);

//取得した文字列
//print "取得した文字列:".$str."<BR><BR>";

//前回のIPと日付
$zenkai_ip = $ip;
 $zenkai_hizuke = $wDate;

//今回のIPと日付
$konkai_ip = $_SERVER["REMOTE_ADDR"];
 $konkai_hizuke = date("Y/m/d H:i:s");

//日付からタイムスタンプを取得
$d1 = strtotime($zenkai_hizuke);
 $d2 = strtotime($konkai_hizuke);
 $keika_time = $d2 - $d1;

//間隔を秒で設定
$kankaku = 60; 

//(同じIPで6$kankaku秒以内はカウントしない
if ($konkai_ip == $zenkai_ip and ($keika_time <=$kankaku)) {

 }
 else{ 

//カウントアップします
$counter = $counter + 1;


//そのまま今度はファイルに書くための文字列を作成
$str=$counter."<>".date("Y/m/d H:i:s")."<>".$_SERVER["REMOTE_ADDR"];

//これで書き込み
if( $fn = @fopen($logfile, 'w')){
fwrite($fn, $str);
fclose($fn);
} 
}

 //カウンタを5桁で表示(%は余りを求める演算子)
echo "<p>";
echo "<center>";
echo "<img src=\"./counter/cimg/",($counter /10000) % 10, ".gif\">";
echo "<img src=\"./counter/cimg/",($counter /1000) % 10, ".gif\">";
echo "<img src=\"./counter/cimg/",($counter / 100) % 10, ".gif\">";
echo "<img src=\"./counter/cimg/",($counter / 10) % 10, ".gif\">";
echo "<img src=\"./counter/cimg/",($counter ) % 10, ".gif\">";
echo "</center>"; 
} else {
	echo 'ボタンが押されていません。';
	}
?>

PHP ファイルを表示する

ファイルを表示する

isset()関数は、変数がセットされており、それが NULL でないことを調べます。
これをやっておかないと、すぐにファイルが表示されちゃうんで(^^;

1つ前で書きんだファイル「sample.txt」の内容を表示します。(ファイルポインタが終端に達するまで)
fgets()関数は、ファイルから1行(改行文字まで)読み込みます。
改行文字を検出できないときは、パラメータで指定した長さ-1バイトに達したときまで読み込まれます。



ボタンが押されていません。

ソース
<form method=post action="">
	<input type="hidden" name="answer" value="start">
    <input type="submit" value="実行">
</form>
<?php
 if(isset($_POST['answer'])) {
 
 	$file_name = "sample.txt";
 	//ファイルを読み取りモードで開く
	$file = fopen($file_name, "r") or die("OPENエラー $file_name");
 	//ファイルをロック
	flock($file,LOCK_EX);
	//ファイルのデータを表示する
	while (!feof($file)){
		$moji = fgets($file, 1000);
		echo $moji."<br>";
	}

	flock($file,LOCK_UN);
	fclose($file);
	} else {
	echo 'ボタンが押されていません。';
	}
?>

配列に入れてから表示

次の例では、ファイルのデータを一度配列入れてから表示しています。

ソース

<?php

	$file_name = "sample.txt";
	//ファイルを読み取りモードで開く
	$file = fopen($file_name, "r") or die("OPENエラー $file_name");
	//ファイルをロック
	flock($file,LOCK_EX);

	//ファイルのデータを配列に入れる
	$count = 1;
	while (!feof($file)){
		$moji[$count] = fgets($file, 1000);
		$count = $count + 1;
	
	}

	//配列のデータを表示する
	for ($n = 1; $n<$count;$n++) {
		echo $moji[$n]."<br>";
	}

	//ロック解除
	flock($file,LOCK_UN);
	//ファイルを閉じる
	fclose($file);
	
?>

PHP ファイルに書き込む

ファイルを開く

  • fopen()関数は、ファイルを開くときに使われる関数です。データを読み取るときに開くのか、書き込むために開くのか、両方で使うのかを指定します。
  • ファイルへの書き込みには「上書き」と「追加」があります。fopen()関数の場合、開くときに、w や w+ を指定するとポインタが先頭に置かれ、既存データは上書きされます。a や a+ を指定すると、ファイルポインタは終端に置かれ、最終行に続けて書き込むことができます。
  • ファイルにデータを書き込むには、fputs()関数やfwrite()関数を使います。
  • fopen()関数は、書き込みモードで開くとき、指定したファイルが存在しない場合は自動でファイルが作成されます。パラメータには、ファイル名どモードを指定します。
fopen()関数で指定するファイルモード
モード 読み/書き ポインタ
r 読み 先頭
r+ 読み/書き 先頭
w 書き 先頭

w+ 書き/読み 先頭
a 書き 終端

a+ 書き/読み 終端

次のサンプルは上書きされます。



ボタンが押されていません。

ソース
<?php
$file_name = "sample.txt";
 //ファイルを上書きモードで開く
$file = fopen($file_name, "w") or die("OPENエラー $file_name");
 flock($file,LOCK_EX);
 //文字列を準備
$moji = "ABCEDFG\n";
 //データを書き込む
fputs($file,$moji);
 //ロック解除
flock($file,LOCK_UN);
 //ファイルを閉じる
fclose($file);
?>

次のサンプルは追加して書き込みます。



ボタンが押されていません。

ソース
<form method=post action="">
	<input type="hidden" name="answer" value="start">
    <input type="submit" value="実行">
</form>

<?php
if(isset($_POST['answer'])) {
	$file_name = "sample.txt";
	//ファイルを追記モードで開く
	//die() は、message を出 力し、スクリプトの処理を終了する
	$file = fopen($file_name, "a") or die("OPENエラー $file_name");

 	//ファイルをロック(同時アクセスがないよう)
	flock($file,LOCK_EX);

	//文字列を準備(改行コード含む)
	$moji = "テスト文字\n";

	//データを書き込む
	fputs($file,$moji);

	//ロック解除
	flock($file,LOCK_UN);

	//ファイルを閉じる
	fclose($file);
	echo 'ファイルに書き込みました';

} else {
	echo 'ボタンが押されていません。';
	}
 ?>