PHPメモ

更新日2011-03-11 (金) 12:07:22

エラー処理(ハンドラー)

<?php
error_reporting( E_ALL ); //  ---- (1)

function test_error_handler($errorno,$errstr,$errfile,$errline,$errcontext) {
  switch ($errorno) {
    case E_ERROR:
              echo "致命的エラー:" . $errorno . " エラーメッセージ:" . $errstr . "\n";
              break;
    default:
              echo "その他のエラー エラーコード:" . $errorno . " エラーメッセージ:" . $errstr . "\n";
              break;
  }
}

set_error_handler("test_error_handler");  //  -----(1)
$fd = fopen("./azz.txt","r");


echo "<p> JE2ISM </p>\n";

?>

(1)ではスクリプトの持続時間(実行時間)のレベルが設定されます

// 全てのエラー出力をオフにする
error_reporting(0);
// 単純な実行時エラーを表示する
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// E_NOTICE を表示させるのもおすすめ(初期化されていない
// 変数、変数名のスペルミスなど…)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
// E_NOTICE 以外の全てのエラーを表示する
// これは php.ini で設定されているデフォルト値
error_reporting(E_ALL ^ E_NOTICE);
// 全ての PHP エラーを表示する (Changelog を参照ください)
error_reporting(E_ALL);
// 全ての PHP エラーを表示する
error_reporting(-1);
// error_reporting(E_ALL); と同じ
ini_set('error_reporting', E_ALL);

(2)ではエラーのハンドリングができるphp.iniでdisplay_errors=offの場合にエラー出力が可

POSTされた値の評価方法について

if ($_POST['onamae'] != '') 空文字列でないことを判断します。$_POST['onamae'] がセットされていない場合には,警告が出ることがありますが,正しく処理されます

参考:http://oku.edu.mie-u.ac.jp/~okumura/php/form.php

GDで画像(png)をコピーして表示,出力は画像

pngのディレクトリには chu2_0.pngからchu2_9.pngの0から9までの番号ファイルがある。

test.php

<?php
       // PNG画像としてmimeタイプ出力
       Header("Content-type: image/png");
       //画像の大きさ
       $w = 19 ; $h = 25;

       // 数字
       for ($i = 0 ; $i < 10; $i++){
               $file_nmae = "png/chu2_" . $i .".png";
               $Suji[$i] = ImageCreateFromPng($file_nmae);
       }

       // 5桁出力
       // 出力先の領域を指定
       $resultImg = imagecreatetruecolor($w * 5 , 25);
       for ($i = 0 ;  $i < 5; $i++){
               ImageCopy($resultImg, $Suji[$i], $w * (4 - $i), 0, 0, 0, 19, 25);
       }

       /* 画像出力 */
       Imagepng($resultImg);
?>

表示htmlは以下のように記述

<img src="test.php" alt="" />

全角混じりの文字数

mb_strlenは全角半角関係なく文字数のようだ MySQLもvarcharの引数は文字数のようだ
ただし、第二引数に文字コードを指定しないと正しくない場合がある。

mb_strlen($name,'SJIS')

strlen(abcde)         : 5
mb_strlen(abcde)      : 5
strlen(あいうえお)    : 15
mb_strlen(あいうえお) : 5
strlen(abうえお)      : 11
mb_strlen(abうえお)   : 5

関数への変数引渡し

変数引渡しは特に function($d1, $d2)のように引数の数が決まっていなくても渡すことができる

function test(){

        $num = func_num_args();
        $args = func_get_args();
        echo "引数の数 $num \n";

        for ($i = 0; isset($args[$i]); $i++) {
                $data = $args[$i];
                echo "データ $i :  $data \n";
        }
//以下のような方法もOK
        for ($i = 0; $i < $num; $i++) {
                $data = $args[$i];
                echo "データ $i :  $data \n";
        }
}

 $d1 = "AAAAA";
 $d2 = "BBBBB";
 $d3 = "CCCCC";
 $d4 = "DDDDD";
 $d5 = "EEEEE";

 test($d1, $d2 ,$d3, $d4, $d5);

連想配列とarray

$chu_grp_list = array("50"=>"ディスクトップPC", "51"=>"ノートPC", "52"=>"サーバ");

while(list ($key, $val) = each($chu_grp_list)) {

   echo "$key , $val \n";
   }

foreach

$list_data = array(20,50,100,150);
foreach ($list_data as $value) {
    print "value = $value<br>\n";
}

結果

value = 20<br>
value = 50<br>
value = 100<br>
value = 150<br>

文字列全てが半角の判断

if (preg_match("/^[!-~]+$/", $file_aname)){
     (すべてが半角)
}else{
     (全角が含まれる)
}

!-~なのでスペースは含まれない。
^[!-~]+$は初めの文字がアスキーコードで「!-~」の間で+が1文字以上繰り返して$が文末までを意味する

他のページインポート

他のページを読み込んで表示する

$url = "http://xxx.abc.jp/~okada/googlemap/viewmap4.php?ID=2";
$buff = file_get_contents($url);
echo $buff;

16進の表示

携帯でSoftBankなんかは絵文字が16進に割り当てられいるのでそれを表示する方法

\x(16進)と指定する。SoftBankでは1B$F(Ascii文字)0Fで表現する。
以下の例は絵文字で0を表現(0x45のアスキー文字が F45.gif 0x3Cが文字 F3c.gifをあらわす)

 $VAL = 0x45;
 $sVal = chr($VAL);
 echo "\x1B\$F$sVal\x0F";

絵文字のページ

半角全角変換

mb_internal_encoding("SHIFT_JIS");   <=これがないとうまく変換できない EUC-JP等
$keyword = mb_convert_kana($keyword,'rn')
「r」 : 「全角」英字を「半角」に変換
「R」 : 「半角」英字を「全角」に変換
「n」 : 「全角」数字を「半角」に変換
「N」 : 「半角」数字を「全角」に変換
「a」 : 「全角」英数字を「半角」に変換
「A」 : 「半角」英数字を「全角」に変換
「s」 : 「全角」スペースを「半角」に変換
「S」 : 「半角」スペースを「全角」に変換
「k」 : 「全角片仮名」を「半角片仮名」に変換
「K」 : 「半角片仮名」を「全角片仮名」に変換
「h」 : 「全角ひら仮名」を「半角片仮名」に変換
「H」 : 「半角片仮名」を「全角ひら仮名」に変換
「c」 : 「全角かた仮名」を「全角ひら仮名」に変換
「C」 : 「全角ひら仮名」を「全角かた仮名」に変換
「V」 : 濁点付きの文字を一文字に変換(「K」,「H」と共に使用)

文字列の連結(=<<< EOD EOD;)

以下の例は$dataに(1)から(2)までの文字列を入れることが出来る

       $data = <<< EOD
       CQ CQ CQ DE JE2ISM  "呼び出し" <===(1)
       こちらは
       それで                         <===(2)
EOD;   <==この行は行頭に書く必要あり
       echo "$data \n";

配列変数

$fruit = array("りんご", "みかん", "ぶどう");

?(三項演算子)演算子

(expr1) ? (expr2) : (expr3) という式は、式1 が TRUE の場合に 式2 を、 式1 が FALSE の場合に 式3 を値
true?'true':false?'t':'f' ==> tが帰る Excelだと成り立つのでtrueが帰る
(true?'true':false)?'t':'f' という意味ExcelのIFとは違う 

サーバ変数

if (isset($_SERVER['HTTPS'])) {

セットされているか評価するにはissetを使用する

引数(コマンドラインから)

sample.php

#!/usr/local/bin/php -q

<?php
echo "$argc \n";
echo "$argv[1]";
?>
$ ./sample.php abc
2
abc

Unix時間

1970/1/1からの秒数

$temp="2006-09-28 10:20:00";
echo strtotime($temp);

$temp=1159405200;
echo date('Y 年 m月 d日 H:i:s', $temp);

リクエストURL(サーバ変数)+URLでジャンプ

$a = $_SERVER['REQUEST_URI']; <-アクセスディレクトリ名取得
$url = "http://www.abc-u.ac.jp" . $a;
$h = "Location:" . $url ." \n\n";
echo "$h <Br>";
header($h);   <-Jump命令(Location:"[URL]")

Apache2.2.xでもユーザ単位で別のURLに飛ばせる

conf/extra/httpd-userdir.confで

UserDir http://abc-u.ac.jp/~*/

とすると、このページ~user/でアクセスしてユーザはhttp://abc-u.ac.jp/~user/にリダイレクトされる

lm-sensorsを携帯で

lm-sensorsの結果をCPUの温度、Fan回転数、M/Bの温度を携帯電話で表示する。

<?php
 echo date("Y 年 m 月 d 日 H 時 i 分 s 秒");
 echo "<Br>";
 exec("/usr/local/bin/sensors", $array);
 $dummy = strtok($array[10] ,":");
 $CPUFan = trim(strtok(strtok(":"),"("));
 $dummy = strtok($array[12] ,":");
 $MBTemp = trim(strtok(strtok(":"),"("));
 $dummy = strtok($array[13] ,":");
 $CPUTemp = trim(strtok(strtok(":"),"("));

 echo "CPU Fan: $CPUFan<Br>";
 echo "M/B: $MBTemp<Br>";
 echo "CPU 温度: $CPUTemp<Br>";
?>

execコマンドで、出力を配列に入れ同じ配列にもう1度execコマンドを度実行すると配列に追加されていく

exec("/usr/local/sbin/hddtemp /dev/sda", $array);
$devname1 = strtok($array[0] ,":");

exec("/usr/local/sbin/hddtemp /dev/sdb", $array);
$devname2 = strtok($array[1], ":");

よって上のようにす配列をずらして取得するか

unset($array);

で配列をリセットする。


添付ファイル: fileF3c.gif 210件 [詳細] fileF45.gif 188件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-03-11 (金) 12:07:22 (2808d)