- blogs:
- cles::blog
php + MariaDB で Malformed communication packet というエラーが出るときは
mysql
php
centos7 今日は朝から php + MariaDB の環境で以下のエラーが発生して困ってしまいました。
Malformed communication packet というエラーは初めて見たかもしれません。
† MariaDB をダウングレードして暫定対処
原因としては MariaDB のバージョンアップに起因するようなので、以下のように MariaDB をダウングレードして暫定対象しました。
† 同じ話題が Stack Overflow にも
以下の Stack Overflow のエントリににもあるように、意外と同じところでハマった人は多いようです。
これを見ると PHP 7.3 では発生しないという話も出ているので PHP 7.1 と最新版の Maria DB の問題みたいですね。
Laravel でパスワードを忘れたときの再設定方法
php
laravel Laravel の Auth を使うとパスワードは DB にハッシュ化された状態で格納されます。
これはこれでセキュリティのために必要な挙動なので、これに文句を言うつもりはありません。
しかしながら、例えば管理者用のパスワードを忘れてしまい、DBを強制的に上書きしてログインしたいような場合、このハッシュがどのように作られているのか分からないとお手上げです。今日はまさにそんな状態に陥ってしまったので、解決方法を調べてみました。結論から言うと、以下のようにインタラクティブな php (artisan の tinker)を起動して、プログラムで DB を書き換えることができます。
これだと一撃で実行できるので、楽ちんです。
[Laravel でパスワードを忘れたときの再設定方法 の続きを読む]
PHP の内容を AST で解析する
php
softwareengineering
tutorial PHP のファイルが静的解析したくなったので、ソースから AST を得る方法を調べてみました。
以前、Eclipse の ASTParser を使う話を書いたことがありましたが、それの PHP 版になります。
今回の作業にあたって、以下のスライドがとても参考になりました。
PHP は 7 になってから内部的に AST が利用されているため、以前よりも AST を得るのは簡単になっています。
既に以下のような extension が提供されているので、いずれかをインストールすれば大丈夫です。
- nikic/php-ast: Extension exposing PHP 7 abstract syntax tree
- sgolemon/astkit: Parser kit for PHP7 ASTs
今回はマニュアルが充実している前者の nikic/php-ast を入れてみることにしました。
以下、構築メモになります。
「Yahoo! 検索スタッフブログ」がひっそりと終了へ
seo
yahoo
eol SEO が花盛りだった頃には良く更新されていたYahoo!検索 スタッフブログが年度末に終了するようです。
Yahoo!検索スタッフブログ終了のお知らせ - Yahoo!検索 スタッフブログ
2005年9月30日からスタートしたYahoo!検索スタッフブログですが、2018年3月31日をもちましてサービスを終了し、Yahoo!検索スタッフブログの役目を終えることにいたしました。
よくみるとこの3年くらいほとんど更新されていなかったようなので、終了もやむなしという感じでしょうか。
Yahoo もすっかり検索エンジンの会社ではなくなってしまっていますしね。。。。
Google が医療や健康情報サイトを狙い撃ち
google
seo
medical 昨年のWELQ問題以来、Google はキュレーションメディアをターゲットにしたと思われる対策を行ったことを発表したりしていましたが、今回は特に変なものが多いと言われている医療や健康に関連するサイトを狙い撃ちにして対策を行ったようです。
Google ウェブマスター向け公式ブログ: 医療や健康に関連する検索結果の改善について
この変更は、医療や健康に関する検索結果の改善を意図したもので、例えば医療従事者や専門家、医療機関等から提供されるような、より信頼性が高く有益な情報が上位に表示されやすくなります。本アップデートは医療・健康に関連する検索のおよそ 60% に影響します。
僕も片頭痛やドライアイがあるので、健康情報をネットで検索することがありますが、変なページが出てくることが多いので、分からないことは結局主治医の先生に聞くのが手っ取り早いという状況になっていました。小さな一歩ですが、はやく検索結果の上位がQ&Aサイトとかまとめサイトだらけな状況をなんとかしていただきたいものです。
Google がキュレーションメディアを狙い撃ち?
google
seo Google がウェブサイトの品質の評価方法に改善を加えたことを公式ブログで公表していました。
検索アルゴリズムの小さな変更自体は定期的に行われていますが、Google があえてアルゴリズムの変更を公にしてくるのは、過去の事例からみても Web サイト運営者や SEO 業者に対する不正行為への強い警告です。今回の対象は DeNAのWELQ問題に始まる一連のキュレーションメディア問題への対策でしょうね。
Google ウェブマスター向け公式ブログ: 日本語検索の品質向上にむけて
今回の変更は、日本語検索で表示される低品質なサイトへの対策を意図しています。このような改善が、有用で信頼できるコンテンツをユーザーに提供する皆さんを、正当に評価するウェブのエコシステム作りの助けとなることを期待しています。
PHP 7.1 リリース
php PHP 7.1 がリリースされました*1。
昨年 12 月の PHP 7.0 リリース以来の大型バージョンアップとなります。
詳細な変更点については PHP: PHP 7 ChangeLog に記載がありますが、型まわりでいろいろと改良が加わっているようです。
「PHP 7.1」リリース、型関連の機能を強化 | OSDN Magazine
PHP開発チームは12月1日、プログラミング言語の最新版「PHP 7.1.0」をリリースした。Nullable型が導入されたほか、関数の戻り値としてvoidを指定できるようになるなど、多数の新機能が加わっている。
MySQL で implode() のようなことがしたい
mysql
php MySQL (MariaDB)で PHP で言うところの implode() をやりたいと思っていろいろ調べてみたら、GROUP_CONCAT()*1 を使えば一撃で実現できることが分かったのでメモ。
例えば以下のようなテーブルがあったときに GROUP_CONCAT() を使うとこんな感じになります。
GROUP_CONCAT() には DISTINCT や ORDER BY が効くところもポイントです。
† カンマ区切りのデータの検索は FIND_IN_SET() で
カンマ区切りになった1つのフィールドから、一致するデータの個数を返してくれるのが FIND_IN_SET()*2。
真っ当な正規化を行っていればこんな関数のお世話になる機会はないはずですが、テーブル設計の時に「どうせ検索条件としてこのフィールドは使わないはずだから、非正規形のままカンマ区切りでフィールドにいれちゃえ」なんていう無精をしたりするとお世話になることがあります。真っ当な解決方法としてはテーブル構造を正規化することですが、それがイヤな場合はFULLTEXT インデックスを使ったりしていましたが、一番お手軽に解決できるのが FIND_IN_SET() です。パフォーマンス的にはアレかもしれないので注意は必要ですけどね。
実際の例としては以下のような感じになります。FIND_IN_SET() の第1引数は検索する文字列、第2引数はカンマ区切りの文字列で、返り値は見つかった個数(見つからないときは 0 )になります。GROUP_CONCAT() と違ってセパレーターが指定できないので、元になる文字列の構造には注意が必要です。
Cookie を JavaScript から取得させない
malware
javascript
php
java
chrome
rfc Chrome の機能拡張にマルウェアが仕込まれていて騒ぎになっているようです。
- HTTP Headers という 5万人が使っている Chrome 拡張のマルウェア疑惑。セッション盗まれて BTC も盗まれそうになった話。 - clock-up-blog
- Zaif のセッション情報が盗まれた原因のひとつについて。JavaScript からクッキー値を取得させない方法。 - clock-up-blog
その中で紹介されていた Cookie の httponly という属性*1が興味深かったのでメモ。
Cookie の仕様とセキュリティ
httponly 属性をつけると、そのクッキーは Cookie ヘッダ以外から読み取ることができなくなりなり、JavaScript から参照できなくなります。 Secureの反対の意味、 http でしか送信されないCookieという意味では ない ので気をつけて下さい。
このオプションはXSS脆弱性があった場合の被害を小さくします。 XSS脆弱性によって攻撃者が任意のJavaScriptが実行できてしまうと、 document.cookie の値を読んで Session ID などのログイン情報などを盗み見れてしまう可能性がありますが、 HttpOnly属性をつけておくとクッキーが XSS 脆弱性によって読み取られることがなくなります。
アプリを書くときに Cookie の Secure 属性は意識してつけていたものの、HttpOnly は Secure の逆かと勘違いしていて、完全にスルーしていました。なかなかの大失態です。
Java の場合には Servlet 3.0 から HttpOnly を指定するためのメソッド javax.servlet.http.Cookie#setHttpOnly()*2があります。また、PHP の場合には PHP 5.2 以降であれば setcookie()*3の第7引数を使って設定することができます。
- *1: RFC 6265 — HTTP State Management Mechanism (日本語訳)
- *2: Cookie (Java EE 6 )
- *3: PHP: setcookie - Manual
続・IFTTT を使って Twitter アイコンを日替わりにする
php
twitter
ifttt 以前にIFTTT を使って Twitter アイコンを日替わりにするというのをやりましたが、今日は日替わりかつランダムにアイコンが変わるようにしてみたいと思います。
IFTTT だけではランダムにアイコンを変えることができないので、以下のような PHP のスクリプトを用意しました。これを PHP が使えるウェブサーバの適当なディレクトリにアップロードし、同じディレクトリに画像ファイルを好きなだけを入れておきます。設定が終わったら URL をブラウザで開くと、画像がランダムに表示されるのが分かると思います。(http://example.jp/path/to/randomicon.php の部分は各自の環境に読み替えてください。)
randomicon.php
あとは画像のような感じで IFTTT の設定欄にアップロードした php へのパスを仕込めば OK。

- sadpkv
- CACHEMANAGER.phpというのはどうだろうかと
- pairb1m
- Lightning のToDoリストを複数のPCで共有できるアドオン
- majodca
- 九州旅行から帰ってきました
- majodca
- 九州旅行から帰ってきました
- hot534
- yum を使って OpenVPN をインストールする
- dresssu3
- NP_Trackbackを騙るトラックバックspamについて
- zippern7o
- NP_SpamBayesJP jp1b
- park81o
- Google Docs をメールフォームとして使う
- fogmpl
- なんで官庁の文章はPDFなんだろうか
- cutjw9
- 即席スライドショーを作る
- frightenlho
- 添付ファイルの容量を表示する「Attachment Sizes」
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(5062)
3 . GitHub が全ての公開リポジトリへのシークレットスキャンを有効に(4198)
4 . 年次の人間ドックへ(4129)
5 . 2023 年分の確定申告完了!(1つめ)(3987)
Academic[574]
Book[155]
Diary[522]
Disaster[101]
Foodlogue[1425]
Game[284]
Goods[805]
Healthcare[341]
Hobby[32]
IT[1195]
Military[343]
misc.[1570]
Mobile[510]
Music[38]
Neta[106]
News[95]
Photo[391]
RealEstate[120]
Security[1178]
SEO Contest[36]
Software[634]
Tips[1886]
Travelogue[1238]
Web[675]
Work[193]