All posts by chen
PHP(7) Log file with jpgraph for php7
サーバのメンテナンス、以前作ったjpgraphを利用した、Log file画像プログラムが機能しなくなって、白画面になった。
調べてみたら、2019年から、php5, php7.1はサポート外になり、古いバージョンのjpgraphは動作しなくなった。
急遽最新版のjpgraphをダウンロードして入れ替えたが、依然おかしい。
問題点:
- カラーは3色まで、それ以上しても緑のまま。
- markerが表示されない
- legend(凡例)にもmarkerが表示されない
以前正常に動作したプログラムだから、動かないと困る。
プログラムの書き方、そして jpgraph と php7関連情報を色々と調べても、わからない。
jpgraphは、php7に完全対応してないから、このような問題は発生する可能性がある。
PHP(6) Log file graph
ログファイルからデータの取得と描画
TinyWebDBに、センサーデータ収集ログを解析して、画像にした!表示したのでは、温度(最高、最低)、気圧、バッテリー電圧。
ハードウェアの制作はこちら
https://uc4.net/2018/04/02/wemos-d5-weather-bureau/
送信プログラムはこちら
https://github.com/edu2web/TinyWebDB-WeatherStation
今回は、受信データの描画方法を説明する。
- fileを配列に読み込む
- json_decodeでディコード
- 描画データ配列生成
- jpgraphで描画する
データの取得
ファイル名draw.phpとする。
<?php include ("./jpgraph/jpgraph.php"); include ("./jpgraph/jpgraph_line.php"); $tempers = file($_GET['logfile']); $p_time = 0; $datax = array(); // Local time p_time, "2001-04-01","2001-04-02","2001-04-03",... $datay = array(); // temperature p_low $data2y = array(); // temperature p_high $datap = array(); // pressure $datab = array(); // battery foreach($tempers as $temper) { list($dummy,$tagValue) = explode('--', $temper); $obj = json_decode($tagValue); $temp = round($obj->{'temperature'}, 2); $localt = $obj->{'localTime'}; $pressure = $obj->{'pressure_hpa'}; $battery = $obj->{'battery_Vcc'}; list($ldate,$ltime) = explode(' ', $localt); $p_time2 = $ldate . " " . substr($ltime, 0, 2); // Truncat to Hour if ($p_time2 != $p_time) { if ($p_time) { array_push( $datax, $p_time); array_push( $datay, $p_low); array_push( $data2y, $p_high); array_push( $datap, $pressure); array_push( $datab, $battery); // echo "$p_time, $p_low, $p_high <br>"; } $p_time = $p_time2; $p_high = $temp; $p_low = $temp; } else { $p_low = ($p_low > $temp or $p_low == 0) ? ($temp) : ($p_low); $p_high = ($p_high < $temp or $p_high == 0) ? ($temp) : ($p_high); } } array_push( $datax, $p_time); array_push( $datay, $p_low); array_push( $data2y, $p_high); array_push( $datap, $pressure); array_push( $datab, $battery); // data ready for JpGraph
データの描画
TinyWebDBに、センサーデータ収集ログを解析した画像でした!
PHP(5) Use JpGraph
JpGraphとは
JpGraphはAditus Consultingが開発しているグラフ生成ライブラリ。
JpGraphを利用することで、数行のコーディングで簡単に動的にグラフを生成することができる。
JpGraphダウントード
JpGraphのダウンロードは下記URLから行える。
http://jpgraph.net/download/
JpGraphインストール
PHPでグラフを出力する方法はいくつかあり、何れにしてもGDライブラリがインストールされていることが前提条件となっている。
この記事は、DreamHostで演習を前提とするので、GDライブラリがすでに用意されている。日本語の表示はフォントのインストールなど必要だが、省略する。そのためソースコードに日本語の表示に関連する箇所はコメントアウトする。
JpGraphはどこに設置しても動作する。
この演習では、jpgraphと言うフォルダに入れて、ソースから直接インクルードする。
// 折れ線グラフ描画に必要なライブラリ
include (“./jpgraph/jpgraph.php”);
include (“./jpgraph/jpgraph_line.php”);
JpGraphサンプル
折れ線グラフを生成するプログラムtest.php
<?php // 折れ線グラフ描画に必要なライブラリ include ("./jpgraph/jpgraph.php"); include ("./jpgraph/jpgraph_line.php"); // データ、凡例、描画色を準備 $data = array( 'data' => array( array(151, 170, 140, 116, 157), array(161, 147, 182, 105, 140), array(115, 110, 90, 93, 88), ), 'legends' => array('Tokyo', 'Akihabara', 'Ueno'), 'colors' => array('red', 'green', 'blue'), ); // グラフの描画先 $g = new Graph(400, 400); // サイズ $g->setScale('textlin'); // 目盛り // $g->title->setFont(FF_MINCHO, FS_NORMAL, 14); // タイトルフォント // $g->title->set('上半期 店舗別販売件数'); // タイトル // $g->legend->setFont(FF_MINCHO, FS_NORMAL, 14); // 凡例フォント // 配列から順に折れ線グラフを生成&キャンバスに追加 for ($i = 0; $i < count($data['data']); $i++) { $l[] = new LinePlot($data['data'][$i]); // データ $l[$i]->setLegend($data['legends'][$i]); // 凡例 $l[$i]->setColor($data['colors'][$i]); // 描画色 $g->add($l[$i]); // 追加 } // グラフを描画 $g->stroke();
作成方法は、
- グラフの描画キャンバスのGraphオブジェクトを生成
- 配列から順に折れ線グラフを生成
- LinePlotクラスを直接にaddメソッドでキャンバスのGraphオブジェクトに追加
- グラフを描画
参考
- https://www.buildinsider.net/web/bookphplib100/025
PHP(4) Search a tag
処理内容
tagを検索する実装
- tag Search form
- tag Search Action
- Search file database for a tag
- return value
検索フォーム
GetValueForm.phpと保存してください。
<h3> Search database for a tag</h3> <form action="GetValueAction.php" method="post" enctype=application/x-www-form-urlencoded> <p>Tag:<input type="text" name="tag" /></p> <input type="hidden" name="fmt" value="html"> <input type="submit" value="Get value"> </form>
検索Action
- tag Search Action
- Search file database for a tag
- return value
GetValueAction.phpと保存してください。
// JSON_API , Post Parameters : tag $tagName = $_REQUEST['tag']; $tagValue = ''; is_file($tagName . ".txt") && ($tagValue = file_get_contents($tagName . ".txt")); header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Content-type: application/json'); echo json_encode(array( "VALUE", $tagName, $tagValue ));
PHP(3) Store file
処理内容
受け取ったデータは、2種類のファイルに保存する。
- tag-valueペアをファイルに保存する。
- ログファイル
accept form date and store to file.
- Store a tag-value pair in the file
- Append log on logfile
tag-valueペアをファイルに保存する
受信したtag-valueペアをファイルに保存する。ファイル名はtagNameそのまま、拡張子はtxtになる。
[tagName].txt
ソースコード
$fh = fopen($tagName . “.txt”, “w”) or die(“check file write permission.”);
fwrite($fh, $tagValue);
fclose($fh);
ログを保存する
error_log関数を利用して、ログファイルを生成する。
$file_name = ‘tinywebdb_’ . date(‘Y-m-d’) . ‘.log’;
error_log($log_message, 3, $file_name);
処理をまとめる
一連の処理を StoreAValueAction,php と保存してください。
<?php // JSON_API , Post Parameters : tag,value $tagName = $_POST['tag']; $tagValue = $_POST['value']; $apiKey = ''; // $_POST['apikey']; $log_message = sprintf("%s:%s\n", date('Y-m-d H:i:s'), "storeavalue: ($apiKey) $tagName -- $tagValue"); echo $log_message; $fh = fopen($tagName . ".txt", "w") or die("check file write permission."); fwrite($fh, $tagValue); fclose($fh); $file_name = 'tinywebdb_' . date('Y-m-d') . '.log'; error_log($log_message, 3, $file_name); ?>
受け取ったデータは表示、そしてファイルに保存されるはず。
PHP(2) Form Action
このシリーズは、TinyWebDB の実装を目的とする。
TinyWebDBとは
まずTinyWebDB のリポジトリを確認。
https://github.com/edu2web/tinywebdb-php
TinyWebDB Protocol:
Action | URL | Post Parameters | Response |
---|---|---|---|
Get Value | {ServiceURL}/getvalue | tag | JSON: [“VALUE”,”{tag}”, {value}] |
Store A Value | {ServiceURL}/storeavalue | tag,value | JSON: [“STORED”, “{tag}”, {value}] |
Store A Value Form
Store A Valueを実装するため、tag-value pair Formをコーディングする。StoreAValueForm.php と保存してください。
<h3>Store a tag-value pair in the databse</h3> <form action="StoreAValueAction.php" method="post" enctype=application/x-www-form-urlencoded> <p>Tag: <input type="text" name="tag" size="30"/></p> <p>Value: <input type="text" name="value" size="30"/></p> <input type="hidden" name="fmt" value="html"> <input type="submit" value="Store a value"> </form>
Store A Value Action
フォームに入力された値のPHPによる取得方法の実装。下記のコードを StoreAValueAction,php と保存してください。
<?php // JSON_API , Post Parameters : tag,value $tagName = $_POST['tag']; $tagValue = $_POST['value']; $apiKey = ''; // $_POST['apikey']; $log_message = sprintf("%s:%sn", date('Y-m-d H:i:s'), "storeavalue: ($apiKey) $tagName -- $tagValue"); echo $log_message; ?>
受け取ったデータは表示されるはず。
PHP(1) Hello
PHP勉強の本
[amazonjs asin=”4798151645″ locale=”JP” ]
PHPの基本的な書き方
以下の内容で hello.php という名前のファイルを作成。
<html> <head> <title>PHP Test</title> </head> <body> <?php echo '<p>Hello World</p>'; ?> </body> </html>
このサンプルではHTMLファイルの中にPHPのプログラムを埋め込んで、echoでブラウザに文字列を出力しています。
サーバに転送
Web サーバーのルートディレクトリ (DOCUMENT_ROOT) に置いてください。
サーバに転送はftp(filezilla)を利用
https://ja.osdn.net/projects/filezilla/releases/69900
ZIP版をダウンロードして、解凍してください。
動作確認
WEBブラウザで実行すると「Hello World」が出力されます。
文法概要
変数
変数とはプログラムで扱いデータを一時的に保存する箱のようなものです。
変数はそれぞれのプログラミング言語で使用する予約語以外なら好きな名前を付けられます。
PHPで変数を指定するときは、ドル記号($)のあとに変数名を記述します。
コメント
プログラムにおいてコメントは、ファイル名のバージョンやクラス名、関数名を記述したり、処理内容の始まりや終わりを記述するために使います。
複雑な処理でもコメントを確認すれば処理の内容がわかるようになるなど、大きなメリットがあります。
コメントには行頭に「//」を付けるスタイルや「/* */」で囲む方法、行頭に「#」を付ける方法などがあります。
if文
if文はほとんどのプログラミング言語で使われる条件式で、「もし◯◯だったら、◯◯の処理を実行する」といった条件分岐を記述するのに便利な構文です。
for文
繰り返し処理を実行するためにはfor文を実行します。
PHPマニュアル
Coding at Mac OSX
Mac OSX のローカル環境でApache, MySQL, PHP 環境が試したくなり、VMなどいろいろ便利なパッケージがありそうだが、一番基本な方法で揃いたい。
Apache
http://localhost/
PHP
php有効にする
なう、/privateは隠しフォルダのため、Finderで探して修正する場合、以下のキーを同時に押下し、隠しフォルダ・隠しファイルが表示するように。
[command] + [shift] + [.(ドット)]
上記のショートカットキーで表示・非表示を切り替えられる。
info.phpでphp動作確認
Filename: info.php
<?php
// Show all information, defaults to INFO_ALL
phpinfo();
?>
MySQL
MySQL のインストール方法は複数あり、ここではbrew でインストールと本家からダウンロード してインストール方法を紹介
brew でインストール
OSXにHomebrewをインストールする
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
ローカルの環境(Mac)に MySQL をインストール
$ brew install mysql
MySQLを起動する
$ mysql.server start
Starting MySQL
. SUCCESS!
ダウンロードしてインストール
WordPressインストール
wp-cli install
$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 4487k 100 4487k 0 0 956k 0 0:00:04 0:00:04 –:–:– 911k
$ chmod +x wp-cli.phar
$ mv wp-cli.phar /usr/local/bin/wp
$ wp –info
OS: Darwin 17.7.0 Darwin Kernel Version 17.7.0: Thu Jun 21 22:53:14 PDT 2018; root:xnu-4570.71.2~1/RELEASE_X86_64 x86_64
Shell: /bin/bash
PHP binary: /usr/bin/php
PHP version: 7.1.16
php.ini used:
WP-CLI root dir: phar://wp-cli.phar
WP-CLI vendor dir: phar://wp-cli.phar/vendor
WP_CLI phar path: /Users/chen
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 1.5.1
WordPressインストール
Creating directory ‘/Library/WebServer/Documents/wordpress/’.
Downloading WordPress 4.9.7 (ja)…
md5 hash verified: b4aea3d0f3353ff1bb5ccdb246732574
Success: WordPress downloaded.
sh-3.2#
sh-3.2# wp core config –dbname=wp_test –dbuser=root –dbpass= –dbhost=localhost –allow-root –path=wordpress
Success: Generated ‘wp-config.php’ file.
データベース作成
sh-3.2# mysqladmin -u root create wp_test
sh-3.2#
WordPressセットアップ
http://localhost/wordpress/
参考資料
- https://coolestguidesontheplanet.com/get-apache-mysql-php-and-phpmyadmin-working-on-macos-sierra/
-
http://wordpress.hitsuji.me/category/web-development-on-mountain-lion/ — Mountain LionにWeb開発環境を構築する
-
http://wordpress.hitsuji.me/web-development-on-mavericks/ — MavericksにWeb開発環境を構築する
Dreamhost Hosting
DreamHostには、One-Click-Installsという機能があり、WordPressとMySQLを10分程度で簡単にインストールすることができる。
1)サイト追加
新しいサイトにWordPressインストールするなら、まずサイトを追加する。
管理画面から「Manage Domains」を開き、「Add Hosting to a Domain / Sub-Domain」をクリックして追加する。ドメイン名など適切なパラメータを設置し、「Fully host this domain」でサイト作成。
2)「One-Clock Installs」選択
「One-Clock Installs」ページで「WordPress」を選ぶ。
3)インストール先のサイト選択
先ほど追加したサイトのドメイン名を選ぶ、インストールパス、DB名はそのままでも良い。「Install it for me now!」をクリック。インストール結果メール待ち。
4)パスワード再設定
インストール結果メールには、パスワードリセットするリンクがついてるので、クリックしてパスワード再設定する。
5)サイトにログイン
メールアドレスと再設定したパスワードでサイトにログイン。