PHPカンファレンス小田原2024 の発表資料です。 https://phpcon-odawara.connpass.com/event/296492/ https://fortee.jp/phpconodawara-2024/proposal/7c57d5ca-213a-4d7a-aaf0-26d…
PHPコマンドの切り替え すでにHomebrewで複数のバージョンのPHPをインストール済みということで話を進めます。php@8.0 から php@7.4 に切り替えるには次のようにします。 % brew unlink php@8.0 Unlinking /opt/homebrew/Cellar/php/8.0.17... 24 symlinks removed. % brew link php@7.4 Linking /opt/homebrew/Cellar/php@7.4/7.4.28_1... 25 symlinks created. If you need to have this software first in your PATH instead consider running: echo 'export PATH="/opt/homebrew/opt/php@7.4/bi
こちらのスライドは以下のサイトにて閲覧いただけます。 https://www.docswell.com/s/ockeghem/ZM6VNK-phpconf2021-spa-security シングルページアプリケーション(SPA)において、セッションIDやトークンの格納場所はCookieあるいはlocalStorageのいずれが良いのかなど、セキュリティ上の課題がネット上で議論されていますが、残念ながら間違った前提に基づくものが多いようです。このトークでは、SPAのセキュリティを構成する基礎技術を説明した後、著名なフレームワークな状況とエンジニアの技術理解の現状を踏まえ、SPAセキュリティの現実的な方法について説明します。 動画はこちら https://www.youtube.com/watch?v=pc57hw6haXkRead less
この記事はPHP Advent Calendar 2019の5日目の記事です。 はじめに 私は6年前に、PHP Advent Calendar 2013として「PHPだってシェル経由でないコマンド呼び出し機能が欲しい」という記事を書きました。その中で、OSコマンドインジェクション対策の根本的かつ安全な対策は「シェルを経由しないコマンド呼び出し」であることを指摘した上で、末尾に以下のように書きました。 PHPコミッタのみなさま、PHP5.6の新機能として、シェルを経由しないコマンド呼び出しの機能を追加できませんか? 現実には当時からPCNTL関数にてシェルを経由しないコマンド呼び出しはできたのですが、当関数の使用が難しいことと、CLI版あるいはCGI版(FastCGIは可)のPHPでないとサポートされていないなどの制限があり、popenやproc_openなど使いやすいコマンド呼び出し関数に
「秩序のない分岐なんてほろんじまえ!!!!」 レガシーなシステムを触った時に、こう思ったことはあるのではないでしょうか。 私にもよくそう思うときがあります。 そんな絶望を生み出さないように分岐に関するアンチパターンと対策を考えてみました。 まず、なぜ生み出されるのかを書き出してみましょう。 秩序のない分岐 たくさんの分岐 →迷子になる ネストが多い →インデントが見づらい。 分岐ごとに条件が複雑 →覚えるのがつらい。 気づいたらスパゲッティコード →処理を追っている間にお腹が空き、スパゲッティを食べちゃうので太る。 テストがしづらい。テストケースが作りづらい。 →テストをするためのテストが必要とか言い出してしまう。 ifだけに畏怖 →書きたかった。 分岐処理に出会った時、これだけの問題があることに気づきました。 私はもう絶望したくないし、私のように絶望する人を作りたくない。(そして太りたく
teratailに以下のような投稿がありました。 PHPでメールフォームを作成したので、脆弱性がないかアドバイスいただけないでしょうか。 エンジニアでもなければ、PHPもろくに書けない雑魚ですが、「php メールフォーム 作り方」でググって表示されるサイトを見ると、「んんんんん???」と思うところがあります。 これらを参考にしたり、コピペする方は、記述されているコードの良し悪しは判断できないかと思います。 そのような方々が参考にできるメールフォームを作りたいという思いで、調べて作りました。 周りに書いたコードを確認してもらえる人もいないので、皆様からのアドバイスがほしいです((_ _ (´ω` )ペコ 【PHP】作成したメールフォームに脆弱性がないか、アドバイスもらえないでしょうかより引用 どれどれ…と確認すると、トークンのチェックが入っているにも関わらずクロスサイト・リクエストフォージ
仕事で使っているPHPアプリケーションをPHP7 beta1で動かしてみたらそのままでは動きませんでした。 私が実際にはまった点を紹介します。 なお、PHP7の変更点についてはhnwさんの記事に詳しく網羅されているのでご一読ください。 PHP7で変わること - hnwの日記 Apacheのモジュール名が変わっていた ApacheにPHPを組み込むためのモジュール(俗にいうmod_php)のモジュール名・ファイル名が変更になっていました。 LoadModule php5_module modules/libphp5.so ↓ LoadModule php7_module modules/libphp7.so memcache extensionがインストールできない PHPからMemcachedを使うためのExtensionには2つあります。 memcache memcached memca
今回はバリデート関数をご紹介します。 いままではフォームの値をチェックするときってだいたいpreg_match関数などでチェックしていたのですが検証専用の関数がありました。 filter関数です。pregでチェックしなくても検証してくれるので楽です。 emailとかの精度になるとどこまで許容するかが問題になるのですが、携帯アドレスのようにアカウントにドットが複数つくとエラーになります。 各フィルターは実際に試したほうがよさそうですね。どれをスルーしてどれを止めるか。デモページで確認してみてください。 スポンサーリンク filter_var関数 バリデート関係や除去関係の関数が含まれています。それぞれの関数を見ていきましょう。下記はマニュアルに例を付け足したものです。 true/falseチェック filter_var(チェックしたい値, FILTER_VALIDATE_BOOLEAN, オ
【2021/10/15 追記】 この記事は更新が停止されています。現在では筆者の思想が変化している面もありますので,過去の記事として参考程度にご覧ください。 予備知識 PHPはフォームから送信された値などをコード実行開始に自動的に変数として使えるようにしてくれる非常に便利なプログラミング言語です.しかし,それをそのまま用いるとエラーが発生したり,脆弱性になってしまったりするケースがたくさんあります.使う前には適当なチェック処理が必要です. どういった変数が対象になるか 以下に挙げられた変数は,ユーザーが勝手に値や構造を書き換えたり,送信をそもそも行わずにアクセスしたりすることが可能な信用できない変数だと思ってください.例え,ラジオボタンで選択肢を限定していたり,隠し要素として埋め込んでいたりしたとしても,これに該当してしまいます.
アマゾンの検索をするとき、PHPでバッチ処理を書いた。PHPで大量のリクエストを発行してAmazonECS結果を見ていた。ふとメモリ消費量を見る。ちびりそうになる。メモリ消費量が上昇し続ける。unset()をしているが、メモリの消費量は変化しない。 立ち止まって考える。当たり前じゃないか。PHPはApacheのリクエスト毎に起動して、リクエスト終了時にメモリから全部消去される。バッチ処理が終わらないとメモリ解放されないのかね。処理が長くなれば不利じゃないか。繰り返し処理でメモリを再利用しない。なら、バッチの大量データを処理に不向きか。一応はコマンドラインで動きます程度なのね。 もし、PHPバッチ処理をするなら、バッチ処理の細切れな生成、消去を短時間に繰り返すしかないのね。 バッチ処理とは大量のデータを夜間などに処理する事。そう記憶している。他スクリプト言語も同じか。元もとメモリ管理が出来な
最低限書いておきたいというよりは、最低限書いて下さいという私の切なる願いかもしれない。 そもそも何故Docコメントを書くのだろうか? メソッドの命名さえ正確に行えるならDocコメントという存在はほぼ必要無いという考えがあり、 それは間違いでは無いでだろう。 しかし… 型が無いためにメソッド名を冗長にしてしまう 以下のコードは税率を取得するだけの単純なものだ。 TAX::getRate()と実行することで税率を取得出来る。 これなら、主語=TAX、述語=getRateと読み取れるので何をしているのか一目瞭然である。 class Tax { private static $tax_rate = 0.8; public static function getRate() { return self::$tax_rate; } } しかし、これは戻ってくる値の型を予約出来る静的片付け言語であればの
「今までテストを書いたことがないから、そろそろテストを書かなくては・・・」という、PHPUnitもテストのこともまだ知らないプログラマにとって、一番最初に欲しいのは「何から始めたらよいのか」を知るためのガイドです。 本書は、PHPUnitを使ったテストの書き方を、短時間で知るための小冊子です。これだけ読めば、PHPUnitでテストを書いていけるようになります。 本書が特徴的なのは、ユニットテストの形式的な書き方だけを単純に説明した本ではないということです。本書では、PHPUnitによるテストを、オブジェクト指向の原則に沿った、良いコードへリファクタリングしていくための道具、と位置づけています。その流れに沿って、必要最低限の基礎知識や、実際にありそうなサンプルコードで使い方が説明されています。モック(テストダブル)を使ったテスト、フィクスチャを使ったテスト、APIのテストといった対象ごとのP
使い捨てレベルで、クローラを作らなくちゃならなくなったので、とりあえず file_get_contents でもループして放置するか…とも思ったけれど、せっかくなので同時に4接続ほどするようにしてみた。PHP5には curl_multi_exec という便利なものがあるので、これを使う。 ソース クローラクラス <?php class multiCrawler{ var $uriArray = array(); var $output = array(); var $timeout = 0; var $ua = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12'; //最大同時接続数 var $accessMaxNum = 4; var $start = 0; /
昔Qiitaで書いた内容なんですが、PHPのswitch文は悪名高い「==」演算子で比較を行います。 <?php switch (true) { case 0: echo '数字の0'; break; case '0': echo '文字列の0'; break; case '0.0': echo '文字列の0.0'; break; case true: echo '真偽値のtrue'; break; } このコードは「文字列の0.0」を出力します。大変分かりにくいですね。 この点はif ... elseif ...を使えば解決するんですが、switchで書きたくなるようなコードをelseifにするとおそらく読みにくくなるでしょう。 ではどうするか。 正解はオブジェクトのポリモーフィズム(多態性)機能を使うことです。 といっても、多態性で調べて出てくる記事とか書籍に関しては抽象的な説明が多い
フレームワークと強そうですが、ものすごく単純化して考えると、以下の1行に集約されます。 View(Action($_GET['url'])); これは何をしているかというと? どこにアクセスされているかを取得する。 ($_GET[‘url’]) 必要な処理を施す。 (Action) 処理の結果を表示する。 (View) どこにアクセスされているかを取得する 思い切って、.htaccessに次のように書いてしまいます。 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] これは「どんなURLを叩いても全てindex.phpを呼ぶ」というものです。(そこに既にファイルが存在しなければ
This webpage was generated by the domain owner using Sedo Domain Parking. Disclaimer: Sedo maintains no relationship with third party advertisers. Reference to any specific service or trade mark is not controlled by Sedo nor does it constitute or imply its association, endorsement or recommendation.
phpとmysqlを使った表の作成 mysqlで作成したデータをphpで取得し、画像右側のような 一覧表にしたいと考えています。 Mysqlから値を取得し、<table>タグで画像左側のような表を 作成することはできたのですが、 phpとmysqlを使った表の作成 mysqlで作成したデータをphpで取得し、画像右側のような 一覧表にしたいと考えています。 Mysqlから値を取得し、<table>タグで画像左側のような表を 作成することはできたのですが、 各項目で重複する値を一つに結合することができません。 それぞれ重複する値の数をカウントし、その値をrowspanにあてはめることができれば うまくいくのではないかと思うのですが、phpでの条件のつけ方や参考になるサイトがあれば 教えて下さい。 ご回答ありがとうございます。 例に出した表だと項目は少ないのですが、実際は全国のデータがあり、商
こんにちは、中川です。 PHPでの開発中のちょっとしたデバッグに、echo や var_dumpで画面に値を出力して確認することがありますよね。 このデバッグ方法は簡単でいいのですが、出力した配列の値などはパッと見で確認しやすいとは言えませんし、画面の表示内容が崩れたりします。 画面に出力しない方法としては、 error_log関数を使ってapacheログやファイルに出力する方法もありますが、 この場合は、サーバ側にログインしてtailなどでファイル内容を確認する必要がでてきます。 そんなちょっとした問題を解決してくれるツール 「Chrome Logger」をご紹介したいと思います。 Chrome Loggerを使えば、JavaScriptのconsole.logのように、 表示画面には影響を与えないでブラウザのデベロッパコンソールにPHPから値を出力できます。 ■Chrome Logge
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く