Webシステム構築 - php

Cannot use a scalar value as an array - 2011.01.22


PHPで配列と変数を同じ名前で使用すると
Cannot use a scalar value as an array
というエラーが発生する。

// 同じ名前で配列と変数を使用
$test = 'aaa';
$test['0'] = 'aaa';


フォルダ内にデータが存在する場合の削除 - 2011.01.02


function rmdirf($dir) {
    if ($handle = opendir("$dir")) {
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..") {
                if (is_dir("$dir/$file")) { rmdirf("$dir/$file"); } else { unlink("$dir/$file"); }
            }
        }
        closedir($handle);
        rmdir($dir);
    }
}

フォルダ内にデータが存在する場合はrmdirでは削除ができません。
ファイルが存在していても強制的に削除したいという場合は上記のような関数を作成しておくと便利です。



データベース(MySQL,SQLite)へパラメータエスケープ処理について - 2010.12.14


// SQLiteの場合
$str = sqlite_escape_string($str);
// MySQLの場合
$str = mysql_real_escape_string($str);

データベースへの挿入、更新時に上記処理を行うことでエラーを防ぐことができます。



携帯端末(FOMA)のユーザーIDを取得する - 2010.12.13


URLに guid=on をつけることでFOMAのユーザーIDを環境変数として取得することが可能になります。

// FOMAユーザーID
echo $_SERVER['HTTP_X_DCMGUID'];

guid=on がついている場合でも携帯端末側でユーザーIDを使用しない設定になっている場合は取得が行えません。


■他のキャリアの取得方法について

// ezwebユーザーID
echo $_SERVER['HTTP_X_UP_SUBNO'];
// softbankユーザーID
echo $_SERVER['HTTP_X_JPHONE_UID'];


phpでURLが存在するかチェックする方法 - 2010.12.08


$header = get_headers($url);
if (strstr($header[0], '200')) {
    return true;
} else {
    return false;
}

is_file関数でファイルの存在確認ができるので、is_urlとでもしてfunctionにしてしまえば
使いやすくなります。



serialize / unserialize を使用して配列・オブジェクトをそのままキャッシュ - 2010.11.26


キャッシュさせる仕組みを作るときに活躍する serialize は大変便利です。
別サーバーとの連携にも使われることが多いです。

■ 配列データをテキストファイルに書き出し

// 配列にデータを格納
$data_ary = array('a','b');
// serializeして配列情報をファイルに書き出す
file_put_contents('data.txt', serialize($data_ary));

■ テキストファイルから読み込んだデータを配列に格納

// ファイルから読み込んだデータを配列に格納
$data_ary = unserialize(file_get_contents('data.txt'));


配列情報をそのまま出力できるため、
読み込んだ際もそのまま出力前の配列の状態が再現できます。



絵文字データを壊さずに全角カタカナを半角カタカナへ変換 - 2010.11.25


$html = mb_convert_kana($html, 'knr', 'cp932');

携帯サイトでは画面が小さいためカタカナを半角で表示させる必要があります。



guidが設定されていない場合は自動的にguidを追加 - 2010.11.24


DoCoMoのユーザーIDを取得するにはアドレスにguid=onを付ける必要があります。
guid=onが付いていない場合は自動的にguid=on付きのアドレスにリダイレクトするプログラム。

if ($_REQUEST['guid'] != 'on') {
    // パラメーターがあるかどうか判定
    $param = (strstr($_SERVER['REQUEST_URI'], '?')) ? '&guid=on' : '?guid=on';
    // 環境変数からリダイレクトアドレスを取得
    $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$param;
    // リダイレクト
    header('Location: '.$url);
}

パラメーターが付いていてもそのままパラメーター付きの状態でリダイレクトします。



Google Chart でQRコードを作成しファイルとして保存する - 2010.11.23


Google Chartを使用すると簡単にQRコードを作成することができます。
ページを表示するたびにリクエストを送るよりはサーバーに保存して表示した方が
負荷も与えず、動作も軽くなります。

// URLをエンコード
$url = urlencode(QRコードに含めるURL);
$google_chart = 'http://chart.apis.google.com/chart?chs=130x130&cht=qr&chl=';
// QRコードイメージデータを取得
$qrcode = file_get_contents($google_chart.$url.'&choe=Shift_JIS');
// ファイルに保存
file_put_contents('qrcode.gif', $qrcode);

Google Chart Tools / Image Charts
http://code.google.com/intl/ja/apis/chart/



include/requireしたphpファイル内で出力された情報の取得 - 2010.11.22


ob_start();
require 読み込み用php;
$ob_data = ob_get_contents();
ob_end_clean();

読み込むだけで結果をその場で出力するphpの対応。
出力情報をphp側で取得して変数に格納することができます。



phpにてMySQLキャッシュヒット率取得 - 2010.11.21


// キャッシュヒット率算出用の情報を取得
$sql = "SHOW STATUS LIKE 'Qcache%'";
$rs = mysql_query($sql);
while ($rows = mysql_fetch_assoc($rs)) {
    $tmp[$rows['Variable_name']] = $rows['Value'];
}
// query cache hit 率 = Qcache_hits / ( Qcache_hits + Qcache_inserts + Qcache_not_cached ) * 100
$hit = $tmp['Qcache_hits'] / ($tmp['Qcache_hits'] + $tmp['Qcache_inserts'] + $tmp['Qcache_not_cached']) * 100;

MySQLのキャッシュ設定が正しく行われているか、キャッシュを有効に活用できているかなどを確認できます。※DB接続等の処理は省いています。



foreachで空配列を使用すると警告が表示される - 2010.11.14


// 空配列を使用した時の警告文章
Warning: Invalid argument supplied for foreach()

上記の警告文章を見たことある人は多いのではないでしょうか?
これはforeachを使用した際にパラメーターとして渡す配列が空の時に表示されます。

この警告を防ぐには

// 空配列を使用した時の警告文章
if (count($array) > 0) {
    foreach ($array as $key => $value) { 処理内容 }
}

配列にデータが格納されているかを確認してからforeachを実行するようにします。




PCと携帯で取得できる情報が違う場合がある - 2010.11.13


環境変数:$_SERVER['REQUEST_URI']
の値はどの端末からでも同じものだと思っていました。
※アクセスするサイトは端末に関係なく同じため

http://1oku-life.com/~hoge/
というサイトがあったとします。

PC
http://1oku-life.com/~hoge/ => /~hoge/

AU
http://1oku-life.com/~hoge/ => /%7hoge/

~チルダがエスケープされた状態で取得する場合があるようです。



file_put_contentsで追記処理を行う - 2010.11.10


file_put_contents('log.txt', $data, FILE_APPEND | LOCK_EX);

排他ロックと併用して使うことが多いですが、ロックがかからないことがあるので、
オプションでの排他ロックはあまり信頼していません。



php 三項演算子 - 2010.11.09


// 三項演算子
$data = (if条件) ? if条件一致処理 : if条件不一致処理;
// サンプル
$data = ($flg==1) ? true : false;

三項演算子を利用することで必ず結果取得変数に値が取得できるようなります。
また

if ($flg==1) {
    $data = true;
} else {
    $data = false;
}

と記述するよりはソース量が減るので後々見やすいです。



PHPエラー表示設定(error_reporting) - 2010.11.08


// 全てのエラー出力をオフにする
error_reporting(0);
//
// 全てのエラーを出力する
error_reporting(E_ALL);
//
// phpデフォルトのエラー表示(警告以外の全てのエラーを表示)にする
error_reporting(E_ALL ^ E_NOTICE);

開発時と運用時で切り替えるようにすると作業効率が上がります



HTMLのコメントをphp(preg_replace)で削除 - 2010.11.05


//htmlコメント削除
$html = preg_replace('//', '', $html);

<!--~-->を削除することができます。
不要なコメントをソースに表示させたくない場合に使用すると便利です



今月末の日付取得 - 2010.11.01


//今月末の日付取得
$last_day = date("d", mktime(0, 0, 0, date("m") + 1, 0, date("Y")));

12月であれば31を取得 11月であれば30を取得できます





そのほかの記事

proftpdに接続できるユーザーを制限する ( php )

データベース(MySQL,SQLite)へパラメータエスケープ処理について ( php )

iptablesのip_conntrack確認・設定変更 ( php )

tableを使用した1pxで任意のカラーラインを引く方法 ( php )

foreachで空配列を使用すると警告が表示される ( php )

携帯サイトなどでよく使用されるレイアウト用罫線 ( php )

Dreamweaverの機能拡張 zen codingでタグ打ち簡略化 ( php )

MRTGカスタマイズ - apacheプロセス数追加 ( php )

qmail:root宛てのメールを指定メールアドレスに送信 ( php )

Cannot use a scalar value as an array ( php )



Webシステムを作る人は下記のサービスの作成/運営を行っています

携帯無料レンタルサーバー

携帯無料レンタルサーバー

携帯サイト制作テンプレートエンジンを備えた携帯専用の無料レンタルサーバー

携帯無料レンタルランキング

携帯無料レンタルランキング

携帯サイトテンプレートを使用した携帯専用の無料レンタルランキング

携帯無料レンタル空メール

携帯無料レンタル空メール

独自ドメイン空メールの利用も可能 携帯専用無料レンタル空メール

ドメイン年齢チェック

ドメイン年齢チェック

ドメイン年齢チェックサービス SEOやサービスの運営期間等の調査に利用可能

ホームページ制作代行

ホームページ制作代行

低価格・高品質なデザインによるホームページ作成代行

EC-CUBEカスタマイズ

EC-CUBEカスタマイズ

ホームページ機能別改善パッケージ EC-CUBEカスタマイズから、SEOまで幅広く掲載中


Webシステムを作る人では一緒に何か作りたいという方を募集しています

デザインなら得意だがホームページを作るのはちょっと…
アイデアはあるが形にできない…
外注に頼む費用がもったいない…
定期的に時間にゆとりがあり、空いた時間を使って何かしてみたい方…

上記のような方は相談の上一緒に協力できたらと思います。
利益が出るサイトの場合は経費・売り上げともに折半でお願いします。(笑)

ページトップへ
↑安い・軽い・便利!↑
Webシステムを作る人は
エックスサーバーで運営
しています

費用で決めるならここ
月額¥105円?!

Webシステムを作る人 MENU

○○な人シリーズ

Copyright (C) Webシステムを作る人 All Rights Reserved. ページランク表示用ブログパーツ E-PageRank