PHPカンファレンス小田原2024での発表資料です https://fortee.jp/phpconodawara-2024/proposal/4d39c7ef-058c-4648-b1d7-5510497e0d81
![単体テストを書かない技術 #phpcon_odawara](https://cdn-ak-scissors.b.st-hatena.com/image/square/19f13f3ef979d7a3cf8b3b525f1a2590a37297bd/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F0225ffe59b404b148d4bdf9d33a246f4%2Fslide_0.jpg%3F29720498)
多くの警告について、PHP8.0でエラーレベルが変更されます。 これはReclassifying engine warningsというRFCで受理されたものです。 提案者はいつものNikita。 影響の大きい未定義変数アクセスについては個別に紹介しましたが、ここではそこで紹介しなかった細かい警告について見ていきます。 これまでE_NOTICEだった警告の一部がE_WARNINGに、これまでE_WARNINGだった警告の一部が例外になります。 E_WARNINGを抑制するような書き方をしている場合、PHP8では動かなくなる可能性が高いので気をつけましょう。 現在E_NOTICE以下であればいきなり動かなくなることはありませんが、そもそも抑制する書き方がよくないので、なるべく修正した方がよいでしょう。 エラーレベルの変更がない警告も並んでいるので、もしかしたら全警告が列挙されてるのか?と思った
PHPとPythonとRubyの連想配列のデータ構造がそれぞれ4〜5年ほど前に見直され、ベンチマークテストによっては倍以上速くなったということがありました。具体的には以下のバージョンで実装の大変更がありました。 PHP 7.0.0 HashTable高速化 (2015/11) Python 3.6.0 dictobject高速化 (2016/12) Ruby 2.4.0 st_table高速化 (2016/12) これらのデータ構造はユーザーの利用する連想配列だけでなく言語のコアでも利用されているので、言語全体の性能改善に貢献しています1。 スクリプト言語3つが同時期に同じデータ構造の改善に取り組んだだけでも面白い現象ですが、さらに面白いことに各実装の方針は非常に似ています。独立に改善に取り組んだのに同じ結論に至ったとすれば興味深い偶然と言えるでしょう2。 本稿では3言語の連想配列の従来実
PHPDocとは、クラスや関数などのブロックに記述できるDocComment内に記述する書式の通称です。この書式の情報源として時折PSR-5が参照されることがあるので簡単に状況をまとめます。 TL;DR PSR-5の標準化ステータスは昨年10月にABANDONED (放棄・議論停滞)になりました 2018年9月26日にPSR-5とPSR-19が分割され、ともにDRAFT状態に入りました PHPDocを型注釈として利用する各処理系の実装にはばらつきがあり、PSR-5とは相違点があります PhpStormは現在のところ(2018.1 EAP)PSR-5と互換性がありません 特にチーム開発では、対応する型記述の書式について注意が必要です PhpStormに配慮して書く場合、phpDocumentorの仕様を参照する方が安全です PHPDoc リファレンス — phpDocumentor この記事
「例えば、PHPを避ける」、もちろん間違った考え方なんだけど、この記事を書いた人がそう言いたくなるのも少し理解出来る PHP、いい加減でもいい加減に動いてくれて、非プログラマでもとりあえずそれっぽい感じに動く。 お陰様でネット上には間違った情報だらけ、今回はちょっと目に付いた「readfile()」と言う関数の間違いを書いてみる。 悲劇のreadfile 「PHP readfile」でググると結構良いランクの所に「メモリに溜め込んで使えない」だの書かれてあって可哀想に思う、readfileの事が。 それとは別に「echo file_get_contents("hoge");」をサンプルとして載せているサイトも少なくないと思う(調べてはいないが タイトルにもある通りだが、readfileは巨大なファイルを扱える、もちろんメモリに溜め込んだりはしない。(この事はきちんと公式マニュアルに書かれて
数年前であれば仕方なかったところですが、2018年の今となっては、パスワードハッシュの手動計算はもはや"悪"です。 まずログイン認証と称してmd5とかsha1とか書いてあるソースはゴミなので投げ捨てましょう。 hashやcryptは上記に比べればずっとマシですが、使い方によっては簡単に脆弱になりえます。 あと『パスワードを暗号化する』って表現してるところも見なくていいです。 PHPには、ハッシュに関わる諸々の落とし穴を一発で解消してくれるpassword_hashという超絶便利関数があるので、これを使います。 というか、これ以外を使ってはいけません。 以下はフレームワークを使わずに実装する際の例示です。 フレームワークを使っている場合は当然その流儀に従っておきましょう。 ハッシュの実装 データベース ユーザ情報を保存するテーブルを作成します。 パスワードカラムの文字数は、システム上のパスワ
PHP のデバッグツールである Xdebug にはリモートデバッグという機能があります。 …というのは言うまでもなく、広く知られていると思います。 しかし、Xdebug の設定をなんとなくコピペで済ませたりしていないでしょうか? Xdebug のリモートデバッグ設定、理解していますか? 日本語のサイトを検索すると「 xdebug.remote_enable=1 にして、xdebug.remote_host を xxx にして…」と設定だけが淡々と書かれた情報が多いです。 しかし、設定項目について、それぞれの意味を理解していないとトラブル時の対処が難しくなります。 リモートデバッグとは何か? リモートデバッグ (Remote Debugging) とは、実行中の PHP とは別の場所にデバッグを制御するものが存在する 方式です。 よくある環境だと、次のように図示できます。 PHP 本体とは別
// Tutorial //How To Install Linux, Nginx, MySQL, PHP (LEMP Stack) on Debian 8 Introduction The LEMP software stack is a group of software that can be used to serve dynamic web pages and web applications. This is an acronym that describes a Linux operating system, with an Nginx web server. The backend data is stored in the MySQL database and the dynamic processing is handled by PHP. In this guide,
PHP の error_log に syslog を指定した際に他のログと混ざらないようにする 2013-08-30-1: [PHP] PHP のランタイムのエラーログですが、ファイルを指定するより syslog 経由にしたほうが何かと楽です。 ファイルの場合は、ユーザ権限で実行している cli でのエラーと httpd でのエラーの両方を記録するために、 パーミッションをもしかしたら 777 とかにする必要があるかもしれませんが、 syslog の場合は特にそんなこと気にする必要がありません。 php.ini で下記の設定をするだけなのですが、これだけだとちょっと都合が悪いです。 sudo vim /etc/php.ini error_log = syslog というのも送信されるログのファシリティは user なので、例えば CentOS 6 だと /var/log/messages
Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su
エグゼクティブサマリ WordPress 4.7と4.7.1のREST APIに、認証を回避してコンテンツを書き換えられる脆弱性が存在する。攻撃は極めて容易で、その影響は任意コンテンツの書き換えであるため、重大な結果を及ぼす。対策はWordPressの最新版にバージョンアップすることである。 本稿では、脆弱性混入の原因について報告する。 はじめに WordPress本体に久しぶりに重大な脆弱性が見つかったと発表されました。 こんな風に書くと、WordPressの脆弱性なんてしょっちゅう見つかっているという意見もありそうですが、能動的かつ認証なしに、侵入できる脆弱性はここ数年出ていないように思います。そういうクラスのものが久しぶりに見つかったということですね。 WordPress、更新版で深刻な脆弱性を修正 安全確保のため情報公開を先送り Make WordPress Core Conten
よく判らん。 先日仕事で作ったケータイサイトで、クレームがついた。 別にクレームでもないか。 要するにいわゆる「機種依存文字」が化けるんだけど?って。 ケータイサイトなんで、HTML側はShift-JISで、PHPはUTF-8です。 SJISのサイトからSJISで受け取った文字列をUTF-8に変換して、各種処理(入力チェックとか、内容の確認)をして、HTMLで表示する直前にSJISに戻すことをしている。 で、メールを送信する際に mb_language('ja'); を実行しているので、ISO-2022-JPで扱われることになる。 e-mail メッセージのエンコーディングとして使用します。有効な言語は、"Japanese", "ja","English","en", "uni" (UTF-8) です。 mb_send_mail() は、e-mail をエンコードする際にこの設定を使用しま
先日PHPカンファレンス北海道2016にて「『例えば、PHPを避ける』以降PHPはどれだけ安全になったか」と題して基調講演を担当致しました。その際のスライドはこちら。 そうしたところ、以下のご指摘をいただきました。 @ockeghem スライド拝見しました。39番目のスライドですが、バインドのタイミングでintにキャストするのはちょっと例として良くない気がします。意図的にオーバーフローを起こすことで想定外のレコードの取得を許してしまいそうです。キャストしない方がまだ安全だと思うのですが。 SQLデータベースは、int型よりも大きな桁数を扱える場合があるので、intへのキャストを避けた方がよいという指摘は一般論としてはもっともなものだと考えます。PHPの場合、9223372036854775807を越える数字文字列をint型にキャストすると、9223372036854775807が返ります(
仕事でデータを暗号化して保存する必要が出てきたので色々調べてみた。 メインのシステムはPHPで作っているんだけど、Javaなども絡んでくるので、お互いが処理できる暗号方式でなければいけない。 仕様さえ明確にしてあればオレオレアルゴリズムでもいいんだけど、今回はかなり重要なデータを扱うので世間でそれなりに使われている暗号方式を使うことにした。 暗号の種類 自分も暗号にそんな詳しいわけではないけど、「データをパスワードで暗号化するんでしょ?」ぐらいにしか思ってない人はきっと大変な思いをする。 今の話で登場するのは 暗号化したいデータ 暗号の種類(アルゴリズム) パスワード(暗号処理に使うキー) の3つだけど、これからやろうとしてるブロック暗号では 暗号化したいデータ 暗号の種類(アルゴリズム) 暗号処理に使うキー(パスワードというかバイト列) 暗号利用モード(ブロック処理の種類) 初期化ベクト
EclipseでGitなどのソースコードリポジトリから新たにプロジェクトをチェックアウトした時など、ビルド時や検証時に出現するエラーの対応に苦労するのは僕だけではないはず。必要なところだけにエラーをだして欲しいのだが、外部のライブラリや自分の担当ではない部分のエラーまで出てしまったりする。 中にはエラーを放置していて、数百ものエラーをそのままにしている人も見たことがあるけれど、必要なエラーだけを出すようにすれば、バグを未然に防いだり、非推奨のコードをうっかり使うのを防止してくれたりと、Eclipseのメリットを享受できるのだ。 まあでも、この設定意外とわかりにくい。僕も全部は分かっていないが、とりあえず現時点で自分が分かっている範囲で概要をまとめてみたい。まず、Eclipseでの出るエラーは DLTK問題 <言語名>問題 の2つに大きく分けられると思う。後者は例えばXML問題とかHTML問
PHPを愛する試みというものを個人的にやっている PHPを愛する試み PHPを愛する試み 〜調教編〜 今回は、self:: parent:: static:: 遅延静的束縛について図で整理してみた。 スコープ定義演算子 (::) まず「::」について。これはスコープ定義演算子という。マニュアルには以下のようにある。 スコープ定義演算子 (::) スコープ定義演算子 (またの名を Paamayim Nekudotayim)、 平たく言うと「ダブルコロン」は、トークンのひとつです。 static, 定数 およびオーバーライドされたクラスのプロパティやメソッドにアクセスすることができます。これらの要素をクラス定義の外から参照する際には、 クラスの名前を使用してください。PHP 5.3.0 以降では、変数を用いてクラスを参照することも可能です。 変数の値に (self や parent、 stat
特殊メソッド/オートロード PHPには、「__construct()」(コンストラクタ)や「__destruct()」(デストラクタ)の他にも、その名前で定義されたメソッドは“呼ばれ時”になると勝手にコールされるという「特殊メソッド」があります。また「特殊関数」があります。 何れも「__(アンダーライン2本)」で始まるメソッド名または関数名です。PHPでは「__(アンダーライン2本)」で始まるメソッド名または関数名を、“特殊な関数”として予約していて、「__(アンダーライン2本)」で始まる関数名を付けないよう推奨されているので、付けない様にしましょう。 これらの「特殊メソッド・関数」を定義する場合、“引数の数と返り値の型を決められた形態通りに定義”しなくてはなりません。そうしないと機能しないし、コールされる際に「E_ERROR」エラーを発するか、場合によってはサーバがダウンします。 特殊メ
この記事は賞味期限切れです。(更新から1年が経過しています) KohanaはPHPのMVCフレームワークです。 日本語情報が乏しいせいか、まだあまり国内では使われていない印象ですが、 ここに導入のメモを記してみます。全七回。 はじめに 本連載は、私がKohanaに興味をもって導入し、色々試してみた記録をまとめたものなので、 あまり体系的に紹介できていない部分があるかもしれませんが、ご了承ください。 また、導入時に書いた物なので、そこまで突っ込んだ内容はありません。 Kohanaの日本語情報は日本ユーザ会による翻訳ドキュメントぐらいしか無く(内容は1バージョン前だったりします)、 公式(英語)もそこまできちんと整備されているわけではなく、まだ歯抜けも見られるのが現状です。 そんな中で、少しでも情報を補足・共有出来れば良いなと思い、筆をとった次第です。 執筆当時の最新版(バージョン3.2)を基
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く