伊藤清徳の垂直落下式ムーンサルトプレス伊藤清徳の垂直落下式ムーンサルトプレスPerlとかPHPとかMySQLとか...がんばっても8割だ。column...というようなエラーが出た場合、MySQL5.7より「ONLY_FULL_GROUP_BY」がオンになっていることが原因だ。このあたりは、すでに多くの先駆者が設定について書いてくださっている。http://blog.prophet.jp/2951https://blog.kamipo.net/entry/2015/12/14/171838https://qiita.com/shiutk/items/9176e6d76c1707bc36c7など。権限付与がなく設定ができない。Workbenchをつかっている経験から)SQLMODEの変更ができるはず。'NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';毎回接続時に実行できればOKなはず。考察して、調べた結果問題なしでした。PDO()直後あたりで毎回実行するようにすればOKです。Comments今日はかりゆしウェアを着ている伊藤です。2018年日本は災害レベルで暑いですね。沖縄県はすずしいですよ。最近連日WordPressの話題を書いています。今日はWPのタイトルタグをテンプレート側から指定できるといいよね~ってはなしをします。全部を書き換えるのではなく、必要なタイミングでテンプレートごとに指定したいテンプレートファイルからは、get_header();の直前に関数で指定したいたぶんあるあるだと思います。いじりたいところですからね。document_title_partsフィルターを利用するKさんの記事によると、document_title_partsに紐づけした関数に、引数としてタイトル構造を持つ配列が渡されて、それを編集してreturnすればいいぜ。ワイルドだろー?って書いてあるます。僕のやろうとしていることだと、必要なタイミングで呼びたいという前提と、テンプレート側から指定したという条件が入るので、そのまんまは使えません。そこで登場するのがクロージャーです。クロージャーを使って実装もうめんどいからソースを晒します。functions.phpにでも書いてください。);get_header();もう少しちゃんとするならクラスにして静的メッドにするのが筋でしょうねー。クロージャーをつかっています。WPでは使われないかとおもいます。意外に使うTipsになるのでは?現場からは以上です。Commentsどうもどうも。2年近く連絡をしていなかったら育ての親である叔父が心配してきた伊藤です。WordPressにはデータベースを操作する機能というのは一応揃っています。wpdbとかそのへんですね。基本的にはSQLを書くか、あるいは、WPのもともとのテーブル構造に対するクエリを前提としていることが多く、遠回りだったりとかしますわね。できればActiveRecordやORMがはいっているといいなーと思うわけです。従前のシステムがあって、WPでリニューアルをかけたい。いうときは、従前のシステムのテーブルはそのままにリニューアルをしたいということは、多々あるわけです。そんな事を考えていたので、いっちょWordPressにORMを入れてみた。ORMライブラリPHPのActiveRecordやORMの単体ライブラリというのが、実はそもそもあまりないです。最近のPHPのフルスタックWebアプリケーションの場合、Doctrineがベースに利用されていたりとかするわけで、車輪の再開発を嫌うのか、あまりないのです。僕の場合は、PHP5.3系の頃は、php-activerecordをよく使っていましたが、ちょっと古くなったのと、リレーションのリレーションが追えないなど、ちょっと足らないところもあります。今回探していていい感じだなーとおもったのが、RedBeanPHPです。MySQL/MariaDBのプラグインとPHPライブラリを提供しており、かなり高速で、わかりやすいコード体系のORMになっています。MySQLのプラグインということで、共有ホスティングなどでは可搬性がさがりますので、今回は見送りました。今回採用することにしたのがSpotORMです。DBALをベースに作られたORMラッパーです。Relationの定義などがしやすく、僕がよく使うフレームワークYiiのModelの構造に似ているのも、採用の理由です。インストールcomposerでインストールします。composerの使い方はぐぐれ。WPの場合は、functions.phpにコードを書く感じになるので、テンプレートディレクトリで実行すればよいかと思います。__DIR__.'/vendor/autoload.php';とでも書いておけば良し。インストールが簡単です。つかってみましょうまず接続設定をします。\Spot\Locator($cfg);DSNで書くとこんなかんじ。連想配列での指定ももちろん可能です。設定はWPの接続情報を使い回すとかでもいいでしょう。モデルを用意するORMなのでモデルクラスを用意します。僕の場合は、functions.phpの並びに「Entity」フォルダを用意して、その中にモデルクラスを配置しました。$one;}を追記します。Entityの中身を一気にロードしちゃっています。必要時に読むというやり方のが正しいとは思います。}}仮にこんなかんじです。fieldsになにかないと怒られることがある?っぽいので、primaryのIDだけ定義しておきました。呼び出しに使ってみる最後に実際にDBにクエリしてみましょう。$row;}こんな感じにかきます。上記例では商品DBに品番を問い合わせる。実際組み込んでいるがWPと融合しているわけではないここまで読むとPHPerならおわかりになるとおもいますが、WordPressのオブジェクトの他に、DBに対して接続を一つたてることになります。したがって、メモリ効率などは悪くなります。手軽さと、パフォーマンスどちらを優先するかなどで、選択することになるとおもいます。DB操作をして、サイトデザインをWPに合わせるなどを考えると、有用ですし、SQLを書くよりはセキュリティ面でも安心してかけますね。Commentsどうもどうも。今年はそこそこブログを書いています。体調が戻ってきました。万全ではないのですが、1年近く体調がわるかったので、まぁそのいろいろアレです。ところで、PHPerのみなさん。管理画面でメールテンプレートを管理するような場合、そのテンプレートをどう処理するか、結構悩みますよね。同じようなかんじで、WordPressなんかで、囲みタグ型のショートコードでループをさせたいときとかもかなり悩みます。出力時に保存されたファイルをテンプレートエンジンで処理して出力というような手順でしょうか。悪くはないですが、セキュリティに気をつけなければいけないとか、結構手間取りますし、ファイル出力だと手軽さがなくなります。今回はWordPressのショートコードでどうしようかなーと思ったときの対処をメモ代わりに。やりたいこと前提条件です。</ul>[/get_product_categories]こんなショートコードを書いてもらってテンプレート処理をしたいわけです。囲みタグ型のショートコードについてはみなさまが書いているので、そちらをご参考にまぁ普通にやればこのような条件を満たそうと思うと、難しいコードでもないので、自分で簡単なテンプレートエンジンを書いてもいいとは思うのですが、いまいち気乗りがしません。自分で書くとすれば、正規表現を書いて、ゴニョゴニョとするところではありますよね。そこで!Codeigniterの簡易パーサークラスをぱくってきますCodeigniterには条件分岐はないですがループに対応して、ファイル処理なしで実行できる簡易テンプレートンジンがついています。これが使えないかと思ってソースを見たところ、Codeigniter本体にはほとんど依存していないことがわかり、少しの書き換えで対応ができることがわかりました。四の五の言わずにコードを晒せはい。}}Codeigniterのコントローラーオブジェクトに依存しているところなどを削って純粋にclassとして動くようになっています。);//最後にパースする。$content;}とでもしておけば、簡単ね。改造でifくらいはいける上記の通りCodeigniterのパーサーはシンプルにできてます。改造すればifくらいは余裕でかけると思います。パーサーが走るわけなので、決して軽くはありません。使い所見極めていきましょう。Codeigniter3.xはMITライセンスなのでOKですが、2.xまでのコードを使う場合は独自ライセンスなので、扱いに気をつけてください。CGIFMPのみになっており、あれ?Apacheモジュールは???となりました。サーバーを借りたクララオンラインさんに、サポートをおねがいしたところhttp://faq.clara.jp/index.php?solution_id=1350をご紹介くださいました。Pleskはもともといろーんなものがモジュール化していますが、mod_php自体もモジュールなんですね。/ユーザーディレクトリ/perl5PERL_LOCAL_LIB_ROOT=:/ユーザーディレクトリ/perl5PERL_MM_OPT=INSTALL_BASE=/ユーザーディレクトリ/perl5がセットされる。これに気づかずに3時間なやんだ。-Vしてれば気づいたのに。これら環境変数を削除した上で、CPANインストールすればよろし。cgi-binディレクトリが有効になっていないまぁPerl/CGIとかRuby/CGIとかやんなやって話ですが、昔の枯れた技術というのはとても有用でしてね...で、イニシャル状態では、公開ディレクトリにcgi-binディレクトリがあって、そっちが有効になっているんです。昔良くあった構成/ユーザーディレクトリ/cgi-bin//ユーザーディレクトリ/httpdocs/って言う構成がとれないわけです。ふるいサイトを移行するとちょっとめんどい。/ユーザーディレクトリ/httpdocs/cgi-bin/の中に格納すればいいわけですが。1個1個はどうってことない話ですけど勘がない環境だとハマりますね。Commentsnode.jsでネイティブPCアプリを作ることのできるNW.js(旧Node-Webkit)はご存知の方は多いでしょう。JavascriptというWEBの言語で、ちょっとしたツールを作ったり、デスクトップガジェットを作ったりできるのは、WEB寄りのプログラマやエンジニアにとっては、嬉しいツールです。そんな話をしていると、大体出てくる要求としては、PHPやPerlやRubyで作れないの?って言う要求ですね。調べてないですが、多分Rubyはありそうです(文化面で)。PerlはPerl/Tkでがんばりましょうや。PHPは?って探すと、NW.jsのPHP版とも言うべき、nightrainというのがあります。ディレクトリ構成アプリケーションパッケージを展開すると、こんなディレクトリ構造になっています。settings.iniでウインドウ状態の定義や、公開ディレクトリ(でいいのか?)の定義をします。定義ファイルを見ると、Macの場合は、Mac標準で入っているPHPを利用するように定義してあるようです。いうことは、相対パスをつかってパッケージングすれば、バージョン違いのPHPを利用したり、nightrain専用のphp.iniを持ったPHPを使えるということでしょうか。その辺は、未検証ですが。公開ディレクトリ公開ディレクトリは「www」内で、とりあえずCodeigniterを入れてみたところ、普通に動きました。普通のWEBサイトのように動いてくれるようです。__DIR__などのマジック定数もちゃんと処理してくれますし、composerもいけました。PHPなんでマルチスレッドには対応してなかったりなど、悲しいところはそのままなんですが、広範なライブラリを持つPHPでちょこーっとアプリを作れるのは、やはり大きいですねー。ところがですねこんな便利なnightrainなんですが、開発をやめちゃったようで、プロジェクトページが閉鎖になっています。公開のリポジトリは残っているようなんですが、ビルドがめんどくせぇ。いうことで、Mac版バイナリが見つかったので、それを共有するために、この記事を書きました。ダウンロードはこちらからライセンスは、MITライセンスです。WordPressに無理やりYii2を入れてみた。CommentsPHPerの悩みどころっていうところで、WordPressはWordPressのお作法があって、PHPの開発手法とは別だったりとか、WordPressはMVCでなかったり、とか、スカッフォールディングあったらいいのにとか。WordPressを拡張したり、プラグインをつくったりというのは、WordPress使いが思うより、遥かに大変なのである。フレームワーク使えたらなぁとはいえ、WordPressベースの案件というのはかなり数はある。僕は普段Yii、Yii2というフレームワークをよく利用する。既存のライブラリに頼らず、しっかりとチューニングしている、なによりモデルの仕様が非常にわかりやすい。理由でYiiを好んで使っている。余談だが、日本における有名なYiiの使い手さんは田中ひさてるさんです。WordPressベースの案件にしても、何か簡単にデータベースの管理ができるといいなぁというのが、PHPerの本音だったりするのでは...。いうわけで、どうにかしてみようと思った次第。その話をしましょう!Yii1.x系ならプラグインがある!http://cornernote.github.io/yii-embed-wordpress/YiiをWordPressのプラグインとしてインストールできるようにしてみようという試みのプラグイン。