この記事のモチベーション 「php-fpmとはなにか?」を知るため、PHPのドキュメントを見ました。 しかし、ここに書いていることはまあそうなのですがあまりに焦点が絞られ過ぎてて「php-fpmとはなにか?」に対する答えとしては少し不十分な気がしていました。 例えるなら数学の問題に答えるにあたって、途中式を飛ばしたり証明の過程を飛ばしたりというような感じ。 不十分というのは、それを理解するための段階をすっ飛ばして答えだけが書かれている状態のことを指しています。 その不十分なところを自分も曖昧にしか理解できていない気がしており、いい機会なので整理しておこうというのがこの記事のモチベーションです。 そのためこの記事は、「php-fpmとはなにか?」をプロセス→Webサーバー→実行方式と順を追って説明していく構成になっています。 「細けぇこたぁいいんだ、おらぁ今すぐ答えだけ知りてぇンダ」という方
PHPのソースコード(以下コードと略します)を、暗号化したり難読化する方法についての記事です。便宜上、各単語は以下のような意味合いで使用しています。 暗号化(Encrypt) コードを秘匿する事を目的として、複雑で可逆な変換をかける事。(Blowfish等のイメージ) エンコード(Encode) コードを別の形にする事を目的として、単純で可逆な変換をかける事。(Base64やURLエンコード等のイメージ) 難読化(Obfuscate) コードとしてはそのまま実行可能だが、人間が見ると非常に理解し難い状態にする事。(軽量化よりは頑張るイメージ) 軽量化(Minify) コードの実行結果に影響しないコメント・改行・スペース等を、単純にサクっと削除する事。結果的に難読化にもなる。 しばらくPHP界隈から離れていたため、古い知識や記憶に頼って書いている部分もありますので、ご了承ください。 ionC
こんにちは、開発本部・バックエンドエンジニアの江間です。 先日、 PR TIMES の新規機能としてプレスキット機能の提供が開始されました。 プレスキット機能では、画像コンテンツや PDF などのファイルのアップロード・ダウンロード、サムネイル画像の自動生成など機能を提供しています。 PR TIMES のソースコードはレガシーな PHP で書かれており、少しの機能追加であっても工数が増大したり、これまで通りに実装していくと技術的負債が増えてしまう恐れがありました。また、アップロードされるファイルの容量が大きいという特徴があるプレスキットでは、従来どおりオンプレミス上のストレージサーバーへアップロードすると残容量が更に枯渇させてしまう恐れがありました。 そのような様々ある問題点を回避しながら、今回、新規機能をリリースまで持っていきました。 この記事では、従来のストレージサーバーへアップロード
Lambda で PHP を実行しようと思い、AWS 公式ブログや複数の記事を見たのですが、現時点では手順通りに動かなかったのでハマりました。 解決策として、2 つの方法を見つけたので紹介します。 結論 Serverless Framework を使用する AWS Serverless Application Model (AWS SAM) を使用する 経緯 Lambda で PHP を実行する方法について検索すると、AWS 公式ブログの内容をもとにした記事がいくつかヒットします。 AWS 公式の内容だから手順通りに実行すればできると思っていたのですが、GitHub の手順通りに実行したところ、デプロイ後に以下のエラーが発生しました。 { "errorMessage": "RequestId: 0d280a9a-152b-4876-998f-193e24f2d143 Error: Runt
はじめに CakePHP3がリリースされてから、夢のように年月が経ってしまいました。そのCakePHP3も来年にはサポート終了となり、現行バージョンはCakePHP4、すでにCakePHP5の開発も始まっています。そして、残念ながら、CakePHP2は今年の6月にサポート終了となっています。 しかし、CakePHP2で作られたアプリケーションをCakePHP3以降にアップグレードするのは困難です。特にbaserCMSの場合には、CMSという性質上、仮にbaserCMS自体をアップグレードできたとしても、今度は利用者の方がアプリケーション、作成したテーマ、プラグインなどをアップグレードする必要があります。 もっと簡単に、新機能だけをつまみ食いするような形で段階的なアップグレードを行えないかずっと悩んでいたのですが、よい考えは浮かびませんでした。 そんな中、3年ほど前に仕事の都合でLarave
サーバ設定によりますが、PHP のデフォルトではアップロードできるファイルサイズの容量は2MBになっていることが多いです。 この設定を変更するにはサーバ内のphp.iniの書き換えが必要ですが、root権限が必要だったり、初心者だと直接そのあたりを書き換えるのが非常に恐ろしかったりします。 そこで、ドキュメントルートやサーバごとに指定された場所に自分で作った.htaccessファイルやphp.iniファイルを置き、サーバデフォルトの設定を上書きする、というケースがあります。 内容は、いろいろなブログで数多くの人が書いてくれています。 今から書くことに特に目新しいことはありませんが、.htaccessにする場合とphp.iniにする場合とで書き方が微妙に違うのでそれを併記しておきます。 まぁ、恒例の覚え書きですね。私は、この書き方の違いに気づいてなくて、何度やっても失敗して諦めたという過去が
PHP 8.1へのアップグレードにまつわるまとめ PHP 8.1へのアップグレードには、mbstringにまつわるマニュアルに記述されない後方互換性のない変更が含まれることがあります。そのことを周知するべく、この記事を書くことにしました。 私てきめんは、PHPカンファレンス 2022にて、「治っていくmbstring 令和時代の文字化け」というタイトルでトークしています。以下スライドも参考にしてください。 Major overhaul of mbstringについて PHP 8.1から、Major overhaul of mbstringと呼ばれる、mbstringの大規模改修の内容が反映されるようになりました。困ったことに、RFC(Request For Comments)やChangelog、マニュアルにない内容で、mbstringを多用するPHPユーザーにとてつもない困惑をもたらすこ
/etc/php-fpm.d/www.conf (RHEL/CentOS) /etc/php/7.4/fpm/pool.d/www.conf (Ubuntu20.04) Webサーバーとphp-fpmを実行するのが同じマシンであれば、UNIXドメインソケットを使ったほうが処理が速い [www] listen = /var/run/php-fpm/php-fpm-www.sock user = www #プロセスの実行ユーザー group = www #プロセスの実行グループ listen.owner = nginx #ソケットのオーナー(Webサーバがソケットに対して読み書き可能にする) listen.group = nginx #ソケットのグループ listen.mode = 0660 #ソケットのパーミッション pm = static pm.max_children = 2 pm.ma
PHPを実行する環境として、FPMも有用です。ただし、FPM内から環境変数を参照するには、いくつもの壁が立ちはだかっています。 環境変数の使い方 データベースのアクセスキーやAPIのキーなどのような、Gitに残すのが適当でない情報や、データベースサーバの位置や環境設定の切り替え用のフラグなど、環境ごとに変更が必要な情報は、環境変数に入れておいてアクセスする、というのがサーバサイドでの定石のようになっています。 そういうわけで、システム側で環境変数を用意してPHPから読み取らせようとしたのですが、見事に失敗してしまいました。 PHP-FPMとは Webサーバで動的なページを供給しようとする場合、いくつかの手段があります。 Webサーバから別プロセスを呼び出す Webサーバにプログラムを組み込む 動的なページを処理するアプリケーションサーバを用意して、Webサーバがそちらに投げる いちばん最初
LaravelのクエリビルダとEloquentの違いとは? バックエンド Laravel 先輩方のコードをパクりながらlaravelを書き始めて半年くらい経ちましたが、 DB操作するときのクエリビルダとEloquent何が違うの?という疑問がずっとあったのでまとめてみました。 //クエリビルダ DB::table('orders')->where('cancelFag','0')>get(); //Eloquant Order::where('cancelFag','0')>get(); ↑同じでは…? 何が違うの?クエリビルダはPHPの書き方でSQLクエリを作成し、実行することができます。 戻り値はDBの取得値をコレクションにしたものです。 EloquentはlaravelのORM(オブジェクト関係マッピング)です。 二次元の表であるDBのレコードと、PHPのオブジェクトを対応させて、扱
この記事は GMOアドマーケティング Advent Calendar 2021 3日目の記事です。 GMOアドマーケティングのK.Mです。 オンライン開催はYouTubeLiveにより実施され、ボランティアの方によりLive動画はセッション毎に分割されました。 それでは、個人的に良かったセッションを紹介します。 1.PHPで学ぶオブジェクト指向プログラミング入門 参加された小学生からも分かりやすいと言われており、とても理解しやすい説明でした。 個人的に刺激を受けたのは「愚者は経験に学び、賢者は歴史に学ぶ」 歴史を学べは進化の過程だけでなく、未来まで想像出来そう。 2.MySQLとインデックスとPHPer -PHPが本職でもMySQLを手懐けるために 難しい事を、初心者にわかり易く説明できる人ってあまり居ないと感じていますが、相手が得意な事や良く知っている事に極力合わせて説明すると、ここまで
<?php declare(strict_types=1); /** * UUID version 4 */ class UuidV4Factory { const PATTERN = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'; /** * UUID 生成 * @return string * @throws \Exception */ public static function generate(): string { $chars = str_split(self::PATTERN); foreach ($chars as $i => $char) { if ($char === 'x') { $chars[$i] = dechex(random_int(0, 15)); } elseif ($char === 'y') { $chars[$i]
今回からはMagentoのエクステンションの作り方をご紹介していきます。 Magentoをカスタマイズする場合、大きく分けて以下の2つの作業領域がでてきます。 テーマのカスタマイズ 機能のカスタマイズ エクステンションの作成は「機能のカスタマイズ」に当たる領域で、他のCMSやアプリケーションでは「プラグイン開発」とも呼ばれたりします。エクステンション開発ができるようになると、標準では不足する機能を自作できるようになり、Magentoを良い形でカスタマイズできるようになります。 エクステンションを作り始める前に 早速エクステンションの作り方をご紹介しよう、と思ったのですが、その前にMagentoのディレクトリ構成を解説しておきましょう。Magentoのディレクトリ構成を理解しないまま作業を始めてしまうと、いじってはいけないファイルをいじってしまい、取り返しのつかないことになる恐れがあります。
Apache HTTP Server (v2.4) でのPHPの動作に必要な設定としてhttpd.confや.htaccessでのSetHandlerによる拡張子の割り当てがある。 しかし,ネット上では,AddTypeやSetHandler,AddHandlerなどを使った設定も見かける。これらの違いがよくわからなかったので,整理する。 結論からいうと,AddTypeとAddHandlerを複数拡張子のファイルにマッチする脆弱性があるため使う必要はなく,常にSetHandlerを使えばよい。 AddTypeは指定した拡張子を指定したコンテントタイプ (メディアタイプ,MIME) に割り当てる。同じ拡張子のマッピングの場合は上書きする。 AddType image/gif .gif一度に複数の拡張子をMIMEタイプに割り当てることもできる。 AddType image/jpeg jpeg j
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く