BLOGTIMES
» ArchiveList (Tag for "php / seo" )
«Prev || 1 · 2 · 3 · 4 · 5 ·... | | Next»
2020/11/05

php + MariaDB で Malformed communication packet というエラーが出るときは

mysql  php  centos7 

今日は朝から php + MariaDB の環境で以下のエラーが発生して困ってしまいました。

500 SQLSTATE[HY000]: General error: 1835 Malformed communication packet (SQL: select * from ・・・・)

Malformed communication packet というエラーは初めて見たかもしれません。

MariaDB をダウングレードして暫定対処

原因としては MariaDB のバージョンアップに起因するようなので、以下のように MariaDB をダウングレードして暫定対象しました。

systemctl stop mariadb yum downgrade MariaDB-server MariaDB-common MariaDB-shared MariaDB-client MariaDB-compat MariaDB-devel --skip-broken yum --showduplicates search MariaDB-* yum install MariaDB-server-10.4.15-1.el7.centos.x86_64 MariaDB-client-10.4.15-1.el7.centos.x86_64 systemctl status mariadb systemctl enable mariadb

同じ話題が Stack Overflow にも

以下の Stack Overflow のエントリににもあるように、意外と同じところでハマった人は多いようです。
これを見ると PHP 7.3 では発生しないという話も出ているので PHP 7.1 と最新版の Maria DB の問題みたいですね。


    at 12:58 |
    2019/10/27

    Laravel でパスワードを忘れたときの再設定方法

    php  laravel 

    Laravel の Auth を使うとパスワードは DB にハッシュ化された状態で格納されます。
    これはこれでセキュリティのために必要な挙動なので、これに文句を言うつもりはありません。

    しかしながら、例えば管理者用のパスワードを忘れてしまい、DBを強制的に上書きしてログインしたいような場合、このハッシュがどのように作られているのか分からないとお手上げです。今日はまさにそんな状態に陥ってしまったので、解決方法を調べてみました。結論から言うと、以下のようにインタラクティブな php (artisan の tinker)を起動して、プログラムで DB を書き換えることができます

    $ php artisan tinker Psy Shell v0.9.9 (PHP 7.1.33 ― cli) by Justin Hileman >>> \App\User::where('UserId','1')->update(['password' => strtoupper(\Hash::make('hoge'))])

    これだと一撃で実行できるので、楽ちんです。

    [Laravel でパスワードを忘れたときの再設定方法 の続きを読む]

      at 14:11 |
      2019/05/09

      PHP の内容を AST で解析する

      php  softwareengineering  tutorial 

      PHP のファイルが静的解析したくなったので、ソースから AST を得る方法を調べてみました。
      以前、Eclipse の ASTParser を使う話を書いたことがありましたが、それの PHP 版になります。

      今回の作業にあたって、以下のスライドがとても参考になりました。

      PHP は 7 になってから内部的に AST が利用されているため、以前よりも AST を得るのは簡単になっています。
      既に以下のような extension が提供されているので、いずれかをインストールすれば大丈夫です。

      今回はマニュアルが充実している前者の nikic/php-ast を入れてみることにしました。
      以下、構築メモになります。

      [PHP の内容を AST で解析する の続きを読む]

        at 23:31 |
        2018/02/02

        「Yahoo! 検索スタッフブログ」がひっそりと終了へ

        seo  yahoo  eol 

        SEO が花盛りだった頃には良く更新されていたYahoo!検索 スタッフブログが年度末に終了するようです。

        Yahoo!検索スタッフブログ終了のお知らせ - Yahoo!検索 スタッフブログ

        2005年9月30日からスタートしたYahoo!検索スタッフブログですが、2018年3月31日をもちましてサービスを終了し、Yahoo!検索スタッフブログの役目を終えることにいたしました。

        よくみるとこの3年くらいほとんど更新されていなかったようなので、終了もやむなしという感じでしょうか。
        Yahoo もすっかり検索エンジンの会社ではなくなってしまっていますしね。。。。


          at 22:36 |
          2017/12/08

          Google が医療や健康情報サイトを狙い撃ち

          google  seo  medical 

          昨年のWELQ問題以来、Google はキュレーションメディアをターゲットにしたと思われる対策を行ったことを発表したりしていましたが、今回は特に変なものが多いと言われている医療や健康に関連するサイトを狙い撃ちにして対策を行ったようです。

          Google ウェブマスター向け公式ブログ: 医療や健康に関連する検索結果の改善について

          この変更は、医療や健康に関する検索結果の改善を意図したもので、例えば医療従事者や専門家、医療機関等から提供されるような、より信頼性が高く有益な情報が上位に表示されやすくなります。本アップデートは医療・健康に関連する検索のおよそ 60% に影響します。

          僕も片頭痛ドライアイがあるので、健康情報をネットで検索することがありますが、変なページが出てくることが多いので、分からないことは結局主治医の先生に聞くのが手っ取り早いという状況になっていました。小さな一歩ですが、はやく検索結果の上位がQ&Aサイトとかまとめサイトだらけな状況をなんとかしていただきたいものです。


            at 20:46 |
            2017/02/04

            Google がキュレーションメディアを狙い撃ち?

            google  seo 

            Google がウェブサイトの品質の評価方法に改善を加えたことを公式ブログで公表していました。

            検索アルゴリズムの小さな変更自体は定期的に行われていますが、Google があえてアルゴリズムの変更を公にしてくるのは、過去の事例からみても Web サイト運営者や SEO 業者に対する不正行為への強い警告です。今回の対象は DeNAのWELQ問題に始まる一連のキュレーションメディア問題への対策でしょうね。

            Google ウェブマスター向け公式ブログ: 日本語検索の品質向上にむけて

            今回の変更は、日本語検索で表示される低品質なサイトへの対策を意図しています。このような改善が、有用で信頼できるコンテンツをユーザーに提供する皆さんを、正当に評価するウェブのエコシステム作りの助けとなることを期待しています。

              at 13:38 |
              2016/12/07

              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を指定できるようになるなど、多数の新機能が加わっている。

              at 23:11 |
              2016/11/12

              MySQL で implode() のようなことがしたい

              mysql  php 

              MySQL (MariaDB)で PHP で言うところの implode() をやりたいと思っていろいろ調べてみたら、GROUP_CONCAT()*1 を使えば一撃で実現できることが分かったのでメモ。

              例えば以下のようなテーブルがあったときに GROUP_CONCAT() を使うとこんな感じになります。
              GROUP_CONCAT() には DISTINCT や ORDER BY が効くところもポイントです。

              SELECT * FROM foo; +---+ | a | +---+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | +---+
              SELECT GROUP_CONCAT(a ORDER BY a DESC SEPARATOR ',') AS aaaaa FROM foo; +-------------+ | aaaaa | +-------------+ | 6,5,4,3,2,1 | +-------------+

              カンマ区切りのデータの検索は FIND_IN_SET() で

              カンマ区切りになった1つのフィールドから、一致するデータの個数を返してくれるのが FIND_IN_SET()*2

              真っ当な正規化を行っていればこんな関数のお世話になる機会はないはずですが、テーブル設計の時に「どうせ検索条件としてこのフィールドは使わないはずだから、非正規形のままカンマ区切りでフィールドにいれちゃえ」なんていう無精をしたりするとお世話になることがあります。真っ当な解決方法としてはテーブル構造を正規化することですが、それがイヤな場合はFULLTEXT インデックスを使ったりしていましたが、一番お手軽に解決できるのが FIND_IN_SET() です。パフォーマンス的にはアレかもしれないので注意は必要ですけどね。

              実際の例としては以下のような感じになります。FIND_IN_SET() の第1引数は検索する文字列第2引数はカンマ区切りの文字列で、返り値は見つかった個数(見つからないときは 0 )になります。GROUP_CONCAT() と違ってセパレーターが指定できないので、元になる文字列の構造には注意が必要です。

              SELECT FIND_IN_SET('2','1,2,3,2,4,5,6') AS result; +--------+ | result | +--------+ | 2 | +--------+

              at 13:46 |
              2016/11/04

              Cookie を JavaScript から取得させない

              malware  javascript  php  java  chrome  rfc 

              Chrome の機能拡張にマルウェアが仕込まれていて騒ぎになっているようです。

              その中で紹介されていた 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引数を使って設定することができます。


              at 21:22 |
              2016/09/06

              続・IFTTT を使って Twitter アイコンを日替わりにする

              php  twitter  ifttt 

              以前にIFTTT を使って Twitter アイコンを日替わりにするというのをやりましたが、今日は日替わりかつランダムにアイコンが変わるようにしてみたいと思います。

              IFTTT だけではランダムにアイコンを変えることができないので、以下のような PHP のスクリプトを用意しました。これを PHP が使えるウェブサーバの適当なディレクトリにアップロードし、同じディレクトリに画像ファイルを好きなだけを入れておきます。設定が終わったら URL をブラウザで開くと、画像がランダムに表示されるのが分かると思います。(http://example.jp/path/to/randomicon.php の部分は各自の環境に読み替えてください。

              randomicon.php

              <?php $imgdir = dirname(__FILE__); $imgs = glob($imgdir . '/*.{jpg,gif,png}', GLOB_BRACE); $img = $imgs[array_rand($imgs)]; $mime_type = getimagesize($img); $mime_type = $mime_type['mime']; header('Content-type: '.$mime_type); echo file_get_contents($img);

              あとは画像のような感じで IFTTT の設定欄にアップロードした php へのパスを仕込めば OK。
              IFTTT レシピの編集 - 続・IFTTT を使って Twitter アイコンを日替わりにする


                at 23:44 |
                «Prev || 1 · 2 · 3 · 4 · 5 ·... | | Next»
                » ArchiveList (Tag for "php / seo" )