タグ

ブックマーク / qiita.com/tadsan (13)

  • なぜ出力時のHTMLエスケープを省略してはならないのか - Qiita

    メリークリスマス! 週末もPHPを楽しんでますか? ところでWebセキュリティはWebアプリケーションを公開する上で基礎中の基礎ですよね! メジャーな脆弱性を作り込まないことはWeb開発においては専門技術ではなく、プロとしての基です。 中でもXSS (Cross-Site Scriptingクロスサイトスクリプティング)やインジェクションについての考慮は常に絶対に欠いてはならないものです。 現実にはプログラミングには自動車のような運転免許制度がないため、自動車学校に通わず独学で公道に出ることができてしまいます。つまりは基礎知識がないままにWebプログラマとして就職したり、フリーランスとして案件を請けることも現実には罷り通っています。それは一時停止標識も赤信号も知らずにタクシー営業しているようなものです。 このような事情により、体系的な理解のないWeb開発初心者は (時にはn年のキャリアを

    なぜ出力時のHTMLエスケープを省略してはならないのか - Qiita
    mukaken
    mukaken 2023/01/06
  • PHPからJavaScriptにデータを受け渡すときに考えること - Qiita

    PHPのstringは任意のバイト列を扱えますが、JavaScript/JSONはUnicodeで扱える文字しか扱えません PHPのint / floatはプラットフォーム依存ですが、JavaScriptのnumberは整数と小数を型レベルで区別しません JSONのarrayに対応する型はPHPのarrayのうちリストであるものです PHPは配列(リスト)と連想配列を型レベルで区別せず、どちらもarrayです リストはキーが0からの抜けがない連番になっている要素が0個以上の配列です array_is_list()関数で連想配列とリストを判別できます array_values()で連想配列をリストに変換できます array_filter()の結果はフィルタされたキーがスキップされるのでリストではありませんが、結果をarray_values()に通すことでリストにできます JsonSerial

    PHPからJavaScriptにデータを受け渡すときに考えること - Qiita
  • echoとprintの違い - Qiita

    PHPのechoとprintはどちらも関数ではなく言語構造です。どちらも文字列を出力バッファに書き出すという機能では同じですが、使われかたが異なります。 echo 1, 2, 3; // ← syntax error ではない print 1, 2, 3; // ← これは syntax error echo print 1; // ← syntax error ではない print echo 1; // ← これは syntax error 形式的に言うと echoとprintはどちらも出力バッファに書き込む機能です まれに「標準出力する」と言及されますが、それは間違いです fwrite(STDOUT, $str)の実行結果とは一致しないということです echoは文ですがprintは式です echoは複数の引数をとりますが、printは1つの引数をとります 便宜上関数マニュアルに掲載され

    echoとprintの違い - Qiita
    mukaken
    mukaken 2020/03/28
  • PHPの文と式 - Qiita

    このスライドは突発で開催されたPHPerKaigi Online(仮)でしゃべるために用意されたものです。 前回のあらすじ コードを自在に操るためのPHP文法入門 PHPのソースコードを正確に検査したり、ソースコードの一部を書き換えたいと思ったことはありませんか? PHPにはPHP-Parserという構文解析ライブラリがあり、静的解析ツールのPHPStanやリファクタリングツールのRectorはPHP-Parserをベースにしたプラグインでソースコードを検査したり、ソースコードを書き換えたりすることができます。 しかしながら、構文木を操作するには普段何気なくPHPコードを書く以上のプログラミング言語についての知識が求められます。この発表では構文木を取り扱う前提となるプログラミング言語についての知識、PHP-Parserの構造、PHPStanとRectorそれぞれの拡張方法と実例についても紹

    PHPの文と式 - Qiita
    mukaken
    mukaken 2020/03/28
  • array shapes記法(Object-like arrays)と旧PSR-5記法で型をつける - Qiita

    この数年でPHPでの開発でもCI(継続的インテグレーション)はかなり活発に行われるようになり、PHPUnitなどのテスティングフレームワークのほか、PHPStanやPhanなどのツールによる静的解析も浸透しつつあります。 関数/メソッドの引数と返り値、そしてオブジェクトのプロパティは比較的に型がつけやすいところですが、現状で無法地帯な箇所があります。そうです、配列の内部構造です。実際のところ、PHPDocに @param array や @return array と書くことは mixed と書くのとあまり大きな違いはありません。 ご存じの通り、PHPの配列は、動的配列(可変長配列)と連想配列(ハッシュテーブル、マップ)の特徴を併せ持ったデータ構造であり、配列は変数と同じくあらゆる値を格納することができるからです。 近年の開発が活発なPHPの静的解析ツール(PhpStormを除く)では配列

    array shapes記法(Object-like arrays)と旧PSR-5記法で型をつける - Qiita
    mukaken
    mukaken 2020/03/06
  • P++: 銀河に平和をもたらすための奇策と決着 - Qiita

    PHP 8から、PHPは「PHP」と「P++」という2つの言語を提供するようになる というキャッチーな紹介をするP++: 静的型付けをめざすPHPという記事がそれなりに話題になり、このニュースは目覚しく革新的な内容で、多くのひとの目を引き付けました。 これは早まった理解であり、ほとんど誤報と言ってもいい内容でした。2019年8月15日には提案者人も、少くとも「P++」の計画を短期的に実現するととは非現実的であり時期尚早であることを認めています。 この記事では、PHP開発の現状、なぜ野心的なP++計画が提案され、事実上撤回されたかの経緯について紹介します。 [中立性のための表示] この記事の著者@tadsanはPHPの静的解析を強く推進する立場です。 PHPゆるふわCI入門 PHP型検査・夢と理想と現実) 三行で要約 PHPはバージョンを経るごとに「歴史的経緯」による負債が削ぎ落されてきた

    P++: 銀河に平和をもたらすための奇策と決着 - Qiita
    mukaken
    mukaken 2019/08/14
  • Q. PHPは大文字小文字を区別するか? - Qiita

    文法 いきなりですがPHPの言語構造は基的にすべてケースインセンシティブ—— つまり大文字小文字はどちらでも動きます。 それは以下のようなコードも平然と動くことを意味します。 <?PhP と書こうが <?pHP と書こうが動きます。 <?pHP DECLARE(Strict_Types=1); Require_Once getenv('HOME') . '/.composer/vendor/autoload.php'; Const FRUITES = ['apple', 'banana', 'orange', 'mikan']; ForEach (FRUITES AS $f) { echo $f, ' '; If (is_citrus($f)) { EcHO '柑橘系', PHP_EOL; } ElseIF ($f === 'melon') { Echo '野菜', PHP_EOL; }

    Q. PHPは大文字小文字を区別するか? - Qiita
    mukaken
    mukaken 2019/03/13
  • 正規表現でPHPを脆弱にする (1) 「^ と $」 - Qiita

    みなさん正規表現は好きですか? 私は好きです。簡単に脆弱性を作り込めて、とても便利ですからね。 この記事ではPCRE関数(preg_match(), preg_replace()など)を利用して、みなさまにPHP正規表現のバッドノウハウを教示いたします。 先に結論を書きます 単独の文字列のマッチに $ を用いるのは予期しないパターンになるのでやめましょう。^は特に危険ではありませんが、^と$の組み合せではなく**\Aと\zの組み合せ**を覚えましょう。ただし、m修飾子で複数行(マルチラインモード)で、行頭と行末にマッチさせたい場合を除きます。 文字列のマッチに ^ と $ のペアを利用する そうですね、例としてQiitaのようなユーザー登録サイトの表示名 @tadsan のような文字列を登録する前の検査をするとします。 要件としては、使用可能な文字は abcdefghijklmnopqrs

    正規表現でPHPを脆弱にする (1) 「^ と $」 - Qiita
    mukaken
    mukaken 2018/11/23
  • PHPで開発が捗るリアルタイムエラーチェック - Qiita

    [Pythonでも型チェックが捗る]と噂をきいたのでPHPの環境構築について書きます。ちょっと眠いので簡潔に… もしわからないことがあったら回答するのでコメントで聞いて1。 得られる利益 関数名を間違ってることに気付いたり 変な型どうしで計算してることに気付いたり うっかり変な値をreturnしようとしたり そんな問題に編集中に気付けるよ。 画面はVimだけど、ほかのエディタでもいいよ。 事前準備 PHP 7.1+ macOSなら brew install php とかでもいいです (システムに最初から入ってる/usr/bin/phpは不可) Composer https://getcomposer.org/download/ とか読んで適当に入れて。 COMPOSER_HOMEにPATHを通す PATH=$HOME/.composer/vendor/bin:$PATH みたいな行をシェル

    PHPで開発が捗るリアルタイムエラーチェック - Qiita
    mukaken
    mukaken 2018/08/06
  • PSRの誤解 - Qiita

    先日のPHPerKaigi 2018はPHPに興味がある多くのひとびとと直接コミュニケーションがとれる貴重な機会でした1。その中でPSRシリーズへの誤解が聞かれたので一度整理します。 最初にまとめ 「PSRはモダン、準拠しないのはレガシー野郎」といったものではない 相互運用させることを想定しないのなら、100%準拠することに利点はない PSR-2は、それ自身を厳守させるためのコーディングスタイルではない PSRは参考するには値するが、自分たちの事情に合ったものを取り込むべし 後述しますが、筆者の所属するチームではPSR-1, PSR-2を参考にしつつ破って使ってます。 PSRは誰が作ってるの? PSRを管理するのはPHP-FIG (The PHP Framework Interoperability Group、PHPフレームワーク相互運用グループ)です。この組織はPHPのフレームワーク・

    PSRの誤解 - Qiita
  • 2018年のPHPDoc事情とPSR-5 - Qiita

    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 この記事

    2018年のPHPDoc事情とPSR-5 - Qiita
    mukaken
    mukaken 2018/03/13
  • PHP: Clean Code (clean-code-php) 蜜柑薬 - Qiita

    もくじ はじめに 変数 関数 オブジェクトとデータ構造 クラス S: 単一責任の原則 (SRP) O: オープン/クローズドの原則 (OCP) L: リスコフの置換原則 (LSP) I: インターフェイス分離の原則 (ISP) D: 依存逆転の法則 (DIP) 同じことを繰り返すな (DRY) はじめに この記事はRobert C. Martinの「Clean Code」のソフトウェアエンジニアリングの法則をPHPに適合させたものです。これはスタイルガイドではありません。読みやすく、再利用しやすく、そしてリファクタリングしやすいPHPコードを書くためのガイドです。 ここで挙げられるすべての原則は厳密に守らなくてはいけないわけではなく、少し守らなかったところで一般には許容されます。あくまでガイドラインですが、Clean Codeの著者たちがみな長年に渡って経験してきたことです。 この記事(

    PHP: Clean Code (clean-code-php) 蜜柑薬 - Qiita
    mukaken
    mukaken 2017/09/04
  • PHPでファイルを開いて読み込む - Qiita

    PHP初心者のときに混乱したし、未だに初心者が困ってるのをよく見掛ける。 はやわかり ファイル全体をまるごと読み込みたい→ file_get_contents() ファイルの中身をまるごと出力したい→ readfile() 行単位のテキストファイルを配列として読み込みたい→ file() ファイルをバイト単位で読み込みたい→ fopen()+fread() CSVを読み込みたい→ SplFileObjectクラス オブジェクト指向的に操作したい→ SplFileObjectクラス クラウドとかFTPとかにあるファイルを読み込みたい→ League\Flysystemライブラリ バイナリファイルを操作したいとか事情がない限り、feof()とかfclose()とかの出番はない。 file_get_contents() (PHP: file_get_contents - Manualより抜萃、2

    PHPでファイルを開いて読み込む - Qiita
    mukaken
    mukaken 2017/08/22
  • 1