docomoフィーチャーフォンからVAIO PHONE Androidへの移行時注意
過去に所有していたガラケーを使い廻して何とか運用していたが、
いよいよ、具合が悪くなってきたので、今流行のDSDSをやってみようかな
と思い、VAIO PHONE Aを購入。
本体が届いたので、早速、SIMカードをmicro-simに交換しに行った。
docomoさんはxiのdocomo携帯を購入しないと、あくまでガラケーでの
通話契約になるらしい。(意味わからんが・・・。)
そのため、通話料金は
¥2,200-(カケホーダイ ケータイ)
+¥500- (指定外デバイス料)これ意味わかんないよね?
計¥2,700-
これを機に、キャリアメールは止めました。
(¥300/月のiモードを解約)
ドコモさん、もう、指定外デバイス料金なんて取っている時代じゃないですよ。
と思うけど・・・。
ドコモのアドバンテージは裾野が広い事なんですよね。
auだと、CDMAがネックになってDSDSできる機種自体が選べない状態だし・・・。
因みに、本日持ち込んだドコモショップの男の子は自社商品でないから、この仕様がわかってなかったみたい。
simカードのサイズ変更が終わったから、帰ろうと思ったところ、
simカードの確認をしてくれと言われたので、刺してみたが、通話が出来ない。
しきりに「モバイルネットワークが利用できません。」とエラーを返してくる。
その場で、ちょっと弄ったけど、解決せず。
「ドコモショップにある動作試験用のガラケー貸してよ、micro-simで通話できるの確認出来ればもういいから」
と言っているのに、全く貸してくれない。
「持ち込み機種は自己責任ですので・・・。」も始まってかなり面倒な感じだった。
「simカードはちゃんと認識しているんでしょ?」
と聴いたところ、「大丈夫です」との事だったので、
じゃぁ、通話の動作確認しなくても良いよね?
と云うことにして帰りました。
なお、会社にあった、micro-simの端末に差し込んだら認識したので、
良かったよかった。
少し調べた所、
この機種は、simカードを
・4G/3G/2G(通話・データ通信)
・3G/2G(通話専用)
として識別させるようですが、一枚しか刺さないと4G/3G/2G(通話・データ通信)
の区分を強制的に設定し、データ通信を強要してくる仕様のようです。
通話のみにしたい場合は、
simカードを二枚刺し、ダミー側を
・4G/3G/2G(通話・データ通信)として認識させる必要があるようです。
FOMA(3G)の回線だけでスマートフォンを使う可能性は
マイノリティってことですね・・・。(私がやっている事はかなりマニアックなのか・・・。)
下手に3G/2Gの通話のみを選択できるようにすると、ライトユーザがデータ通信出来ないとクレーム付けてくる対策だろうか?
そもそもDSDS環境でスマホを持とうという人間は、端からマイノリティな気が
するので、せめて、VAIO PHONE Aに「良くある質問」位を作って
載せてあげて欲しいかな?
結論
VAIO Phone A FOMA-SIMで運用するには、ダミーでもなんでもいいので、simを2枚刺して、通話専用にFOMAカード(3G)を当てれば、通話専用で使えます。
2017/05/20
2017/03/21
rsync
LastBackup=`ls -t $BackupDIR | grep backup | tail -1`
ディレクトリ名にbackupが入っていると、ソートが上手くいかないようで、
tailが最新の日付を返していない。
そのため、--link-destのバックアップがハードリンクになっていない。
--link-dest の動き
コピー元のディレクトリ ⇒ $NewBackup
但し コピー元のディレクトリ の内、LastBackup にあるものは、ハードリンクを生成する。
つまり、容量が増えない。
スクリプトシェル
#!/bin/sh
# バックアップ先ディレクトリ指定
BackupDIR=/home/*****/dailyBackup
mkdir -p $BackupDIR
# バックアップログ定義
BackupLog=/home/*****/log/rsync_backup.log rm -f $BackupLog
touch $BackupLog
chmod 600 $BackupLog
#エラーチェック
error_exit () {
exit 1
}
#バックアップ実行
echo "`date` backup start" >> $BackupLog
LastBackup=`ls -t $BackupDIR | grep backup | tail -1``ls -t $BackupDIR tail -1`
NewBackup=`date +%Y%m%d`backup ←これを消す。
mkdir $BackupDIR/$NewBackup
rsync -rlptv --ignore-existing --whole-file --link-dest=../$LastBackup /コピー元のディレクトリ/ $BackupDIR/$NewBackup >> $BackupLog 2>&1
# バックアップ先ディレクトリ指定
BackupDIR=/home/*****/dailyBackup
mkdir -p $BackupDIR
# バックアップログ定義
BackupLog=/home/*****/log/rsync_backup.log rm -f $BackupLog
touch $BackupLog
chmod 600 $BackupLog
#エラーチェック
error_exit () {
exit 1
}
#バックアップ実行
echo "`date` backup start" >> $BackupLog
LastBackup=
NewBackup=`date +%Y%m%d`
mkdir $BackupDIR/$NewBackup
rsync -rlptv --ignore-existing --whole-file --link-dest=../$LastBackup /コピー元のディレクトリ/ $BackupDIR/$NewBackup >> $BackupLog 2>&1
code=$?
if [ $code -ne 0 ]; then
cat $BackupLog | mail -s "BACKUP NG CODE IS $code" root
rm -rf $BackupDIR/$NewBackup
error_exit
fi
echo "`date` backup end" >> $BackupLog
2017/02/14
YAMAHA RTX-1200 システムlog保存
大手企業から個人情報の流失問題が発生してしまった事を受け、国が個人情報保護の対策ついてのアンケートを実施してきた。
この中に外部へのアクセスlogの保存等という項目があったので、実装してみる事にする。
SYSLOGのバックアップを外部サーバに行う場合と、USB等の外部メモリに行う場合が選択できるようなので、まずはUSBでいいかな?と云うことで、その辺にあったbuffaloさんの8GBのUSBフラッシュメモリを接続してみた。
systemLogの外部メモリへの保存方法
telnetで接続して、administratorになってから行う。
usb1にrt_syslog.logという名前で保存していく。
ファイルサイズは、自動で割り当てられるらしく、ファイルサイズはフォーマットをfat32にしたため、
最大でも4GBだが、外部メモリの空き容量をEn、config保存用の領域をCn、mainファイル用の領域をMn、
またbackupファイル用の領域をBnとすると、各領域のサイズはおよそ以下のような計算らしい。
Cn: 1MB、もしくはEn/10のうち、どちらか大きい方。但し、En/10の上限は100MB
En=7,536,600KB ⇒ 最大値の 100,000KB
Bn=3,718,300KB
二つ目のファイルは
En=3,818,300KB ⇒ 最大値の100,000KB
Bn=1,859,150KB
となってくようだ。
容量が一杯になると、古いのを消すらいが、およそ一週間で8GBを使い切る予測なので、経過を確認したい。
size date time sname longname
--------- ----------- -------- ------------ --------------------------------
2910179 Feb-14-2017 17:36:34 RT_SYS~1.LOG rt_syslog.log
took 0 sec
こんな感じで表示される。
この中に外部へのアクセスlogの保存等という項目があったので、実装してみる事にする。
SYSLOGのバックアップを外部サーバに行う場合と、USB等の外部メモリに行う場合が選択できるようなので、まずはUSBでいいかな?と云うことで、その辺にあったbuffaloさんの8GBのUSBフラッシュメモリを接続してみた。
systemLogの外部メモリへの保存方法
telnetで接続して、administratorになってから行う。
外部メモリへの書き込み設定
# external-memory syslog filename usb1:rt_syslog.logusb1にrt_syslog.logという名前で保存していく。
ファイルサイズは、自動で割り当てられるらしく、ファイルサイズはフォーマットをfat32にしたため、
最大でも4GBだが、外部メモリの空き容量をEn、config保存用の領域をCn、mainファイル用の領域をMn、
またbackupファイル用の領域をBnとすると、各領域のサイズはおよそ以下のような計算らしい。
Cn: 1MB、もしくはEn/10のうち、どちらか大きい方。但し、En/10の上限は100MB
Bn: (En - Cn)/2
Mn: En - Cn - Bn
En=7,536,600KB ⇒ 最大値の 100,000KB
Bn=3,718,300KB
二つ目のファイルは
En=3,818,300KB ⇒ 最大値の100,000KB
Bn=1,859,150KB
となってくようだ。
容量が一杯になると、古いのを消すらいが、およそ一週間で8GBを使い切る予測なので、経過を確認したい。
USB1に保存されているファイルの確認をするコマンドライン
# show file list usb1:/size date time sname longname
--------- ----------- -------- ------------ --------------------------------
2910179 Feb-14-2017 17:36:34 RT_SYS~1.LOG rt_syslog.log
took 0 sec
こんな感じで表示される。
USBメモリの内容を確認したい場合
# show status external-memory
Host controller: Running
Syslog profiles
Syslog file name: usb1:rt_syslog.log [Writable]
Backup file name: usb1:rt_syslog.bak
Maximum file size: 965312512 bytes
Buffering: OK
Statistics profiles
Syslog file name: [Not specified]
Syslog statistics
Recorded times: 2472 (TIMER:2472, FULL:0)
Discarded times: 1 (FULL:0)
Dropped lines: 1
File Operation statistics
Syslog aborted: 1
Open failed: 0
Backup created: 0
Backup failed: 0 (DELETE:0, RENAME:0, CLOSE:0)
Write error: 0
Write retry failed: 0
usb1
Bus power feed: ON
Attached device
Device name: 0x0098
Vendor name: 0x0411
Maximum transfer rate: 480Mbps(High speeed)
Memory capacity: 7536600 KB
MASS Storage Class Transmit statistics
Timeout: 0
Stalled: 0
Canceled: 0
I/O error: 0
Unknown: 0
sd1
Bus power feed: ON
Attached device Not attached
USBを取り外す場合
RTX-1200本体のUSBの刺さっている横のボタンを2秒以上押して、
音が鳴ったら取り外してOK。
2017/01/24
rsync
2017年1月23日記載
rsyncで差分を止めていたのだが、いよいよHDDの容量を逼迫してきた。そこで、
--ignore-existing コピー先に存在するファイルは更新しない
こいつを嚙ましてみる。
LastBackup=`ls -t $BackupDIR | grep backup | head -1`
一番古いファイルとの差分を取っていたが、最新のものとの比較に修正
LastBackup=`ls -t $BackupDIR | grep backup | tail -1`
上手い事動きそうなので、定期的なフルバックアップをどのタイミングで行うか?
は今年の課題にしたいと思う。
スクリプトシェル
は今年の課題にしたいと思う。
スクリプトシェル
#!/bin/sh
# バックアップ先ディレクトリ指定
BackupDIR=/home/*****/dailyBackup
mkdir -p $BackupDIR
# バックアップログ定義
BackupLog=/home/*****/log/rsync_backup.log rm -f $BackupLog
touch $BackupLog
chmod 600 $BackupLog
#エラーチェック
error_exit () {
exit 1
}
#バックアップ実行
echo "`date` backup start" >> $BackupLog
LastBackup=`ls -t $BackupDIR | grep backup | tail -1`
NewBackup=`date +%Y%m%d`backup
mkdir $BackupDIR/$NewBackup
rsync -rlptv --ignore-existing --whole-file --link-dest=../$LastBackup /home/比較元のディレクトリ/ $BackupDIR/$NewBackup >> $BackupLog 2>&1
# バックアップ先ディレクトリ指定
BackupDIR=/home/*****/dailyBackup
mkdir -p $BackupDIR
# バックアップログ定義
BackupLog=/home/*****/log/rsync_backup.log rm -f $BackupLog
touch $BackupLog
chmod 600 $BackupLog
#エラーチェック
error_exit () {
exit 1
}
#バックアップ実行
echo "`date` backup start" >> $BackupLog
LastBackup=`ls -t $BackupDIR | grep backup | tail -1`
NewBackup=`date +%Y%m%d`backup
mkdir $BackupDIR/$NewBackup
rsync -rlptv --ignore-existing --whole-file --link-dest=../$LastBackup /home/比較元のディレクトリ/ $BackupDIR/$NewBackup >> $BackupLog 2>&1
code=$?
if [ $code -ne 0 ]; then
cat $BackupLog | mail -s "BACKUP NG CODE IS $code" root
rm -rf $BackupDIR/$NewBackup
error_exit
fi
echo "`date` backup end" >> $BackupLog
2016/09/22
受信メール設定 dovcot
サーバを移行したあと、メールを使うユーザを追加した際に
受信サーバにアクセスできない というエラーが帰って来た。
原因が分かったので、忘れないうちに残す
dovcotの制御が原因だった。
ユーザを作成
useradd -m [ユーザ名]
passwd [ユーザ名]
2回入力して作成する。
var/spool/mail/[ユーザ名]
このファイルのパーミッションを660(恐らくデフォルト)から600に変える
こうしないと、応答に答えてくれない仕様の用だ。
以前の設定は、
660でも問題なく動いており、
応答もしてくれているようなので、
これに気づかずに悩んでしまった。
受信サーバにアクセスできない というエラーが帰って来た。
原因が分かったので、忘れないうちに残す
dovcotの制御が原因だった。
ユーザを作成
useradd -m [ユーザ名]
passwd [ユーザ名]
2回入力して作成する。
var/spool/mail/[ユーザ名]
このファイルのパーミッションを660(恐らくデフォルト)から600に変える
こうしないと、応答に答えてくれない仕様の用だ。
以前の設定は、
660でも問題なく動いており、
応答もしてくれているようなので、
これに気づかずに悩んでしまった。
2016/09/06
サーバ移転で詰まったこと php関連
WEBサーバを移転した際に、嵌ってしまった原因を列挙しておく。
次回の更新が何年後か分からないが、忘備録
PHPのこと
/etc/php.ini
phpが稼働したら、
info.phpファイルを作り、設定確認
infophp();
?>
memory_limit (メモリ使用量の上限)
post_max_size (POSTデータの最大サイズ ※1回のアップロードファイルすべての合計サイズ)
↑今回、これを確認せず、8MBの壁にぶち当たり嵌った・・。
upload_max_filesize (1ファイルあたりの最大アップロードサイズ)
この辺の数値が小さいと、画面が白いままになったり、
IF関数等で正しく動かない。
反映は
# systemctl restart httpd.service
Postfixのこと
設定されているサイズを確認
# postconf | grep size_limit
body_checks_size_limit = 51200
bounce_size_limit = 50000
header_size_limit = 102400
postconf: warning: /etc/postfix/main.cf: unused parameter: mtp_sasl_security_options=
mailbox_size_limit = 此処をでかくする 例えば1GB 1073741824
message_size_limit = 此処を↑は小さくする 例えば100MB 104857600
反映は
# systemctl restart postfix.service
phpで作ったメールフォームで嵌った。
次回の更新が何年後か分からないが、忘備録
PHPのこと
/etc/php.ini
phpが稼働したら、
info.phpファイルを作り、設定確認
infophp();
?>
memory_limit (メモリ使用量の上限)
post_max_size (POSTデータの最大サイズ ※1回のアップロードファイルすべての合計サイズ)
↑今回、これを確認せず、8MBの壁にぶち当たり嵌った・・。
upload_max_filesize (1ファイルあたりの最大アップロードサイズ)
この辺の数値が小さいと、画面が白いままになったり、
IF関数等で正しく動かない。
反映は
# systemctl restart httpd.service
Postfixのこと
設定されているサイズを確認
# postconf | grep size_limit
body_checks_size_limit = 51200
bounce_size_limit = 50000
header_size_limit = 102400
postconf: warning: /etc/postfix/main.cf: unused parameter: mtp_sasl_security_options=
mailbox_size_limit = 此処をでかくする 例えば1GB 1073741824
message_size_limit = 此処を↑は小さくする 例えば100MB 104857600
反映は
# systemctl restart postfix.service
phpで作ったメールフォームで嵌った。
2016/08/09
postfixの設定など
社員用にPHPプログラム運用兼ファイルサーバを設置している。
いままでは、ローカルなメールの遣り取りだけで済んでいたのだが
どうしても、外部のメールサーバを経由して外部ユーザにメールを送らないといけなくなった。
ローカルの設定は結構いい加減にやっており、
外部にメールを送ろうとすると、rejectされてしまう。
CentOS7.x はpostfixが推奨されているので、設定することにした。
はじめに
postfixが動いているか?確認
# systemctl status postfix.service
今回は、phpが絡むので、設定する。
/etc/php.ini
L980位の
[mail function]
SMTP = localhost
smtp_port = 25
sendmail_from = なんかそれなに名前を付けておく。
※SMTP認証を使うときは、もう少し追記があるらしい。(今回はいらない)
# systemctl restart httpd.service
PHPの設定有効
つづいてpostfixの設定
前のかなりラフなものをちゃんとする。
/etc/postfix/main.cf
L60
mail_owner = postfix 別のユーザに変更するときは、書き換える(今回不要)
myhostname = mail.xxx.co.jp 等
mydomain = xxx.co.jp 等
inet_interfaces = localhost 受信設定。受信しないので、localhostで良いが、ルータ等でセキュア環境にしてあるならば、allでもOKと思われる。
inet_protocols = ipv4 おまじない。ipv6をkillしている際は、記載しないと動かないらしい。
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain ←註
mynetworks = XXX.XXX.XXX.0/24, 127.0.0.0/8 許容するネットワークの範囲を記載
mydestination に $mydomain を記載する際の注意
内部用のサーバから外部用のサーバにリレーする際に、
内部的には固定IP割り当てて、ルータで締めて、トンネル作って、そのアドレスを許容すればいいのだが、そこから外部に送る際、最近のレンタルサーバ等は、domainがいい加減だと、rejectしてくる。
そこで、$mydomainには、送信する際に問い合わせを受けても問題ないdomainを記載しておくのだが、mydestination に $mydomain を安易に書き加えると、外部サーバと内部サーバに同一の
アカウントがいる場合は、そのユーザに関しては、ローカルサーバ内にメールを送ってしまい。
本来の$mydomain に送るべきものが全く送れない状態になってしまうので、
注意が必要。
外部サーバを使ってメールを送信するような内部サーバのpostfixの設定で、
よほど特殊(たとえば内部で擬似的に運用する等の)な環境でない限り、
記載する際は注意が必要。
※SMTP認証を使う場合は、この辺も有効にする。
# In the case of SMTP, specify a domain, host, host:port, [host]:port,
# [address] or [address]:port; the form [host] turns off MX lookups.
#
# If you're connected via UUCP, see also the default_transport parameter.
#
#relayhost = $mydomain
#relayhost = [gateway.my.domain]
#relayhost = [mailserver.isp.tld]
#relayhost = uucphost
#relayhost = [an.ip.add.ress]
その他はそのままで大丈夫と思われる。
# systemctl restart postfix.service
再起動
# systemctl status postfix.service
エラーが無いか確認する。
この設定で、問題なく中継が出来た。
今後Gmailやその他のメールサーバと絡めたりしたいときには、
SMTP認証が必要になる。(今は止めておく)
いままでは、ローカルなメールの遣り取りだけで済んでいたのだが
どうしても、外部のメールサーバを経由して外部ユーザにメールを送らないといけなくなった。
ローカルの設定は結構いい加減にやっており、
外部にメールを送ろうとすると、rejectされてしまう。
CentOS7.x はpostfixが推奨されているので、設定することにした。
はじめに
postfixが動いているか?確認
# systemctl status postfix.service
今回は、phpが絡むので、設定する。
/etc/php.ini
L980位の
[mail function]
SMTP = localhost
smtp_port = 25
sendmail_from = なんかそれなに名前を付けておく。
※SMTP認証を使うときは、もう少し追記があるらしい。(今回はいらない)
# systemctl restart httpd.service
PHPの設定有効
つづいてpostfixの設定
前のかなりラフなものをちゃんとする。
/etc/postfix/main.cf
L60
mail_owner = postfix 別のユーザに変更するときは、書き換える(今回不要)
myhostname = mail.xxx.co.jp 等
mydomain = xxx.co.jp 等
inet_interfaces = localhost 受信設定。受信しないので、localhostで良いが、ルータ等でセキュア環境にしてあるならば、allでもOKと思われる。
inet_protocols = ipv4 おまじない。ipv6をkillしている際は、記載しないと動かないらしい。
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain ←註
mynetworks = XXX.XXX.XXX.0/24, 127.0.0.0/8 許容するネットワークの範囲を記載
mydestination に $mydomain を記載する際の注意
内部用のサーバから外部用のサーバにリレーする際に、
内部的には固定IP割り当てて、ルータで締めて、トンネル作って、そのアドレスを許容すればいいのだが、そこから外部に送る際、最近のレンタルサーバ等は、domainがいい加減だと、rejectしてくる。
そこで、$mydomainには、送信する際に問い合わせを受けても問題ないdomainを記載しておくのだが、mydestination に $mydomain を安易に書き加えると、外部サーバと内部サーバに同一の
アカウントがいる場合は、そのユーザに関しては、ローカルサーバ内にメールを送ってしまい。
本来の$mydomain に送るべきものが全く送れない状態になってしまうので、
注意が必要。
外部サーバを使ってメールを送信するような内部サーバのpostfixの設定で、
よほど特殊(たとえば内部で擬似的に運用する等の)な環境でない限り、
記載する際は注意が必要。
※SMTP認証を使う場合は、この辺も有効にする。
# In the case of SMTP, specify a domain, host, host:port, [host]:port,
# [address] or [address]:port; the form [host] turns off MX lookups.
#
# If you're connected via UUCP, see also the default_transport parameter.
#
#relayhost = $mydomain
#relayhost = [gateway.my.domain]
#relayhost = [mailserver.isp.tld]
#relayhost = uucphost
#relayhost = [an.ip.add.ress]
その他はそのままで大丈夫と思われる。
# systemctl restart postfix.service
再起動
# systemctl status postfix.service
エラーが無いか確認する。
この設定で、問題なく中継が出来た。
今後Gmailやその他のメールサーバと絡めたりしたいときには、
SMTP認証が必要になる。(今は止めておく)
2016/07/08
PHP 複数行を持つ標準入力の配列化
複数行を持つ標準入力の配列化 <?php $input = trim(fgets(STDIN)); while ($input){ $array[] = $input; $input = trim(fgets(STDIN)); } これで、$arrayに標準出力の複数行で書かれたものを 配列に出来る。 一列づつ検証をする場合は、 while($input=fgets(STDIN)){ for ($i = 1; $i <= $input-1 ; $i++) { この中で検証する; } このように処理すれば良い。 スキルアップの為、codeIQとかで勉強を始めたが、 標準入力の取り扱い方が良くわからずに困っておった。 プログラム自体は掛けるのだが、 標準入力の配列化が出来ず、解けない問題があったので、 いろいろ調べた結果 こうなった。
2016/06/27
javascipt datePicker 営業日の制御
打ち合わせ希望日をカレンダーで選択してもらってフォームで予約を入れてもらう。 このような制御が必要になった。 当初<input type="date">で良いかな? と思ったが、ユーザがPC:スマホで7対3位で、まだまだPCが有利なので、 datepickerを使うことにした。 その際に、 ・土日は選択させない。 ・4営業日以降しか選択できない。 という条件を付けたい。 土日は選択させない事は先人の知恵で問題なく解決。 問題は、4営業日以降の縛り datepickerの変数だけでは処理できなかったので、 起算点を今日にして、今日の曜日を取得し、 datepikcerのオプション minDate で制御した。 以下ソース。 <HEAD> <META HTTP-EQUIV=Content-Type CONTENT=text/html;CHARSET=UTF-8> <TITLE>アポどり用フォーム</TITLE> <!-- jQuery--> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <!-- jQuery-UI --> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script> <!-- jQuery-UI-datepicker --> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/i18n/jquery.ui.datepicker-ja.min.js\"></script> <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/redmond/jquery-ui.css\" > <script> <!-- 今日の曜日を抽出--> var dateObj = new Date() ; var weekDayList = [0,1,2,3,4,5,6] ; var todayWeekDay = weekDayList[ dateObj.getDay() ] ; <!--datepicker 定義--> $(function(){ // Datepicker の呼び出し $( "#datepicker" ).datepicker({onClose: function(dateText, inst) { //プラン番号の取得 //日付オブジェクトの作成 var date = new Date(dateText); var weekDay = parseInt(date.getDay()); var check = false; if(weekDay > 0 && weekDay < 6){ check = true; } if(!check){ alert("この日は選択できません"); $( "#datepicker" ).val(''); } }}); //判別4(木曜)、5(金曜)は+6day それ以外は+4dayでOK if(todayWeekDay == 4 || todayWeekDay == 5){ $( "#datepicker" ).datepicker( "option", 'minDate', "+6d" ); $( "#datepicker" ).datepicker( "option", 'maxDate', "2m" ); } else{ $( "#datepicker" ).datepicker( "option", 'minDate', "+4d" ); $( "#datepicker" ).datepicker( "option", 'maxDate', "2m" ); } } ); </script> </HEAD> <BODY> <FORM ACTION="mail.php" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded" > <input type="text" name="date1" class="form_text-small\" id="datepicker" readonly="readonly"> </FORM> こんな感じで実装すればよい。 $( "#datepicker" ).datepicker( "option", 'minDate', "+4d" ); $( "#datepicker" ).datepicker( "option", 'maxDate', "2m" ); 肝はこの部分。
2016/05/24
CentOS7 ssh2_connectを実装する
正規の方法でインストールを試みるが、
#pecl install ssh2
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/msql.so' - /usr/lib64/php/modules/msql.so: cannot open shared object file: No
such file or directory in Unknown on line 0
PHP Warning: Module 'mbstring' already loaded in Unknown on line 0
PHP Warning: Module 'pgsql' already loaded in Unknown on line 0
Failed to download pecl/ssh2 within preferred state "stable", latest release is version 0.12, stability "beta", use "channel://pecl.php.net/ssh2-0.12" to install install failed
エラー
ネイティブな解説ページが有ったので、
参考にしながら実装までのオボエガキ
先ずは、yumを最新にする。
# yum update
# yum install make gcc libssh2 php-deve
# pecl install -f ssh2
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/msql.so' - /usr/lib64/php/modules/msql.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: Module 'mbstring' already loaded in Unknown on line 0
PHP Warning: Module 'pgsql' already loaded in Unknown on line 0
WARNING: failed to download pecl.php.net/ssh2 within preferred state "stable", will instead download version 0.12, stability "beta"
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading ssh2-0.12.tgz ...
Starting to download ssh2-0.12.tgz (26,223 bytes)
.........done: 26,223 bytes
6 source files, building
running: phpize
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
libssh2 prefix? [autodetect] : ←ここはブランクのまま エンターした。
Build process completed successfully
Installing '/usr/lib64/php/modules/ssh2.so'
install ok: channel://pecl.php.net/ssh2-0.12
configuration option "php_ini" is not set to php.ini location
You should add "extension=ssh2.so" to php.ini
となるので、
# echo "extension=ssh2.so" > /etc/php.d/ssh2.ini
httpdを再起動させる。
# systemctl restart httpd.service
# php -m | grep ssh2
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/msql.so' - /usr/lib64/php/modules/msql.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: Module 'mbstring' already loaded in Unknown on line 0
PHP Warning: Module 'pgsql' already loaded in Unknown on line 0
ssh2
phpinfo() で確認すると
となり、実装完了。
実装方法
<?php
$connection = ssh2_connect('アドレス', 22);
ssh2_auth_password($connection, 'ログインユーザ名', 'ログインパスワード');
ssh2_scp_send($connection, '../転送元ファイル', '転送先ディレクトリ/転送するファイル', 0644);
?>
#pecl install ssh2
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/msql.so' - /usr/lib64/php/modules/msql.so: cannot open shared object file: No
such file or directory in Unknown on line 0
PHP Warning: Module 'mbstring' already loaded in Unknown on line 0
PHP Warning: Module 'pgsql' already loaded in Unknown on line 0
Failed to download pecl/ssh2 within preferred state "stable", latest release is version 0.12, stability "beta", use "channel://pecl.php.net/ssh2-0.12" to install install failed
エラー
ネイティブな解説ページが有ったので、
参考にしながら実装までのオボエガキ
先ずは、yumを最新にする。
# yum update
# yum install make gcc libssh2 php-deve
# pecl install -f ssh2
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/msql.so' - /usr/lib64/php/modules/msql.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: Module 'mbstring' already loaded in Unknown on line 0
PHP Warning: Module 'pgsql' already loaded in Unknown on line 0
WARNING: failed to download pecl.php.net/ssh2 within preferred state "stable", will instead download version 0.12, stability "beta"
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading ssh2-0.12.tgz ...
Starting to download ssh2-0.12.tgz (26,223 bytes)
.........done: 26,223 bytes
6 source files, building
running: phpize
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
libssh2 prefix? [autodetect] : ←ここはブランクのまま エンターした。
Build process completed successfully
Installing '/usr/lib64/php/modules/ssh2.so'
install ok: channel://pecl.php.net/ssh2-0.12
configuration option "php_ini" is not set to php.ini location
You should add "extension=ssh2.so" to php.ini
となるので、
# echo "extension=ssh2.so" > /etc/php.d/ssh2.ini
httpdを再起動させる。
# systemctl restart httpd.service
# php -m | grep ssh2
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/msql.so' - /usr/lib64/php/modules/msql.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: Module 'mbstring' already loaded in Unknown on line 0
PHP Warning: Module 'pgsql' already loaded in Unknown on line 0
ssh2
phpinfo() で確認すると
ssh2
SSH2 support | enabled |
---|---|
extension version | 0.12 |
libssh2 version | 1.4.3 |
banner | SSH-2.0-libssh2_1.4.3 |
となり、実装完了。
実装方法
<?php
$connection = ssh2_connect('アドレス', 22);
ssh2_auth_password($connection, 'ログインユーザ名', 'ログインパスワード');
ssh2_scp_send($connection, '../転送元ファイル', '転送先ディレクトリ/転送するファイル', 0644);
?>
2016/05/23
phpexcelとlibreofficeのcuiを使ってPDFを作成する
かなりphpexcelの恩恵を受けているが、やはりpdfに加工したい事がある。
guiでせっせと作るのも良いのだが、
ボタン一つで作成させたい。
そこで、エクセルをpdfに変換するものをいろいろ探したところ、
libreofficeのCUIを使うのが一番崩れないようだ。
早速だが、CUIの環境を構築
#yum install libreoffice libreoffice-langpack-ja
早速コマンドを投げてみる。
libreoffice --nologo --nofirststartwizard --convert-to pdf /var/www/html/pdf/000001.xlsx
エラーが返ってきた。
/usr/lib64/libreoffice/program/soffice.bin X11 error: Can't open display:
Set DISPLAY environment variable, use -display option
or check permissions of your X-Server
(See "man X" resp. "man xhost" for details)
https://help.libreoffice.org/Common/Starting_the_Software_With_Parameters/ja
調べてみると、
オプションで --headless を付けないと、ユーザーインタフェースが動いてしまい、NGらしい。
そこで、追加でオプションを実装。
#yum install libreoffice-headless
libreoffice --headless --nologo --nofirststartwizard --convert-to pdf /var/www/html/excel/pdf/00001.xlsx
convert /var/www/html/excel/pdf/00001.xlsx -> /home/<>/00001.pdf using calc_pdf_Export
変換できた。
線種や文字化けはなさそう。
サイズが大きいと、ページを跨いでしまうようなので、余白の設定等で、そこをなんとかできれば、
十分使えそう。
guiでせっせと作るのも良いのだが、
ボタン一つで作成させたい。
そこで、エクセルをpdfに変換するものをいろいろ探したところ、
libreofficeのCUIを使うのが一番崩れないようだ。
早速だが、CUIの環境を構築
#yum install libreoffice libreoffice-langpack-ja
早速コマンドを投げてみる。
libreoffice --nologo --nofirststartwizard --convert-to pdf /var/www/html/pdf/000001.xlsx
エラーが返ってきた。
/usr/lib64/libreoffice/program/soffice.bin X11 error: Can't open display:
Set DISPLAY environment variable, use -display option
or check permissions of your X-Server
(See "man X" resp. "man xhost" for details)
https://help.libreoffice.org/Common/Starting_the_Software_With_Parameters/ja
調べてみると、
オプションで --headless を付けないと、ユーザーインタフェースが動いてしまい、NGらしい。
そこで、追加でオプションを実装。
#yum install libreoffice-headless
libreoffice --headless --nologo --nofirststartwizard --convert-to pdf /var/www/html/excel/pdf/00001.xlsx
convert /var/www/html/excel/pdf/00001.xlsx -> /home/<
変換できた。
線種や文字化けはなさそう。
サイズが大きいと、ページを跨いでしまうようなので、余白の設定等で、そこをなんとかできれば、
十分使えそう。
2016/02/04
SSD 換装時のMBR問題 Windows7
HDDドライブが怪しくなってきたので、SSDに換装をしたが、
HDDが1TBに対し、SSDが240GBであったため、
ディスク丸ごとクローンが使えなかった。
元のパーティションを
EaseUE Partition Master で200GB位にまで小さくしてから
EaseUE Todo BackUp Free でパーティションクローンを作った。
EaseUEさんへのリンク
http://jp.easeus.com/partition-manager-software/free.html
EaseUS Todo Backup Freeの日本語公式ページ
http://jp.easeus.com/backup-software/free.html
システムクローンだと、換装後が面倒な予感がしたため、
非推奨のようだが、パーティションのクローンを作った。
free版なので、コピー先のパーティションをActiveに出来なかった。
恐らく駄目であろうと思いつつ、
SSDに付け替えて、BIOSを変更し、起動を掛けると、
bootLoaderが無いので起動できないとエラーが起きる。
しょうがないので、元のHDDに戻し、Windows修復ディスクを作成。
コントロール パネル→システムとセキュリティ→バックアップと復元
→システム修復ディスクの作成 で起動ディスクを作成する。
BIOSで DVD→SSDにして、ディスクから起動。
先ずは、スタートアップ修復を試すが、駄目。
続いて、コマンドプロンプトから
>bootsect /nt60 sys /mbr [ent]
でwindwos7用のブートストラップローダを書き込こもうとするが、
パーティションがアクティブでないので、書けないとエラーが返ってきた。
diskをactiveにしたいので、diskpaetコマンドを使う。
>DISKPART [ent]
・ディスクのリスト表示
DISKPART> list disk
ディスク 状態 サイズ 空き ダイナ GPT
### ミック
------------ ------------- ------- ------- --- ---
ディスク 0 オンライン 200 GB 1024 KB
・ディスクを選択する。
DISKPART> select disk 0 [ent]
ディスク 0 が選択されました。
・パーティションのリスト表示
DISKPART> list partition [ent]
Partition ### Type Size Offset
------------- ------------------ ------- -------
Partition 1 プライマリ 200GB 31 KB
・パーティションを選択
DISKPART> select partition 1 [ent]
パーティション 1 が選択されました。
・activeにする
DISKPART> active [ent]
DiskPart は現在のパーティションをアクティブとしてマークしました。
DISKPART> exit [ent]
>bootsect /nt60 sys /mbr [ent]
ブートストラップローダを書き込んでくれるので、一旦再起動する。
>exit [ent]
これで再行動掛ける。
SSDからブートすると
BOOTMGR is missing というエラーが吐き出される。
BOOTMGR is missingが出るので、PBR(パーティションの先頭セクタ)は
生き返った。
恐らく、アクティブパーティションの設定がオカシイ。論理フォーマットが駄目なようだ。
再度システム修復ディスクから立ち上げて、
スタートアップ修復で起動可能になった。
>bootrec /fixboot
>bootrec /fixmbr
コマンドだと駄目だった。
HDDが1TBに対し、SSDが240GBであったため、
ディスク丸ごとクローンが使えなかった。
元のパーティションを
EaseUE Partition Master で200GB位にまで小さくしてから
EaseUE Todo BackUp Free でパーティションクローンを作った。
EaseUEさんへのリンク
http://jp.easeus.com/partition-manager-software/free.html
EaseUS Todo Backup Freeの日本語公式ページ
http://jp.easeus.com/backup-software/free.html
システムクローンだと、換装後が面倒な予感がしたため、
非推奨のようだが、パーティションのクローンを作った。
free版なので、コピー先のパーティションをActiveに出来なかった。
恐らく駄目であろうと思いつつ、
SSDに付け替えて、BIOSを変更し、起動を掛けると、
bootLoaderが無いので起動できないとエラーが起きる。
しょうがないので、元のHDDに戻し、Windows修復ディスクを作成。
コントロール パネル→システムとセキュリティ→バックアップと復元
→システム修復ディスクの作成 で起動ディスクを作成する。
BIOSで DVD→SSDにして、ディスクから起動。
先ずは、スタートアップ修復を試すが、駄目。
続いて、コマンドプロンプトから
>bootsect /nt60 sys /mbr [ent]
でwindwos7用のブートストラップローダを書き込こもうとするが、
パーティションがアクティブでないので、書けないとエラーが返ってきた。
diskをactiveにしたいので、diskpaetコマンドを使う。
>DISKPART [ent]
・ディスクのリスト表示
DISKPART> list disk
ディスク 状態 サイズ 空き ダイナ GPT
### ミック
------------ ------------- ------- ------- --- ---
ディスク 0 オンライン 200 GB 1024 KB
・ディスクを選択する。
DISKPART> select disk 0 [ent]
ディスク 0 が選択されました。
・パーティションのリスト表示
DISKPART> list partition [ent]
Partition ### Type Size Offset
------------- ------------------ ------- -------
Partition 1 プライマリ 200GB 31 KB
・パーティションを選択
DISKPART> select partition 1 [ent]
パーティション 1 が選択されました。
・activeにする
DISKPART> active [ent]
DiskPart は現在のパーティションをアクティブとしてマークしました。
DISKPART> exit [ent]
>bootsect /nt60 sys /mbr [ent]
ブートストラップローダを書き込んでくれるので、一旦再起動する。
>exit [ent]
これで再行動掛ける。
SSDからブートすると
BOOTMGR is missing というエラーが吐き出される。
BOOTMGR is missingが出るので、PBR(パーティションの先頭セクタ)は
生き返った。
恐らく、アクティブパーティションの設定がオカシイ。論理フォーマットが駄目なようだ。
再度システム修復ディスクから立ち上げて、
スタートアップ修復で起動可能になった。
>bootrec /fixboot
>bootrec /fixmbr
コマンドだと駄目だった。
2016/01/05
pdfに日付のフッターを付ける。(Pdftkを使ってなるべく軽くやる。)
以前、pdftkでスタンプを作ったが、
同じ原理で、タイムスタンプを押したいという話になった。
itextを使うといった手法もあるようだが、
費用が掛からず、なるべく動作が軽い方向で検討してみる。
過去の財産を有効活用するため、
フッターに日付を持ったpdfを作成してみる。
いきなりPDFは作成できないので、
psファイルを一旦作成し、それをPDFに変換することにする。
a2psがデフォルトでインストールされていないので、
# yum install a2ps
なるべく重たくしないように、一回だけ改行した text.txtを作成し、footer.psに変換
コマンドは
$ a2ps text.txt -B -R --borders=no --footer=`date +%Y-%m-%d-%H:%M` -o footer.ps
オプションの補足
-B フレームを消す。
-R 用紙を縦にする。
--borders=no 外枠を消す。
--footer=`date +%Y-%m-%d-%H:%M` フッターに2015-01-01-01:01のタイムスタンプ
-o ファイル形式で出力する。
続いて、pdfに変換
$ ps2pdf footer.ps footer.pdf
以上。
これをcron等で、5分おき程度に作成させておけば、良い。
オプションを調べるのに凄く時間を消費したので、メモしておく。
同じ原理で、タイムスタンプを押したいという話になった。
itextを使うといった手法もあるようだが、
費用が掛からず、なるべく動作が軽い方向で検討してみる。
過去の財産を有効活用するため、
フッターに日付を持ったpdfを作成してみる。
いきなりPDFは作成できないので、
psファイルを一旦作成し、それをPDFに変換することにする。
a2psがデフォルトでインストールされていないので、
# yum install a2ps
なるべく重たくしないように、一回だけ改行した text.txtを作成し、footer.psに変換
コマンドは
$ a2ps text.txt -B -R --borders=no --footer=`date +%Y-%m-%d-%H:%M` -o footer.ps
オプションの補足
-B フレームを消す。
-R 用紙を縦にする。
--borders=no 外枠を消す。
--footer=`date +%Y-%m-%d-%H:%M` フッターに2015-01-01-01:01のタイムスタンプ
-o ファイル形式で出力する。
続いて、pdfに変換
$ ps2pdf footer.ps footer.pdf
以上。
これをcron等で、5分おき程度に作成させておけば、良い。
オプションを調べるのに凄く時間を消費したので、メモしておく。
2015/12/25
PHPExcel MSSqlServer PHPの記述
DBから取ってくる際には、shift-jisでページを作成しておかないと文字化けしたので、
やむを得ず、shift-jisで取り扱ったが、PHPExcelでのセルへの書き込みは
UTF-8で行う必要が有るため、MSSqlServerのエンコードCP932をUTF-8にして書き込む。
忘れやすいので、記載例を残す。
<?php
//PHPExcelの読み込み。
require_once("./Classes/PHPExcel.php");
require_once("./Classes/PHPExcel/IOFactory.php");
//タイムゾーン指定
date_default_timezone_set('Asia/Tokyo');
//MSSQLに接続。
$server='192.168.0.XXX:1433';
$username='USR_XXX';
$password='*******';
$con=mssql_connect($server,$username,$password);
//データベースを選択
mssql_select_db('DBの名前');
//クエリ作成。
$query = mssql_query("select~ 適宜作成 ");
//DBからデータ取得。
$col = mssql_fetch_array($query)
//PHPexcel xslx 形式の定義。
$reader = PHPExcel_IOFactory::createReader('Excel2007');
//example.xlsxを下敷きにする。
$excel = $reader->load("./下敷きにするエクセル.xlsx");
// シート設定。
$excel->setActiveSheetIndex(0);//何番目のシートか
$sheet = $excel->getActiveSheet();//有効になっているシートを代入
// セル値指定。
//日本語の指定が面倒。
//書き込みはUTF-8で行う必要が有るため、MSSqlServerのエンコードCP932をUTF-8にして書き込む。
$sheet->setCellValue('A1', mb_convert_encoding($name, 'UTF-8','auto'));//セルに値を入力。
$sheet->setCellValue('A2', mb_convert_encoding($addr, 'UTF-8','auto'));
$sheet->setCellValue('A3', mb_convert_encoding($requester, 'UTF-8','auto'));
$sheet->setCellValue('A4', mb_convert_encoding($TEL, 'UTF-8','auto'));
$sheet->setCellValue('A5', mb_convert_encoding($FAX, 'UTF-8','auto'));
$sheet->setCellValue('A6', $Number);//内部変数で扱うものは、特にエンコード不要。
//Excel2007形式(xlsx)のライターを作成。
$writer = PHPExcel_IOFactory::createWriter($excel, "Excel2007");
//ファイル出力。
$writer->save($Number.".".xlsx);
//結果セットを破棄。
mssql_free_result($query);
//SQL Serverとの接続を解除。
mssql_close();
?>
やむを得ず、shift-jisで取り扱ったが、PHPExcelでのセルへの書き込みは
UTF-8で行う必要が有るため、MSSqlServerのエンコードCP932をUTF-8にして書き込む。
忘れやすいので、記載例を残す。
<?php
//PHPExcelの読み込み。
require_once("./Classes/PHPExcel.php");
require_once("./Classes/PHPExcel/IOFactory.php");
//タイムゾーン指定
date_default_timezone_set('Asia/Tokyo');
//MSSQLに接続。
$server='192.168.0.XXX:1433';
$username='USR_XXX';
$password='*******';
$con=mssql_connect($server,$username,$password);
//データベースを選択
mssql_select_db('DBの名前');
//クエリ作成。
$query = mssql_query("select~ 適宜作成 ");
//DBからデータ取得。
$col = mssql_fetch_array($query)
//PHPexcel xslx 形式の定義。
$reader = PHPExcel_IOFactory::createReader('Excel2007');
//example.xlsxを下敷きにする。
$excel = $reader->load("./下敷きにするエクセル.xlsx");
// シート設定。
$excel->setActiveSheetIndex(0);//何番目のシートか
$sheet = $excel->getActiveSheet();//有効になっているシートを代入
// セル値指定。
//日本語の指定が面倒。
//書き込みはUTF-8で行う必要が有るため、MSSqlServerのエンコードCP932をUTF-8にして書き込む。
$sheet->setCellValue('A1', mb_convert_encoding($name, 'UTF-8','auto'));//セルに値を入力。
$sheet->setCellValue('A2', mb_convert_encoding($addr, 'UTF-8','auto'));
$sheet->setCellValue('A3', mb_convert_encoding($requester, 'UTF-8','auto'));
$sheet->setCellValue('A4', mb_convert_encoding($TEL, 'UTF-8','auto'));
$sheet->setCellValue('A5', mb_convert_encoding($FAX, 'UTF-8','auto'));
$sheet->setCellValue('A6', $Number);//内部変数で扱うものは、特にエンコード不要。
//Excel2007形式(xlsx)のライターを作成。
$writer = PHPExcel_IOFactory::createWriter($excel, "Excel2007");
//ファイル出力。
$writer->save($Number.".".xlsx);
//結果セットを破棄。
mssql_free_result($query);
//SQL Serverとの接続を解除。
mssql_close();
?>
2015/12/21
PHPExcel MSSQLServerへの接続時エラーのメモ
開発ベンダが、DBの中身をShift-JISで格納してしまっているため、
PHP等をshift-jisで書かないと不具合が出る。
UTF-8の方がいろいろと都合がいいので、
mb_convert_encodingを使ったのだが上手くいかない・・・。
さぁ、動きそうだなというところで、今度は、別のエラーを検出
Warning: strtotime(): It is not safe to rely on the
system's timezone settings. You are *required* to use the date.timezone
setting or the date_default_timezone_set() function. In case you used
any of those methods and you are still getting this warning, you most
likely misspelled the timezone identifier. We selected the timezone
'UTC' for now, but please set date.timezone to select your timezone.
date_default_timezone_getで宣言しろ
ということなので、PHPの頭に
date_default_timezone_set('Asia/Tokyo');
を書いたら動いた。
Fatal error: Uncaught exception 'PHPExcel_Writer_Exception' with message 'Could not close zip
この辺のエラーはディレクトリに書き込み権限が無い場合によると思う。
パーミッションを 777 とかにして試験してみれば、行けると思う。
2015/12/11
PHPExcel 実装
DBの扱いで最も手間が掛かるのが帳票だと思う。
基幹システムがjavaで書かれているので、
現状DBを舐めてデータを取得し、velocity、xls_foを使ってPDFを作成している。
この際、整形の為 xsl_foを苦労して造るのだが、
この作業が如何せん手間が掛かる。
スタッフからは「ここを直せ」と言われ、
クライアントからは「仕様が変わったから帳票変更」で片づけられる。
クライアントからは、エクセルで帳票のフォーマットが送られてくるので、
何とかvelocityでエクセルを扱おうとしたが、マージするくらいなら、
xsl_foを0から書いた方が楽な場合が多く、困っていた。
色々と探してみると、PHPでいいのがあるではないか!!
早速、ライブラリを使ってみる。
PHPは5.2以上で
php_zip, php_xml, php_gd2が拡張されているのが条件らしい。
php_xml, php_gd2がenableされていなかったので、
/etc/php.ini を編集
php_gd2は
# yum install php-gd でOKだった。
# systemctl restart httpd で設定読み直し
続いて、ライブラリのダウンロード
本家から最新のPHPExcel_1.8.0 をダウンロードする。
使い方は、PHP動かすディレクトリにClassesファイルを置いて、
require_onceでライブラリを読み込ませればOK
色々な参考サイトで、include_onceで書いている人が多かったが、
何故かinclude では上手く動かなかった。
以下PHPの例
マクロやVBAが入っていると上手くないというコメントも見られるが、
エクセルで設定した罫線や、文字サイズなどがキッチリ継承されるので、
すごーく便利。
もっと早く使いたかった・・・。
基幹システムがjavaで書かれているので、
現状DBを舐めてデータを取得し、velocity、xls_foを使ってPDFを作成している。
この際、整形の為 xsl_foを苦労して造るのだが、
この作業が如何せん手間が掛かる。
スタッフからは「ここを直せ」と言われ、
クライアントからは「仕様が変わったから帳票変更」で片づけられる。
クライアントからは、エクセルで帳票のフォーマットが送られてくるので、
何とかvelocityでエクセルを扱おうとしたが、マージするくらいなら、
xsl_foを0から書いた方が楽な場合が多く、困っていた。
色々と探してみると、PHPでいいのがあるではないか!!
早速、ライブラリを使ってみる。
PHPは5.2以上で
php_zip, php_xml, php_gd2が拡張されているのが条件らしい。
php_xml, php_gd2がenableされていなかったので、
/etc/php.ini を編集
php_gd2は
# yum install php-gd でOKだった。
# systemctl restart httpd で設定読み直し
続いて、ライブラリのダウンロード
本家から最新のPHPExcel_1.8.0 をダウンロードする。
使い方は、PHP動かすディレクトリにClassesファイルを置いて、
require_onceでライブラリを読み込ませればOK
色々な参考サイトで、include_onceで書いている人が多かったが、
何故かinclude では上手く動かなかった。
以下PHPの例
<?
//PHPExcelの読み込み
require_once("./Classes/PHPExcel.php");
require_once("./Classes/PHPExcel/IOFactory.php");
//PHPexcel xslx 形式の定義
$reader = PHPExcel_IOFactory::createReader('Excel2007');
//base.xlsxを下敷きにする。
$excel = $reader->load("./base.xlsx");
// シート設定
$excel->setActiveSheetIndex(0);//何番目のシートか
$sheet = $excel->getActiveSheet();//有効になっているシートを代入
// セル値指定
$sheet->setCellValue('A10', 'Hello World !');//セルA10に値を入力
//Excel2007形式(xlsx)のライターを作成
$writer = PHPExcel_IOFactory::createWriter($excel, "Excel2007");
//ファイル出力
$writer->save("helloworld.xlsx);
?>
マクロやVBAが入っていると上手くないというコメントも見られるが、
エクセルで設定した罫線や、文字サイズなどがキッチリ継承されるので、
すごーく便利。
もっと早く使いたかった・・・。
2015/10/13
非同期処理 HTML 検索窓を追加する
過去に書いた内容のブラッシュアップ
http://t0463.blogspot.jp/2015/06/windowsserver2012sshsqlcsv.html
http://t0463.blogspot.jp/2015/06/windowsserver2012sshsqlcsv.html
jquery.csv2table を使い、csvを表にして表示させているが、
検索して、行を絞り込みたいという要望が出たので、
実装させてみる。
http://jsgt.org/lib/jquery/plugin/csv2table/v002/test.htm
↑このサイトの
setting.where 行の絞込み
をほぼそのまま流用にさせていただいた。ありがとうございます。
中身はこんな感じ
<body> <input type="text" id="word"> <button type="button" id="btn-search">番号で検索</button> <input type="text" id="word2"> <button type="button" id="btn-search2">住所で検索</button> <div id="view1"></div> <script type="text/javascript"> $().ready ( function() { $('#btn-search').click ( function() { $('#view1').csv2table('./listUTF8.csv', { where: [ {'検索させたい列名':'like' + '%' + $('#word').val() + '%'} ] }); }); }); </script> <script type="text/javascript"> $().ready ( function() { $('#btn-search2').click ( function() { $('#view1').csv2table('./listUTF8.csv', { where: [ {'検索させたい列名2':'like' + '%' + $('#word2').val() + '%'} ] }); }); }); </script> <br> <font size ='2'>一覧表示</font> <div id="view0"></div> <script> $(function(){ $('#view0').csv2table('./listUTF8.csv'); }); </script> </body>
2015/09/09
CentOS7.1 PHPでSQLServerにアクセス。
この内容は古いので、MSSQLへPHPで接続(PDO接続)を参照されたい
ODBC-develをyumでインストール。
# yum install unixODBC-devel.x86_64
前回のpdftkもそうだったが、freetds-develもサポート外のようで、
ソースからビルドかと思ったが、epelで取ってこれるらしいのでやってみる。
# yum install epel-release
続いて、freetds-develをyumでインストール
# yum install freetds-devel
読み込んだプラグイン:fastestmirror, langpacks
epel/x86_64/metalink | 5.2 kB 00:00
epel | 4.3 kB 00:00
(1/3): epel/x86_64/group_gz | 169 kB 00:00
epel/x86_64/updateinfo FAILED
http://ftp.kddilabs.jp/Linux/packages/fedora/epel/7/x86_64/repodata/2c17dad24b2f96866b643bc3d4ce432833ca592ecf1af495e2b3a2361cf7ceab-updateinfo.xml.bz2: [Errno 14] HTTP Error 404 - Not Found
他のミラーを試します。
(2/3): epel/x86_64/updateinfo | 349 kB 00:00
(3/3): epel/x86_64/primary_db | 3.5 MB 00:06
Downloading packages:
警告: /var/cache/yum/x86_64/7/epel/packages/freetds-devel-0.91-12.git0a42888.el7.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID 3XXXXXX: NOKEY
freetds-devel-0.91-12.git0a42888.el7.x86_64.rpm の公開鍵がインストールされていません
(1/2): freetds-devel-0.91-12.git0a42888.el7.x86_64.rpm | 48 kB 00:00
(2/2): freetds-0.91-12.git0a42888.el7.x86_64.rpm | 1.1 MB 00:00
--------------------------------------------------------------------------------
合計 2.4 MB/s | 1.2 MB 00:00
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 から鍵を取得中です。
Importing GPG key 0xXXXXXXX:
Userid : "Fedora EPEL (7)"
Package : epel-release-7-5.noarch (@extras)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
上記の処理を行います。よろしいでしょうか? [y/N]y
途中上記の警告が出たが、インストールできた模様。
早速、phpで接続試験をすると、SqlServerにアクセスしていないようだ。
なんでだろう?
info.phpを作って調べると、php-mssql.x86_64 がインストールされていない模様。
# yum install php-mssql.x86_64
で
# systemctl restart httpd.service
で動いた。
接続の試験用
$server='192.168.XXX.XXX:1433';
$username='USR_XXX';
$password='*****';
$con=mssql_connect($server,$username,$password);
if($con !=FALSE)
{
echo "Connection to SqlServer successful";
}
else
{
die("Connection to SqlServer failed");
}
mssql_close($con);
?>
ODBC-develをyumでインストール。
# yum install unixODBC-devel.x86_64
前回のpdftkもそうだったが、freetds-develもサポート外のようで、
ソースからビルドかと思ったが、epelで取ってこれるらしいのでやってみる。
# yum install epel-release
続いて、freetds-develをyumでインストール
# yum install freetds-devel
読み込んだプラグイン:fastestmirror, langpacks
epel/x86_64/metalink | 5.2 kB 00:00
epel | 4.3 kB 00:00
(1/3): epel/x86_64/group_gz | 169 kB 00:00
epel/x86_64/updateinfo FAILED
http://ftp.kddilabs.jp/Linux/packages/fedora/epel/7/x86_64/repodata/2c17dad24b2f96866b643bc3d4ce432833ca592ecf1af495e2b3a2361cf7ceab-updateinfo.xml.bz2: [Errno 14] HTTP Error 404 - Not Found
他のミラーを試します。
(2/3): epel/x86_64/updateinfo | 349 kB 00:00
(3/3): epel/x86_64/primary_db | 3.5 MB 00:06
Downloading packages:
警告: /var/cache/yum/x86_64/7/epel/packages/freetds-devel-0.91-12.git0a42888.el7.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID 3XXXXXX: NOKEY
freetds-devel-0.91-12.git0a42888.el7.x86_64.rpm の公開鍵がインストールされていません
(1/2): freetds-devel-0.91-12.git0a42888.el7.x86_64.rpm | 48 kB 00:00
(2/2): freetds-0.91-12.git0a42888.el7.x86_64.rpm | 1.1 MB 00:00
--------------------------------------------------------------------------------
合計 2.4 MB/s | 1.2 MB 00:00
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 から鍵を取得中です。
Importing GPG key 0xXXXXXXX:
Userid : "Fedora EPEL (7)
Package : epel-release-7-5.noarch (@extras)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
上記の処理を行います。よろしいでしょうか? [y/N]y
途中上記の警告が出たが、インストールできた模様。
早速、phpで接続試験をすると、SqlServerにアクセスしていないようだ。
なんでだろう?
info.phpを作って調べると、php-mssql.x86_64 がインストールされていない模様。
# yum install php-mssql.x86_64
で
# systemctl restart httpd.service
で動いた。
接続の試験用
$server='192.168.XXX.XXX:1433';
$username='USR_XXX';
$password='*****';
$con=mssql_connect($server,$username,$password);
if($con !=FALSE)
{
echo "Connection to SqlServer successful";
}
else
{
die("Connection to SqlServer failed");
}
mssql_close($con);
?>
2015/09/01
CentOS7.1 Logwatchのメールを送信する。
CentOS5.xはport25を開ければ、そのまんま飛んできたが、
CentOS7.1はどうもデフォルトのままでは、Logwatchが飛ばないらしい。
まずは、メールソフトは何が動いているのか?を調べてみる。
sendmailが入っているか?
# systemctl status sendmail.service sendmail.service Loaded: not-found (Reason: No such file or directory) Active: inactive (dead)
sendmailはサービスとして認識されているが、インストールされていない模様。
yumにメール関連は入っていないのか?と思ったが、
# yum list installed
postfix.x86_64 2:2.10.1-6.el7 @anacondapostfixがインストールされていた。
sendmailが標準ではなくなったようだ。
動いているか確認。
# systemctl status postfix.service
postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled)
Active: active (running) since 金 2015-08-28 19:30:38 JST; 3 days ago
自動起動していた・・・。
postfixの設定
#nano /etc/postfix/main.cf
myhostname = mail.何か名前.com 追加
mydomain = 何か名前.com 追加
myorigin = $mydomain コメント解除し、ローカルからの送信時ドメイン名を付与
inet_interfaces = localhost 今の所、受信はしないつもりなので、このまま
inet_protocols = ipv4 IPv6許容して無い時は影響受けるらしいので、記述
#mydestination = $myhostname, localhost.$mydomain, localhost コメント化
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain コメント解除し自己メール許容
home_mailbox = Maildir/ コメント解除
保存して、postfixを再起動。
# systemctl restart postfix.service
# systemctl status postfix.service
postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled)
Active: active (running) since 火 2015-09-01 10:36:14 JST; 4s ago
Process: 9847 ExecStop=/usr/sbin/postfix stop (code=exited, status=0/SUCCESS)
Process: 9862 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
Process: 9859 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
Process: 9857 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
logwatchのメールを送ってみる。
# /etc/cron.daily/0logwatch
指定のアドレスにメールが届けばOK。
ポート25の開放の方法は
# firewall-cmd --add-service=smtp --permanent
success
# firewall-cmd --reload
success
# firewall-cmd --list-all
public (default, active)
interfaces: enp2s0
sources:
services: dhcpv6-client http postgresql samba smtp ssh tomcat
ports: 8080/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
追記
logwatchのメールを複数に送信する場合は、
# nano /usr/share/logwatch/default.conf/logwatch.conf
Detail = Med
MailTo = 任意のアドレス 任意のアドレス2 (半角スペースを挟めば良い模様)
2015/08/28
CentOS7.1 無理やり PDFTkをインストールする。
CentOS7.1にして、ありゃりゃな事に遭遇。
PDFTkがRPMでインストールできなかった・・・。
以前の作業(PDFTkをRPMでインストール)
http://t0463.blogspot.jp/2014/12/pdfpdftk.html
フォーラム等によると、どうも、libgcjとかいうライブラリがCentOS7から入っていない為、駄目らしい
https://github.com/documentcloud/docsplit/issues/123 此処に
building PDFtk on RHEL 7 currently isn't possible due to upstrean (Fedora) dropping support for libgcj
とあるので、サポートして無いのだろう。
だがしかし、こちらに偉大な先人が 数名いらっしゃった。
http://ume.macoron.net/archives/7627
http://blog.cyber-support.info/article/424149031.html
ベクタ画像を描くのに必要となる基本的なライブラリを入れる。
yum install libart_lgpl
つづいて、そのサポートしなくなったlibgcjのパッケージを用意
# wget http://ftp.riken.jp/Linux/centos/6.7/os/x86_64/Packages/libgcj-4.4.7-16.el6.x86_64.rpm
# rpm -iv --force libgcj-4.4.7-16.el6.x86_64.rpm
最後にPDFTkを持ってくる。
# wget https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk-2.02-1.el6.x86_64.rpm
# rpm -ivh pdftk-2.02-1.el6.x86_64.rpm
動いているようなので、良かった・・・。
OSのアップグレードはこういうのがネックだと感じる。
PDFTkがRPMでインストールできなかった・・・。
以前の作業(PDFTkをRPMでインストール)
http://t0463.blogspot.jp/2014/12/pdfpdftk.html
フォーラム等によると、どうも、libgcjとかいうライブラリがCentOS7から入っていない為、駄目らしい
https://github.com/documentcloud/docsplit/issues/123 此処に
building PDFtk on RHEL 7 currently isn't possible due to upstrean (Fedora) dropping support for libgcj
とあるので、サポートして無いのだろう。
だがしかし、こちらに偉大な先人が 数名いらっしゃった。
http://ume.macoron.net/archives/7627
http://blog.cyber-support.info/article/424149031.html
ベクタ画像を描くのに必要となる基本的なライブラリを入れる。
yum install libart_lgpl
GNUのコンパイラも必要みたいなので、CentOS6.7のものをPRMでインストール
# wget http://ftp.riken.jp/Linux/centos/6.7/os/x86_64/Packages/gmp-4.3.1-7.el6_2.2.x86_64.rpm# rpm -iv --force gmp-4.3.1-7.el6_2.2.x86_64.rpm
つづいて、そのサポートしなくなったlibgcjのパッケージを用意
# wget http://ftp.riken.jp/Linux/centos/6.7/os/x86_64/Packages/libgcj-4.4.7-16.el6.x86_64.rpm
# rpm -iv --force libgcj-4.4.7-16.el6.x86_64.rpm
最後にPDFTkを持ってくる。
# wget https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk-2.02-1.el6.x86_64.rpm
# rpm -ivh pdftk-2.02-1.el6.x86_64.rpm
動いているようなので、良かった・・・。
OSのアップグレードはこういうのがネックだと感じる。
登録:
投稿 (Atom)