楽しいだけで十分です

好きなことを書きます

PHPのforeachは、イテレーション対象の配列をコピーして動作している

PHPのforeachでイテレーションを回してる時に、イテレーション対象の配列の値を更新したかった時に調べてみました。
まだ、ちゃんとは理解できていないですが、PHPのforeachは、イテレーション対象の配列をコピーして動作しているようです。
そのため、foreach内で値を更新してもコピーされた配列を更新するだけであり、元の配列には影響がない(更新ができない)ようです。

解決策として、今回は別の方法でイテレーションを回すことで、値を更新できるようにしてみました。
今度から気をつけます。

参考

ja.stackoverflow.com

tmuxを使った複数サーバーの同時操作

仕事で複数サーバーで同じ操作をしたくなったのですが、「tmuxのsynchronize-panesを使えばいい」と先輩に教えてもらいました。

synchronize-panesとは

複数ペインを同時に操作できる機能です。
同時操作をしたいサーバーをそれぞれのペインで接続した後に、synchronize-panesを使えば、すべてのペインで同じ動作ができます。

synchronize-panesの使い方

tmux.confに次のコマンドを書けば、OKです。(prefix + eで起動、prefix + Eで終了)
bind ~の部分は、お好みのキーをキーバインドでどうぞ。

bind e setw synchronize-panes on
bind E setw synchronize-panes off

シェルスクリプトを書いて、サーバーに一気につなぐ方法もあるみたいです。
この辺も今度やってみようと思います。

参考

tech.naviplus.co.jp

渋谷ECミートアップ vol.3〜デザイナーが語るサービス設計・メディアの裏側〜 に参加しました

pepabo.connpass.com

自分のチームのメンバーがお話するとのことで、ふらっと参加してきました。
デザイナーさん向けの勉強会に参加するのが初めてだったのですが、スライドの作り方がデザイナーさんだ!って感じで綺麗でした。
自分が作る時に参考にします。

参加されていた方はエンジニアさんも多かったので、懇親会でお話しできて楽しかったです。

Apacheの組み込みモジュールの確認方法

Apacheの組み込みモジュールに何が入ってるんだっけ?となった時に使えるコマンドをメモ。

組込済みモジュールを一覧表示する

  • httpd -Mを実行すると、組み込まれているモジュールを一覧表示できます。

例) 組み込みモジュールを一覧表示

$ httpd -M
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 access_compat_module (shared)
 actions_module (shared)
  • 上記の例で、モジュール名の右に表示されている、(static), (shared)は、モジュールタイプを表しています。
    • staticは、静的リンクを利用して組み込まれたモジュール
    • sharedは、動的リンク(DSO: Dynamic Shared Object)を利用して組み込まれたモジュール

静的モジュールのみを一覧表示する

  • Apacheに組み込まれている静的モジュールのみを一覧表示するコマンドは、httpd -l

例) 静的モジュールのみを一覧表示

$ httpd -l
Compiled in modules:
  core.c
  mod_so.c
  http_core.c

OSS Gateに参加してきた

OSS開発未経験者が、OSS開発の一歩目を踏み出してみようというワークショップに参加してきました。
イベント内容はこちら。OSS Gate | Doorkeeper

興味があるものをやってみたらいいとのことだったので、Composerを選択してみました。
作ったissueがこちら
ドキュメントこの方がわかりやすくない?ってことが言いたいだけですが、必要ならPRも作るよ!と言っておきました。

コード書いたりしてないから、OSS開発したとはまだ言えないのかもしれないけれど、OSS開発を始める敷居は下げれた感じがしてよかったです。
自分でも貢献できそうなOSS探して、ちょこちょこやっていきたいなあと思いました。

PHPのエラーをまとめる

PHPのエラーについて勉強したので、まとめます。

概要

PHPのエラーには、大きく分けて3種類あります。

  • パースエラー (PHPの文法間違いによるエラー)
  • 実行時のエラー (PHPの実行中に処理が継続できなくなるエラー)
  • 警告・注意 (実行は継続できるが、注意を促す)

上記の3種類のいずれかに属するものとして、エラー定数というものがあります。
代表的なエラーの重要度が高い順に並べると、次のようになります。

  • E_PARSE
  • E_ERROR
  • E_WARNING
  • E_NOTICE
  • E_DEPRECATED
  • E_STRICT (PHP7.0で廃止)

そして、上記のエラー定数の中に個別のエラーが所属しています。
プログラムを実行した際に画面に表示されるエラーは、この個別のエラーです。
例えば、E_NOTICEに所属しているエラーには、次のようなものがあります。

  • 変数が未定義
Notice: Undefined variable: foo in /var/www/html/sample.php on line 5
  • 定数が未定義
Notice: Use of undefined constant FOO - assumed 'FOO' in /var/www/html/sample.php on line 6

パースエラー

実行時のエラー

  • エラー定数では、E_ERRORが該当します。
    • プログラム実行時のエラー表記は、Fatal error: ~~~です。
  • 前述のパースエラーと異なり、エラーが発生するまでは正常にプログラムが動作します。
  • エラーが発生すると、その時点でプログラムの処理が終了します。

警告・注意

  • エラー定数では、以下のものが当てはまります(E_PARSE, E_ERROR以外のすべて)
    • E_WARNING
    • E_NOTICE
    • E_DEPRECATED
    • E_STRICT (PHP7.0で廃止)
      • Strict Standards: ~~~

E_WARNING

  • 実行時の警告を表します。
    • 例えば、引数の数を間違えた場合など
  • プログラム実行時のエラー表記は、Warning: ~~~です。
  • 警告が発生した場合は、その時点の式の評価や文の実行をやめてしまいますが、その後の処理を継続します。
    • ポイントとしては、評価されなかった式などによって、本来得られるべきと開発者が考えていた値が取得できていないことです。これによって、予期しない挙動を起こす可能性があるため、E_WARNINGがなくなるように修正すべきです。

E_NOTICE

  • 実行時の警告を表します。
  • E_WARNINGとの違いは、PHPが自動的に対処を施せる程度の警告であることです。そのため、E_WARNINGよりも重要度が低いとされています。
  • プログラム実行時のエラー表記は、Notice: ~~~です。
  • E_WARNINGに比べると重要度は低いが、自動キャストなどが行われているため、予期しない挙動が起こりえます。修正すべきです。

E_DEPRECATED

  • 過去に許されていた文法や関数が現行バージョンでは非推奨になっており、将来的に廃止予定のものを使った場合の警告です。
  • プログラム実行時のエラー表記は、PHP Deprecated: ~~~です。
  • この警告が発生しても、実際に廃止になるまでは動作するため、急いで修正しなければならないものではないです。
  • しかし、いずれ動作しなくなることを表しているので、修正した方が無難です。

E_STRICT (PHP7.0で廃止)

  • 互換性維持などのために、変更した方が望ましい場合の警告です。
  • PHP7.0で、このエラー定数自体が廃止になり、かつてこのエラー定数に所属していたエラーは、別のレベルのエラー定数に統合されるなどしています。
  • プログラム実行時のエラー表記は、Strict Standards: ~~~です。
  • E_DEPRECATEDと同じ理由で、修正した方が無難です。

参考