BLOGTIMES
» ArchiveList (Tag for "server / php" )
«Prev || 1 · 2 · 3 · 4 · 5 ·... | | Next»
2024/03/04

世界サーバ投げ選手権 (WSTC) が開催されるらしい

server 

ドイツの CloudFest で「World Server Throwing Championship (WSTC) 2024」と銘打ったサーバを投げ飛ばす大会が開かれることが話題になっていたのでメモ。

1U のラックマウントサーバををフリスビーのように投げ飛ばすような感じでしょうか。

「世界サーバ投げ選手権」ドイツで開催 最大40人が参加 - ITmedia NEWS

3月18日(現地時間)にドイツで開催される技術イベント「CloudFest」ではなんとサーバを人力で投げ、その飛距離を競う大会「World Server Throwing Championship 2024」(WSTC 2024)が併催されるという。


    at 22:05 |
    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 |
          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 |
            2016/04/21

            プログラミングで美少女を集めるゲーム「コードガールこれくしょん」公開

            programming  php  ruby  python 
            コードガールこれくしょん - プログラミングで美少女を集めるゲーム「コードガールこれくしょん」公開

            かんこれに始まって、「○○これくしょん」というゲームがあちこちで登場していますが、「コードガールこれくしょん」というプログラミングで美少女を集めるという一風変わったゲームが登場しています。

            プログラミング学習ゲーム「コードガールこれくしょん」公開! - GAME Watch

            プレーヤーは、最初は簡単な問題から、徐々にレベルが上がっていくクエスト形式でストーリーを進行させていく。プログラミング言語はPHP、Rubyに対応しており、6月にはPythonへの対応も予定されている。

            ソフトウェアを本職にしている身としては問題の難易度がどんな感じなのかちょっと気になりますね。。。。


              at 19:33 |
              2016/03/11

              PHP から Apache のログファイルにログを書く

              php 

              PHP でログ出力を行うためには例えば log4php などのライブラリを使うという手もありますが、mod_php を使っている場合には Apache の CustomLog を使って Apache にログ出力をしてもらうという手が使えることが分かったのでメモ。

              まず、httpd.conf や <VirtualHost> 定義の中に以下のような CustomLog の定義を作成しておきます。

              LogFormat "%h %l %u %t \"%r\" %>s %b %{foo}e" foo_log CustomLog logs/foo_log foo_log env=foo

              今回は出力に foo という環境変数を使うので LogFormat に追加されているのは %{foo}e だけですが、これらの定義は必要に応じて追加してください。

              あとは PHP 側から apache_setenv() を使って該当の環境変数をセットしてやれば OK。

              apache_setenv("foo", "[INFO] hoge");

              上記の場合はこんな感じでログ出力がされます。

              192.168.0.1 - - [11/Mar/2016:12:50:36 +0900] "GET /example/app/ HTTP/1.1" 200 - [INFO] hoge

                at 16:43 |
                «Prev || 1 · 2 · 3 · 4 · 5 ·... | | Next»
                » ArchiveList (Tag for "server / php" )