カテゴリー
SugiBlog ホームページ制作・システム開発|大阪

PHPに拡張モジュールを追加 phpize

phpizeを使えば、PHPを再コンパイルすることなく拡張モジュールをビルドすることができます。

例としてPHP5.3.29の環境にzlibモジュールを追加してみます。

ソースの場所に移動

cd /usr/local/src/php-5.3.29/ext/zlib

phpizeを実行

phpize

以下のようなエラー発生することがあります。

Cannot find config.m4
Make sure that you run '/usr/local/bin/phpize' in the top level source directory of the module

続きを読む…»

4,540 views

PHP 5.2.xから5.3.xへバージョンアップ

とある環境でPHPをバージョンアップしました。
5.2.8から5.3.6へバージョンアップ。

仕様変更により推奨されない関数(Deplecated)でエラー。
今回はereg関連の関数でエラーでした。
代わりにpreg_matchを使用するようになっています。

他にも推奨されなくなった関数がありますので、詳しくは下記URLを参照してください。
PHP 5.3.x で推奨されない機能

その他、PEAR::DBでエラー。
元々のバージョンが以下の通り。
PEAR 1.50.2.18
DB 1.86
続きを読む…»

430 views

PHP7 リリース

2015年12月3日、11年ぶりのメジャーアップデートとなる「PHP7」が公開されました。
現行のPHP5は3年後にサポート終了となります。

※PHP6は破棄されスキップされています。

313 views

PDFファイルの出力とダウンロード

画像と同じようにPDFファイルもPHPで出力させることができます。

PDFファイルを出力

//PDFを出力するためのヘッダー
header("Content-Type: application/pdf");

//ファイルを読み込んで出力
readfile("example.pdf");

PDFファイルをダウンロードさせる

//ダウンロードさせるためのヘッダー
header("Content-Disposition: attachment; filename=example.pdf");
 
//ファイルを読み込んで出力
readfile("example.pdf");
2,598 views

正規表現の注意点

キャラクタークラス([])を使用する場合、[]内ではエスケープが無効化されます。
※言語の種類等によってエスケープが有効なものもあるようです。
その中で特殊な意味を持つ記号を通常のキャラクターとしてクラスに含めたいときは
記述する位置に注意する必要があります。
例えば「]」、「^」、「-」等です。

^ [の直後以外
] [の直後
リストの最後

参考URL: http://www.kt.rim.or.jp/~kbk/regex/regex.html

772 views

JSON形式のデータを簡単に扱う[PHP]

PHPにはJSON形式のデータを簡単に扱える関数が用意されています。
PHP5.2.0以降であればコアに含まれるので追加インストールの必要はありません。

例として会員システムで登録ユーザーの最終ログイン日とログイン回数を記録するというプログラムとします。

まずは以下のようなサンプル配列を作成します。

$VALUE["suzuki"]    = array("last_login_date" => "13-10-26", "count" => 1);
$VALUE["hashimoto"] = array("last_login_date" => "13-10-28", "count" => 5);

確認のため、出力してみます。

Array
(
    [suzuki] => Array
        (
            [last_login_date] => 13-10-26
            [count] => 1
        )

    [hashimoto] => Array
        (
            [last_login_date] => 13-10-28
            [count] => 5
        )

)

作成した配列を引数として渡し、JSONデータを作成します。

$json = json_encode($VALUE);

出力してみましょう。

{"suzuki":{"last_login_date":"13-10-26","count":1},"hashimoto":{"last_login_date":"13-10-28","count":5}}

たったこれだけでJSONデータが作成できます。

次はデータに変更を加えてみます。 続きを読む…»

6,852 views

配列をランダムに並べ替える

PHPではshuffle関数を使って、配列の値をランダムに並べ替えることができます。

例として1から15の配列を作成し、配列の要素数だけ繰り返しランダムに並べ替えたものを表示しています。

<?php

$num_list = range(1, 15);

$n = count($num_list);

for($i = 0; $i < $n; $i++) {
    shuffle($num_list);
    echo @implode(", ", $num_list)."<br>";
}

?>

実行した結果がこちら
random_array

643 views

割り算した余りを求める [PHP]

除算(割り算)した剰余(じょうよ:余り)を求めるには以下のようにします。

$surplus = 1564 % 1000;
echo $surplus;

出力結果

564

他の言語でも、同様の演算子があるかと思います。
例えばVBなら「mod」です。

しかし、引数が整数型(Integer)ではない場合、意図しない結果が返ってくることがあります。

$surplus = (65.1 * 1000) % 1000;
echo $surplus;

続きを読む…»

8,101 views

配列の共通項を計算する – array_intersect [PHP]

複数の配列から共通するキーや値を検索する関数をご紹介。

配列の共通項を計算する – array_intersect

書式

array array_intersect ( array $array1 , array $array2 [, array $ ... ] )

配列の共通する値のキーと値が配列で返されます。
キーと値の関係は、もとの配列の組み合わせが維持されます。

パラメータ

array1 //値を調べるもとの配列
array2 //値を比較する対象とする配列
array  //さらに比較するそれ以外の配列

返り値
array1 の値のうち、 すべての引数に存在する値のものを含む連想配列を返します。

例)

<?php
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
print_r($result);
?>

出力結果

Array
(
    [a] => green
    [0] => red
)

キーを基準にして配列の共通項を計算する – array_intersect_key
続きを読む…»

1,391 views

かなり便利 – PHPで祝日を求める

かなり便利なので、以前から使わせていただいています。
isHoliday($year, $month, $day)だけで祝日かどうかがわかります。
他にもgetWeeksOfMonthという関数で、ある月の第n曜日の日付の取得もできます。

PHPで祝日を求める – ぱぷぅ家のホームページ
http://www.pahoo.org/e-soul/webtech/php02/php02-27-01.shtm

2016.07.05
2016年より施行された「山の日」にも対応されています。

六曜を取得する – 2018.01.18追記

先ほどとはまた別で公開されているプログラムを使って六曜も取得できます。

PHPで3ヶ月カレンダーを作る – ぱぷぅ家のホームページ
https://www.pahoo.org/e-soul/webtech/php02/php02-45-01.shtm

ダウンロードした中の「pahooCalendar.php」を読み込み、
以下のようなコードで六曜が取得できます。

// 六曜取得の設定
$pCalendar = new pahooCalendar();
$pCalendar->setLanguage('jp');
$pCalendar->makeLunarCalendar($year);

// 旧暦の取得
list($qmonth, $qday, $qq) = $pCalendar->Gregorian2Lunar($year, $month, $day);

$rokuyo = $pCalendar->rokuyou($qmonth, $qday);

echo $rokuyo;

通常は上記の方法で取得できるのですが、2018年の1~16日が
取得できなかったので、少し手を加えました。

取得できなかったのは旧暦が負の日付になることが原因でした。
例えば「1/1」だと「12/-15」となる。
「12/-15」とは、12月の0日(ゼロ日)よりも15日前ということになるよう。
つまり、12月1日よりも15日+1日前の日付を出せば良い、ということになります。
それを踏まえたのが以下のコードになります。

list($qmonth, $qday, $qq) = $pCalendar->Gregorian2Lunar($year, $month, $day);

if($qmonth > 0 && $qday > 0) {

    $rokuyo = $pCalendar->rokuyou($qmonth, $qday);

    echo $rokuyo;

} else {

    // 旧暦の日付が負だった場合の処理

    // まず1日の日付オブジェクトを作成
    $qdate = new DateTime("$year-$qmonth-01");

    // 負の日数+1日の分だけ日付を遡る
    $qdate->sub(new DateInterval("P".abs($qday - 1)."D"));

    // 遡った日付で六曜を取得
    $rokuyo = $pCalendar->rokuyou($qdate->format("n"), $qdate->format("j"));

    echo $rokuyo;

}
5,228 views