ラベル PHP の投稿を表示しています。 すべての投稿を表示
ラベル PHP の投稿を表示しています。 すべての投稿を表示

2020年7月6日月曜日

意外と変なところに躓く…

グラフの表示をかなーり低レベルで自前で折れ線グラフを書いているわけですが、いろいろと引っかかってきました。
設定ファイルとしてiniファイルを使ってみたところ、phpではコメントに2byteコードを書いても無視してくれるのですが、python3だとコードページが違うだとか結構面倒な感じに。
Windows10のメモ帳でもUTF-8が扱えることを考慮すると、すべてUTF-8で揃えてしまうのが幸せになれそうなのですが、iniファイルといえばシフトJISとか変なプライドが邪魔してしまい、shft-jisファイル形式のままアップロードしています。

昔はクライアント内ではクライアント側のファイル形式や文字コードで管理してftpで変換し、サーバー側ではサーバーのファイル形式、文字コードという考え方でよかったのですが、最近はやってもファイル形式(とはいっても改行コード変換程度)で文字コードはそのままというかなりアバウトな感じで管理していました。
その一つにphpが結構いい感じに文字コードや改行コードを無視してくれるというのがあったのですが、これがpython3になると、スクリプト内の文字コードも結構厳しかったり、パーサーなどもしっかりとコードページを意識しているので簡単に処理が通らなくなってきます。

一番最悪だったのがiniファイルをsift-jisのままアップロードして、サーバー側のテキストエディタでコメントまでコピペして保存するとそのファイルはsift-jisとUTF-8が混在した不思議なファイルが出来上がってしまうと、python3のiniパーサーで直接扱うことができなくなってしまいます。
サーバー側で直接触らなければいいのでしょうけど、設定ファイルだし直接触りたい欲求はあるわけです。
で、python3でiniファイルを扱うときは予めコメントをカットしてパーサーに渡してあげれば…とか考えたんですけど、そこまでしてオーバーヘッド増やすなら、いっそのこと全部UTF-8でいいんじゃ?的なw

phpのiniファイル絡みでもう一つ。
iniファイル上のセクション名などに関して数字で始まる文字は数値になるとかいう仕様があってこれが値に対しても行われるのかな?と思ったら行われていなかったという。
色の設定を行いたくて、
name=0xF0F000
みたいな設定を行ったら、結果としてiniパーサで、文字列として取り込まれていたのですが、これが分かるまでに結構四苦八苦しました。
結果としてデバッグ用に if (php_sapi_name() == 'cli') とか判断して色々出力するようにしておきました。これで今後はかなり複雑怪奇な形になっても内部が目で見えるようになるので便利かな?

2017年9月11日月曜日

phpのGDを使ってグラフ化

ようやくセンサーのデータをSQLiteでまともにロギングを初めて手軽にブラウザで確認しようとググってみるとグラフ化してるものは市販のライブラリを利用しているものが多く、基盤的なところから気軽に扱えそうなものがありませんでした。

最悪ロギングのタイミングで画像に落とし込んでwebで表示できればいいかな?とは思ったものの、phpは動かしているのでその線で色々調べてみました。
いまさらphpですけども。
市販のライブラリで私用なら無料のライブラリもあるようですが、正直大したグラフにしたいわけでもなく、基盤的なものがないかと調べていたらGDというものでグラフ描画できそうだというのを知りました。

2012年6月21日木曜日

ようやく発見

どうにもgrepで入力ミスしているのかうまく検索できないときがとても多いですが、ようやくたどり着きました。
root@mzkw04nu:/home/htdocs/blog# grep "create_thumbnail" *.php
mob.php:       create_thumbnail(IMG_DIR.$img_name, IMG_DIR.$img_name, $w, $h, $ratio0);
mob.php:       create_thumbnail(IMG_DIR.$img_name, $thumb2img=IMG_DIR.THUMB2.$img_name, $w, $h, $ratio);
upload.php:    create_thumbnail($attached_file, $_attached, $w, $h, $ratio, $quality);
upload.php:       create_thumbnail($_attached, $thumb2img=str_replace(IMG_DIR,IMG_DIR.THUMB2,$_attached), $real_w, $real_h, $ratio2, $quality);
upload.php:     if(!is_file($thumb)) create_thumbnail($_attached, $thumb, $real_w, $real_h, $ratio_s1, $quality);
utils_admin.php:function create_thumbnail($input, $output, $w='', $h='', $ratio='', $quality=75){ // Revised in v.1.8.6
utils_admin.php:    if(!is_file($thumb = IMG_DIR.THUMB1.$_img)) create_thumbnail($img, $thumb, $size[0], $size[1], $ratio1);
utils_admin.php:     create_thumbnail($img, $thumb, $size[0], $size[1], $ratio2);
utils_admin.php:     if(!is_file($thumb)) create_thumbnail($imgfile, $thumb, $size[0], $size[1], $ratio);
utils_admin.php内でImageCopyResampledを行っているのを。(とてもいまさら(笑))
 //@ImageCopyResampled($img_out, $img_in, 0, 0, 0, 0, $_w, $_h, $w, $h) or ImageCopyResized($img_out, $img_in, 0, 0, 0, 0, $_w, $_h, $w, $h);
  ImageCopyResized($img_out, $img_in, 0, 0, 0, 0, $_w, $_h, $w, $h);
コードを直接変更してResampleはコメントアウトさせて見ました。
時間があればもうちょっと何かやってあげようかとは思います。

2012年6月19日火曜日

Motion用のビュワーを作成中

Motionで監視カメラを動作させ続けていますが今のところ全く問題はありません。
ただ、OpenWrtの配布形態のバイナリではMPEG変換がどうも行われないようなので再構築する必要がありそうです。

ですがどうもよく動作を理解していないので今のところWEB/PHPでとりあえず対応しています。

2つの環境で動作させているのですが、ルータではやはり処理能力が不足気味で画像も320×240で動作させて2FPS程度が限界のようです。(保存先をメモリーにすれば幾分早くなるのかもしれませんが必要以上のコマが必要とも思わないのでこれでいいのかなと。)

またファイル数が千単位に膨れ上がるとターミナルやSAMBA接続で厳しくなっているので今のところ月別のディレクトリの中にさらに日ごとに分けて保存するようにしています。
部屋で監視させているとだいたいこれで毎日2000~4000枚のJpeg画像が生成されています。

保存形態は当初から大体このような形で大丈夫かな?と言った程度です。(MPEG運用になればまた違った形になるかもしれませんが。

ざっとした雛形は1日で出来上がったのですが細かいところでいろいろと欲が出てきていていまのところサムネイル用の画像を作成させるかどうかで仕様を悩んでいるところです。

ppBlogで実感していたのですが、どうもルータに画像処理を行わせるとどうしても処理が重すぎてどうにもならない様でどうしたものかと。
PHPで画像ファイルを扱うのは非常に簡素化されているので工夫するにしても差ほど変わらないだろうというのが今のところの感触です。
たった320×240の画像から160×120のサムネイル画像(原画自体がサムネイルじゃないかと思いますけど(笑))を生成するのに処理してるのがわかるぐらい待たされました。
画像のリサイズを行う方法は2つあり、一つは全ピクセル情報をつかってのリサンプリングしリサイズを行う方法。もう一つは単純にピクセルを間引いてリサイズを行う方法。
WindowsXPのころからこの様な処理はどちらにしてもほとんどがハードウェアなどで処理されたりCPU自体の処理能力の向上によって体感速度はあまりかわらないものなのですが、ルータでは明らかに前者よりも単純に間引いてリサイズするほうが処理時間が短く済みます。
出来上がった画像は当然不自然にはなりますが処理時間とのトレードオフと考えれば十分考える余地があります。(このへんの処理もppBlogで手を加えると処理時間が短くサクサク動くようになるのかも?とかちょっと目論んでいますがどうなることやら(笑))

2012年6月2日土曜日

cal_days_in_month はどこで定義されているのだろう?

<?php
$num 
cal_days_in_month(CAL_GREGORIAN82003); // 31echo "2003 年 8 月の日数は $num 日です";?>
 
Fatal error: Call to undefined function cal_days_in_month() in /home/htdocs/test_cal.php on line 2
 ちょっと使いたかったんですが、見当たらないようです。
どこで定義されているんでしょうかねぇ?