とりあえずの備忘録

主にパソコンやインターネットに関するメモ

PHP 基本的な処理

PHPの基本的な処理に関する備忘録。

ランダムな値を得る

rand関数で1~10の範囲でランダムな整数値に得る

<?php
srand((int)(((float)microtime())*1000000));
$num = rand(1,10);
echo $num;
?>

1~100までならばrand(1, 100)とする。

変数の状態を調べる

isset関数で値が入っているか調べる

<?php
$rt = isset($hensu);
?>
false ⇒ $hensuが未定義・NULL
true ⇒ それ以外の状態

empty関数で値が入っていないか調べる

<?php
$rt = empty($hensu);
?>
true ⇒ $hensuが未定義・NULL・空文字列・空配列・0・'0'・false
false ⇒ それ以外の状態

アクセス元のIPアドレスからホスト名を調べる

gethostbyaddr関数にIPアドレスを渡して取得する

IPアドレスはサーバー変数から取得できる。

<?php
$ip = $_SERVER["REMOTE_ADDR"];
$host = gethostbyaddr($ip);
?>

ホスト名の取得に失敗したとき、返り値はIPアドレスのままになる。

外部ファイルを読み込む

require文(include文)で外部ファイルを読み込む

「sub.php」
<?php
$message = 'Hello, My HomePage!';
?>

「main.php」
<?php
$message = '';
require('sub.php'); //include('sub.php');でも可
echo $message;
?>

「出力結果」
Hello, My HomePage!

require_once文(include_once文)で外部ファイルを読み込む

「sub.php」
<?php
$counter++;
?>

「main.php」
<?php
$counter = 0;
require_once('sub.php'); //include_once('sub.php');でも可
require_once('sub.php');
require_once('sub.php');
echo 'counter = ' . $counter;
?>

「出力結果」
counter = 1;

2度目以降のrequire_once文は無視される。
require_once文の代わりにrequire文を使うと、出力結果は「counter = 3」になる。

require文(include文)で存在しない外部ファイルを読み込む

require文の場合、読み込みに失敗するとエラーとなり処理は停止する
「main.php」
<?php
echo 'step1<br />';
require('sub2.php'); //sub2.phpは存在しないファイル
echo 'step2';
?>

「出力結果」
step1
Fatal error: main() [function.require]: Failed opening required……
include文の場合、読み込みに失敗すると警告を出して処理は続行する
「main.php」
<?php
echo 'step1<br />';
include('sub2.php'); //sub2.phpは存在しないファイル
echo 'step2';
?>

「出力結果」
step1
Warning: main() [function.include]: Failed opening……
step2

数学的な計算をする

少数点以下切り上げ(ceil関数)、切り捨て(floor関数)、四捨五入(round関数)

<?php
$fno1 = 5.2;
$fno2 = 5.7;
echo ceil($fno1) . ',' . ceil($fno2) . '<br />';
echo floor($fno1) . ',' . floor($fno2) . '<br />';
echo round($fno1) . ',' . round($fno2);
?>

「出力結果」
6,6
5,5
5,6

べき乗(pow関数)、平方根(sqrt関数)

<?php
echo pow(2,8) . '<br />';  //2の8乗
echo sqrt(256);  //256の平方根
?>

「出力結果」
256
16

絶対値(abs関数)

<?php
echo abs(-5) . '<br />';
echo abs(5);
?>

「出力結果」
5
5

最大値(max関数)、最小値(min関数)

<?php
//最大値を計算する
echo max(1,6,3,9,7) . '<br />';
$numlist = array(1,6,3,9,7);
echo max($numlist) . '<br />';

//最小値を計算する
echo min(1,6,3,9,7) . '<br />';
$numlist = array(1,6,3,9,7);
echo min($numlist);
?>

「出力結果」
9
9
1
1

数字をカンマ区切りで出力する

number_format関数を使って出力する

<?php
$price = 123456789;
echo number_format($price) . '円';
?>

「出力結果」
123,456,789円

if文をスッキリさせる

3項演算子を使って偶数か奇数か判定する

<?php
$num = 122;
echo ($num%2==0) ? '偶数' : '奇数';
?>

「出力結果」
偶数

「[条件式] ? [真の場合] : [偽の場合]」という形式で指定する。

出力の記述をスッキリさせる

ヒアドキュメントを使って変数の中身をテーブルで出力する

<?php
$menu = '牛丼並盛';
$price = '380';
$calorie = '660';

//ヒアドキュメントで出力
echo <<<EOF
<table border="1">
<tr><td>メニュー</td><td>値段</td><td>カロリー</td></tr>
<tr><td>$menu</td><td>$price</td><td>$calorie</td></tr>
</table>
EOF;
?>

ヒアドキュメントを使うとHTMLの出力内容をそのまま記述できる上に、変数も埋め込める。
「<<<EOF」はヒアドキュメント開始の合図。
「EOF;」 はヒアドキュメント終了の合図。

PHPのタグをスッキリさせる

「php.ini」のshort_open_tagをOnにしてPHPのタグを短縮する

「php.ini」を開き、「short_open_tag = On」に変更して保存する。そうするとPHPのタグ"<?php"を、"<?"と短縮できる。

<? echo 'Hello, JUGEM'; ?>

さらに、"<? echo"を、"<?="と短縮できる。

<?= 'Hello, JUGEM'; ?>

これによってHTML内にPHPを埋め込む記述がスッキリする。

<form action="<?= $_SERVER['PHP_SELF']; ?>" method="post">
XMLと組み合わせるときは注意が必要

XMLの記述である"<?xml version="1.0"?>"も、PHPのタグとみなされてしまうので、

<? echo '<?xml version="1.0"?>'; ?>

とする必要がある。

結論としてPHPのタグの短縮機能は使わない

サーバーを移行する際、「php.ini」が編集できず「short_open_tag = Off」の環境だと、短縮したタグを通常のタグに戻す作業が必要となってしまう。従って、どちらでも対応できるようにPHPのタグの短縮機能は基本的に使わないようにする。

指定の関数が使用可能(定義されている)か調べる

function_exists関数を使ってエスケープ処理を切り替える

<?php
//使用可能な関数を選ぶ
if (function_exists('mysql_real_escape_string')) {
  $string2 = mysql_real_escape_string($string);
} elseif (function_exists('mysql_escape_string')) {
  $string2 = mysql_escape_string($string);
} else {
  $string2 = addslashes($string);
}
?>

変数の値を変数名として使用する

可変変数を使って「$data01='apple';」という代入を行う

<?php
$hoge = 'box';
//可変変数を使う場合は「$」を2回続ける
$$hoge = 'apple';
echo $box;
?>

「出力結果」
apple

defineによる定数の名前を変数で指定する

constant関数を使って指定する

<?php
define('TEISU_01', 100);
define('TEISU_03', 300);
define('TEISU_04', 400);

for ($i=1; $i<=4; $i++) {
  //定数の名前を組み立てる
  $teisu = 'TEISU_0' . $i;

  //定数の名前が定義されていたら定数の値を出力する
  if (defined($teisu)) {
    echo constant($teisu) . '<br />';
  } else {
    echo '"' . $teisu . '" is not defined<br />';
  }
}
?>

「出力結果」
100
"TEISU_02" is not defined
300
400

シェルを通じてコマンドを実行する

shell_exec関数を使ってサーバーの負荷を調べる

<?php
$command = 'uptime';
$rt = shell_exec(escapeshellcmd($command));
echo $rt;
?>

「出力結果」
17:49:16 up 1 days, 2:37, 1 users, load average: 0.00, 0.00, 0.00

いきなりはじめるPHP~ワクワク・ドキドキの入門教室~

いきなりはじめるPHP~ワクワク・ドキドキの入門教室~