セキュリティは難しいです。 ですが、プログラミング初学者の皆さんは必要以上に萎縮せず、どんどんアプリケーションを作り、公開することにチャレンジして欲しいと私は思っています。 一方、事実として、脆弱なアプリケーションが公開されている(サーバ上でアクセス可能な状態になっている)だけで、全く無関係な第三者が被害を被る可能性があることは知っておく必要があります。 それはWordPressを使った単なるWebサイトであったとしても同じです。 また、あなたのアプリケーションが破壊されて困らないものであったり、 個人情報を保持していないものであったとしても、です。 だから、知らなかった、では済まされないこともあります。 この記事では、PHPのソースを例に、 特にプログラミング初学者が生み出しやすいアプリケーションの脆弱性について、 具体的なコードを挙げながら解説します。 なお、本記事のサンプルコードはも
2020 年末にリリース予定 の PHP 8 の オフィシャル Docker イメージ(library/php)が Docker Hub に公開されました。 https://hub.docker.com/_/php?tab=tags&page=1&name=8.0-rc- イメージタグに 8.0-rcや 8.0-rc-fpm、8.0-rc-apacheなど 8.0-rc や rc-のタグが付いているものが現時点では PHP 8 のビルドとなっています。 この Docker イメージを利用して PHP 8 を試してみました。 Hello PHP 8 新機能のお試し Union Types Constructor Property Promotion Attributes JIT コンパイラ リリーススケジュール さいごに 参考 Hello PHP 8 docker コマンドで php:8.0
switch($x){ case 1: '$xは1だよ'; break; case "1": '$xは"1"だよ'; break; } case "1"に到達することは決してありません。 ということで厳密な比較を用いるswitchことmatch構文のRFCが提出されました。 以下はMatch expression v2の日本語訳です。 PHP RFC: Match expression v2 Proposal このRFCは、switchに似ていますが、より安全なセマンティクスを持つmatch構文の提案です。 例として、Doctrineのクエリパーサを挙げます。 // Before switch ($this->lexer->lookahead['type']) { case Lexer::T_SELECT: $statement = $this->SelectStatement(); br
開発言語をPHPから他の言語に変更するWebサービス企業がある中で、あえてPHPを使い続けることを決めており、今後のサービスの成長にもコミットしているというサイバーエージェント・コネヒト・BASE。 各社CTOが開発言語をPHPに決めた理由、今後の技術活用、エンジニアのキャリアパスなどについて語った。 PHPでのゲームのサーバサイド開発の変遷〜PHPとの付き合い方~ PHPと付き合っていくエンジニアの未来について考えるイベント「PHP Way #1」では、サイバーエージェント・コネヒト・BASEという3社のCTOが登壇し、Webの開発言語やフレームワーク、技術活用の考え方などについて語った。 最初に登壇したのは、サイバーエージェント SGE CTOの白井英氏。SGE(Smartphone Games & Entertainment)とはサイバーエージェントのゲームやエンターテイメント事業に
with() にObjectを渡す検証でNoMatchingExpectationExceptionが出る mockしたRepositoryクラスのメソッドの呼び出しの検証をするServiceTest.phpを作りました。 public function test_reset_case1_Entityのインスタンスでfail_countが0のデータがrepositoryのresetCountの処理に渡される() { $test_id = 1; $expected = new Entity([ 'fail_count'=>0, ]); $mock_Repository = \Mockery::mock(Repository::class); $mock_Repository->shouldReceive('resetCount') ->once() ->with($test_id, $exp
PHPカンファレンス関西2016の基調講演です。
タイトル通り。 本当に面倒くさい。古いシステムだと全てのカラムにmb_comvert_encodingが書いてあり人的なミスでエンコードを忘れやすい。 ふと調べていたが、ファイルに保存する際にこれにした方が楽。 fp = fopen('hogehoge.csv', 'w'); stream_filter_prepend($fp,'convert.iconv.utf-8/cp932'); fopen($fp, "w"); foreach($data as $v){ $line = "hoge,fuga,moge"; fwrite($fp, $line . "\n"); } いちいち文字コードをアレコレしなくても stream_filter_prependを掛けておけばそれでよし。
このエントリーは、GMOアドマーケティング Advent Calendar 2018 の 【12/2】 の記事です。GMOアドマーケティングとしては初のAdvent Calendar参戦です。はじめにこんにちは。18年新卒で入社いたしました、GMOアドマーケティングのK.Kです。新卒研修を終え、現在はゴリゴリ業務に取り組んでいます。今回の記事では、弊社のプロジェクトGMOSSPのPHPのバージョンを、PHP7.0からPHP 7.2にバージョンアップしましたので、バージョンアップの際の対応内容に関してご紹介させていただきます。(引用元|https://secure.php.net/download-logo... (引用元|https://secure.php.net/download-logos.php) 目次 PHP7.4に関して 新機能 2-1. 型付きプロパティ 2-2. アロー関数
PHPで配列をマージ(結合)する方法は3通りあります。 + 演算子を使って配列同士を加算する array_merge() を使う array_merge_recursive() を使う それぞれで微妙に挙動が違っていてとても紛らわしいので、可能な限り分かりやすく整理してみたいと思います。 方法ごとのポイント + による加算 同じキーがある場合は 先勝ち (前の配列の値が残って、後ろの配列の値が無視される) 「同じキー」と見なすのは、 数値キーと文字列キーの両方 一次元めのキーしか見られず、 二次元め以降の配列の構造は変化しない array_merge() による結合 同じキーがある場合は 後勝ち (第一引数の配列の値が第二引数の配列の値で上書きされる) 「同じキー」と見なすのは、 文字列キーのみ 数値キーの部分はすべて別物として扱われ、新しい配列では 数値キーが0から始まる連番で振り直され
Extended Coding Style Guide¶ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. Overview¶ This specification extends, expands and replaces PSR-2, the coding style guide and requires adherence to PSR-1, the basic coding standard. Like PSR-2, the intent of th
Laravel を使った開発でも、ドメインロジックと RDBMS などの永続化層へのアクセスを分離するためにリポジトリパターンを採用するケースが増えてきました。 ただ、Laravel には Eloquent という Active Record タイプの ORM があるので、これとリポジトリをどのように組み合わせるかで悩んでいる人が多いようで、これまで開発現場や勉強会などで質問を受けることがありました。 本エントリでは、リポジトリを実装してきた経験を元に、私が考える実装のポイントをご紹介します。 1. ドメインデータの入出力にリポジトリパターンを使う 2. メソッドの型宣言にドメインデータを指定する 3. 機械的に CRUD メソッドを実装しない 4. Eloquent を利用したリポジトリクラスの実装 5. 複数テーブルを扱うリポジトリ 6. Paginator との連携 さいごに 1.
PHPerKaigi2019 とは PHPerによるPHPerのためのお祭り! 日時 3.29 金 16:30 - 前夜祭 3.30 土 10:00 - 本編1日目 3.31 日 10:00 - 本編2日目 会場 練馬区立区民・産業プラザ Coconeriホール ツイッター・ハッシュタグ @phperkaigi #phperkaigi #phperkaigi #a #phperkaigi #b #phperkaigi #c タイムテーブル スピーカーツイッターリスト スライドについて 時系列順、トラック順に記載していきます。 3.29 前夜祭 スライド 前夜祭 オープニング (15分) 長谷川智希(@tomzoh)さん 紹介ページ: https://fortee.jp/phperkaigi-2019/proposal/1bb810d9-24dc-4c46-bcea-cecf6c1c0b02
2020/06/26追記:アルファ版がリリースされたので実際に試してみた JITのRFCが2019/03/21に投票開始されました。 締切は2019/03/28ですが、2019/03/27時点で賛成48反対2でほぼ導入確定です。 JITとは JIT is 何? PHPは現在は、アクセスが来るたびにソースコードを全部読み取って、opcodeに変換して、順番に逐次実行して、実行が終了したら全てのコードを破棄するというインタプリタ型のプログラミング言語で、処理速度は遅いです。 遅いと言っても、やってる内容からすれば異常なまでに早いんですけどね。 opcodeはCPUやOSなどの実行環境によらず同一のコードが生成されます。 逐次実行するときはさらに実行環境ごとのネイティブコードに変換して実行されます。 OPcacheは、この変換後のopcodeをメモリに保存しておいて、次のリクエストでも使い回すと
この記事を書くにあたって Laravel について色々サポートしてくれた皆さまに向けてお礼申し上げます。ありがとうございました。 本記事はクリーンアーキテクチャに対する理解を深めていただくために、「実践クリーンアーキテクチャ」の内容を Laravel で実装して解説するという内容になっています。 記事のゴールは「クリーンアーキテクチャに対する理解を深めてもらう」というものです。つまり、この実装の形は一例に過ぎません。 はじめに 皆さんクリーンアーキテクチャはご存知でしょうか。 そう、こんな図のアレです。 The Clean Architecture: https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html クリーンアーキテクチャといえばこちらの象徴的な図をまずは思い浮かべるでしょう。 この図を
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く