laravel version 8.5.9 installしたときにインストールされるライブラリを調査
インストールコマンド
composer create-project laravel/laravel --prefer-dist ProjectName
インストール時のログ
ログを見る
username@servername:/var/www$ composer create-project laravel/laravel --prefer-dist ProjectName Creating a "laravel/laravel" project at "./ProjectName" Installing laravel/laravel (v8.5.9) - Installing laravel/laravel (v8.5.9): Extracting archive Created project in /var/www/ProjectName > @php -r "file_exists('.env') || copy('.env.example', '.env');" Loading composer repositories with package information Updating dependencies Lock file operations: 105 installs, 0 updates, 0 removals - Locking asm89/stack-cors (v2.0.2) - Locking brick/math (0.9.2) - Locking dnoegel/php-xdg-base-dir (v0.1.1) - Locking doctrine/inflector (2.0.3) - Locking doctrine/instantiator (1.4.0) - Locking doctrine/lexer (1.2.1) - Locking dragonmantank/cron-expression (v3.1.0) - Locking egulias/email-validator (2.1.25) - Locking facade/flare-client-php (1.3.7) - Locking facade/ignition (2.5.11) - Locking facade/ignition-contracts (1.0.2) - Locking fakerphp/faker (v1.13.0) - Locking fideloper/proxy (4.4.1) - Locking filp/whoops (2.9.2) - Locking fruitcake/laravel-cors (v2.0.3) - Locking graham-campbell/result-type (v1.0.1) - Locking guzzlehttp/guzzle (7.2.0) - Locking guzzlehttp/promises (1.4.0) - Locking guzzlehttp/psr7 (1.7.0) - Locking hamcrest/hamcrest-php (v2.0.1) - Locking laravel/framework (v8.27.0) - Locking laravel/sail (v1.3.1) - Locking laravel/tinker (v2.6.0) - Locking league/commonmark (1.5.7) - Locking league/flysystem (1.1.3) - Locking league/mime-type-detection (1.7.0) - Locking mockery/mockery (1.4.2) - Locking monolog/monolog (2.2.0) - Locking myclabs/deep-copy (1.10.2) - Locking nesbot/carbon (2.45.1) - Locking nikic/php-parser (v4.10.4) - Locking nunomaduro/collision (v5.3.0) - Locking opis/closure (3.6.1) - Locking phar-io/manifest (2.0.1) - Locking phar-io/version (3.0.4) - Locking phpdocumentor/reflection-common (2.2.0) - Locking phpdocumentor/reflection-docblock (5.2.2) - Locking phpdocumentor/type-resolver (1.4.0) - Locking phpoption/phpoption (1.7.5) - Locking phpspec/prophecy (1.12.2) - Locking phpunit/php-code-coverage (9.2.5) - Locking phpunit/php-file-iterator (3.0.5) - Locking phpunit/php-invoker (3.1.1) - Locking phpunit/php-text-template (2.0.4) - Locking phpunit/php-timer (5.0.3) - Locking phpunit/phpunit (9.5.2) - Locking psr/container (1.0.0) - Locking psr/event-dispatcher (1.0.0) - Locking psr/http-client (1.0.1) - Locking psr/http-message (1.0.1) - Locking psr/log (1.1.3) - Locking psr/simple-cache (1.0.1) - Locking psy/psysh (v0.10.6) - Locking ralouphie/getallheaders (3.0.3) - Locking ramsey/collection (1.1.3) - Locking ramsey/uuid (4.1.1) - Locking sebastian/cli-parser (1.0.1) - Locking sebastian/code-unit (1.0.8) - Locking sebastian/code-unit-reverse-lookup (2.0.3) - Locking sebastian/comparator (4.0.6) - Locking sebastian/complexity (2.0.2) - Locking sebastian/diff (4.0.4) - Locking sebastian/environment (5.1.3) - Locking sebastian/exporter (4.0.3) - Locking sebastian/global-state (5.0.2) - Locking sebastian/lines-of-code (1.0.3) - Locking sebastian/object-enumerator (4.0.4) - Locking sebastian/object-reflector (2.0.4) - Locking sebastian/recursion-context (4.0.4) - Locking sebastian/resource-operations (3.0.3) - Locking sebastian/type (2.3.1) - Locking sebastian/version (3.0.2) - Locking swiftmailer/swiftmailer (v6.2.5) - Locking symfony/console (v5.2.3) - Locking symfony/css-selector (v5.2.3) - Locking symfony/deprecation-contracts (v2.2.0) - Locking symfony/error-handler (v5.2.3) - Locking symfony/event-dispatcher (v5.2.3) - Locking symfony/event-dispatcher-contracts (v2.2.0) - Locking symfony/finder (v5.2.3) - Locking symfony/http-client-contracts (v2.3.1) - Locking symfony/http-foundation (v5.2.3) - Locking symfony/http-kernel (v5.2.3) - Locking symfony/mime (v5.2.3) - Locking symfony/polyfill-ctype (v1.22.0) - Locking symfony/polyfill-iconv (v1.22.0) - Locking symfony/polyfill-intl-grapheme (v1.22.0) - Locking symfony/polyfill-intl-idn (v1.22.0) - Locking symfony/polyfill-intl-normalizer (v1.22.0) - Locking symfony/polyfill-mbstring (v1.22.0) - Locking symfony/polyfill-php72 (v1.22.0) - Locking symfony/polyfill-php73 (v1.22.0) - Locking symfony/polyfill-php80 (v1.22.0) - Locking symfony/process (v5.2.3) - Locking symfony/routing (v5.2.3) - Locking symfony/service-contracts (v2.2.0) - Locking symfony/string (v5.2.3) - Locking symfony/translation (v5.2.3) - Locking symfony/translation-contracts (v2.3.0) - Locking symfony/var-dumper (v5.2.3) - Locking theseer/tokenizer (1.2.0) - Locking tijsverkoyen/css-to-inline-styles (2.2.3) - Locking vlucas/phpdotenv (v5.3.0) - Locking voku/portable-ascii (1.5.6) - Locking webmozart/assert (1.9.1) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 105 installs, 0 updates, 0 removals - Downloading nesbot/carbon (2.45.1) - Downloading laravel/framework (v8.27.0) - Downloading facade/ignition (2.5.11) - Downloading laravel/sail (v1.3.1) - Installing doctrine/inflector (2.0.3): Extracting archive - Installing doctrine/lexer (1.2.1): Extracting archive - Installing symfony/polyfill-ctype (v1.22.0): Extracting archive - Installing webmozart/assert (1.9.1): Extracting archive - Installing dragonmantank/cron-expression (v3.1.0): Extracting archive - Installing symfony/polyfill-php80 (v1.22.0): Extracting archive - Installing symfony/polyfill-mbstring (v1.22.0): Extracting archive - Installing symfony/var-dumper (v5.2.3): Extracting archive - Installing symfony/polyfill-intl-normalizer (v1.22.0): Extracting archive - Installing symfony/polyfill-intl-grapheme (v1.22.0): Extracting archive - Installing symfony/string (v5.2.3): Extracting archive - Installing psr/container (1.0.0): Extracting archive - Installing symfony/service-contracts (v2.2.0): Extracting archive - Installing symfony/polyfill-php73 (v1.22.0): Extracting archive - Installing symfony/console (v5.2.3): Extracting archive - Installing psr/log (1.1.3): Extracting archive - Installing monolog/monolog (2.2.0): Extracting archive - Installing voku/portable-ascii (1.5.6): Extracting archive - Installing phpoption/phpoption (1.7.5): Extracting archive - Installing graham-campbell/result-type (v1.0.1): Extracting archive - Installing vlucas/phpdotenv (v5.3.0): Extracting archive - Installing symfony/css-selector (v5.2.3): Extracting archive - Installing tijsverkoyen/css-to-inline-styles (2.2.3): Extracting archive - Installing symfony/deprecation-contracts (v2.2.0): Extracting archive - Installing symfony/routing (v5.2.3): Extracting archive - Installing symfony/process (v5.2.3): Extracting archive - Installing symfony/polyfill-php72 (v1.22.0): Extracting archive - Installing symfony/polyfill-intl-idn (v1.22.0): Extracting archive - Installing symfony/mime (v5.2.3): Extracting archive - Installing symfony/http-foundation (v5.2.3): Extracting archive - Installing symfony/http-client-contracts (v2.3.1): Extracting archive - Installing psr/event-dispatcher (1.0.0): Extracting archive - Installing symfony/event-dispatcher-contracts (v2.2.0): Extracting archive - Installing symfony/event-dispatcher (v5.2.3): Extracting archive - Installing symfony/error-handler (v5.2.3): Extracting archive - Installing symfony/http-kernel (v5.2.3): Extracting archive - Installing symfony/finder (v5.2.3): Extracting archive - Installing symfony/polyfill-iconv (v1.22.0): Extracting archive - Installing egulias/email-validator (2.1.25): Extracting archive - Installing swiftmailer/swiftmailer (v6.2.5): Extracting archive - Installing ramsey/collection (1.1.3): Extracting archive - Installing brick/math (0.9.2): Extracting archive - Installing ramsey/uuid (4.1.1): Extracting archive - Installing psr/simple-cache (1.0.1): Extracting archive - Installing opis/closure (3.6.1): Extracting archive - Installing symfony/translation-contracts (v2.3.0): Extracting archive - Installing symfony/translation (v5.2.3): Extracting archive - Installing nesbot/carbon (2.45.1): Extracting archive - Installing league/mime-type-detection (1.7.0): Extracting archive - Installing league/flysystem (1.1.3): Extracting archive - Installing league/commonmark (1.5.7): Extracting archive - Installing laravel/framework (v8.27.0): Extracting archive - Installing filp/whoops (2.9.2): Extracting archive - Installing facade/ignition-contracts (1.0.2): Extracting archive - Installing facade/flare-client-php (1.3.7): Extracting archive - Installing facade/ignition (2.5.11): Extracting archive - Installing fakerphp/faker (v1.13.0): Extracting archive - Installing fideloper/proxy (4.4.1): Extracting archive - Installing asm89/stack-cors (v2.0.2): Extracting archive - Installing fruitcake/laravel-cors (v2.0.3): Extracting archive - Installing psr/http-message (1.0.1): Extracting archive - Installing psr/http-client (1.0.1): Extracting archive - Installing ralouphie/getallheaders (3.0.3): Extracting archive - Installing guzzlehttp/psr7 (1.7.0): Extracting archive - Installing guzzlehttp/promises (1.4.0): Extracting archive - Installing guzzlehttp/guzzle (7.2.0): Extracting archive - Installing laravel/sail (v1.3.1): Extracting archive - Installing nikic/php-parser (v4.10.4): Extracting archive - Installing dnoegel/php-xdg-base-dir (v0.1.1): Extracting archive - Installing psy/psysh (v0.10.6): Extracting archive - Installing laravel/tinker (v2.6.0): Extracting archive - Installing hamcrest/hamcrest-php (v2.0.1): Extracting archive - Installing mockery/mockery (1.4.2): Extracting archive - Installing nunomaduro/collision (v5.3.0): Extracting archive - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive - Installing phpdocumentor/type-resolver (1.4.0): Extracting archive - Installing phpdocumentor/reflection-docblock (5.2.2): Extracting archive - Installing sebastian/version (3.0.2): Extracting archive - Installing sebastian/type (2.3.1): Extracting archive - Installing sebastian/resource-operations (3.0.3): Extracting archive - Installing sebastian/recursion-context (4.0.4): Extracting archive - Installing sebastian/object-reflector (2.0.4): Extracting archive - Installing sebastian/object-enumerator (4.0.4): Extracting archive - Installing sebastian/global-state (5.0.2): Extracting archive - Installing sebastian/exporter (4.0.3): Extracting archive - Installing sebastian/environment (5.1.3): Extracting archive - Installing sebastian/diff (4.0.4): Extracting archive - Installing sebastian/comparator (4.0.6): Extracting archive - Installing sebastian/code-unit (1.0.8): Extracting archive - Installing sebastian/cli-parser (1.0.1): Extracting archive - Installing phpunit/php-timer (5.0.3): Extracting archive - Installing phpunit/php-text-template (2.0.4): Extracting archive - Installing phpunit/php-invoker (3.1.1): Extracting archive - Installing phpunit/php-file-iterator (3.0.5): Extracting archive - Installing theseer/tokenizer (1.2.0): Extracting archive - Installing sebastian/lines-of-code (1.0.3): Extracting archive - Installing sebastian/complexity (2.0.2): Extracting archive - Installing sebastian/code-unit-reverse-lookup (2.0.3): Extracting archive - Installing phpunit/php-code-coverage (9.2.5): Extracting archive - Installing doctrine/instantiator (1.4.0): Extracting archive - Installing phpspec/prophecy (1.12.2): Extracting archive - Installing phar-io/version (3.0.4): Extracting archive - Installing phar-io/manifest (2.0.1): Extracting archive - Installing myclabs/deep-copy (1.10.2): Extracting archive - Installing phpunit/phpunit (9.5.2): Extracting archive 75 package suggestions were added by new dependencies, use `composer suggest` to see details. Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi Discovered Package: facade/ignition Discovered Package: fideloper/proxy Discovered Package: fruitcake/laravel-cors Discovered Package: laravel/sail Discovered Package: laravel/tinker Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Package manifest generated successfully. 74 packages you are using are looking for funding. Use the `composer fund` command to find out more! > @php artisan key:generate --ansi Application key set successfully.
インストールされたライブラリを調査
package | 内容 | host |
---|---|---|
asm89/stack-cors (v2.0.2) | アプリケーションを使用してhttp- {foundation、kernel}のクロスオリジンリソース共有を可能にするライブラリとミドルウェア。オリジン間リソース共有のためのW3C勧告の実装を試み ます。 | github |
brick/math (0.9.2) | 任意精度の数値を処理するPHPライブラリ。 | github |
dnoegel/php-xdg-base-dir (v0.1.1) | PHP用のXDGベースディレクトリ仕様の実装 | github |
doctrine/inflector (2.0.3) | Doctrine Inflectorは、大文字/小文字および単数形/複数形の単語に関して文字列操作を実行できる小さなライブラリです。 | github |
doctrine/instantiator (1.4.0) | このライブラリは、PHPクラスをインスタンス化するときにコンストラクターの使用を回避する方法を提供します。 | github |
doctrine/lexer (1.2.1) | トップダウンの再帰下降パーサーで使用できるレクサーのベースライブラリ。 | github |
dragonmantank/cron-expression (v3.1.0) | PHP cron式パーサーは、CRON式を解析し、実行が予定されているかどうかを判断し、式の次の実行日を計算し、式の前の実行日を計算できます。n個の一致する日付をスキップすることにより、はるか未来または過去の日付を計算できます。 | github |
egulias/email-validator (2.1.25) | 複数のRFCに対して電子メールを検証するためのライブラリ。 | github |
facade/flare-client-php (1.3.7) | PHPエラーをFlareに送信する | github |
facade/ignition (2.5.11) | Ignitionは、Laravel5.5以降で実行されているLaravelアプリケーション用の美しくカスタマイズ可能なエラーページです。 | github |
facade/ignition-contracts (1.0.2) | IgnitionとFlareでソリューションを表示するために使用されるインターフェイス | github |
fakerphp/faker (v1.13.0) | Fakerは、偽のデータを生成するPHPライブラリ | github |
fideloper/proxy (4.4.1) | 信頼できるプロキシを設定すると、リバースプロキシの背後にある場合に、正しいURL生成、リダイレクト、セッション処理、およびLaravelへのログインが可能になります。 | github |
filp/whoops (2.9.2) | whoopsは、PHPのエラーハンドラフレームワークです。 | github |
fruitcake/laravel-cors (v2.0.3) | Laravelにhttps://github.com/asm89/stack-corsを実装します | github |
graham-campbell/result-type (v1.0.1) | 結果タイプの実装 | github |
guzzlehttp/guzzle (7.2.0) | GuzzleはPHPHTTPクライアントであり、HTTPリクエストの送信を簡単にし、Webサービスとの統合を簡単にします。 | github |
guzzlehttp/promises (1.4.0) | スタックサイズを一定に保ちながら、「無限の」Promiseチェーンを可能にする、Promiseチェーンと解決を繰り返し処理するPromises / A +実装。 | github |
guzzlehttp/psr7 (1.7.0) | 完全なPSR-7 メッセージの実装、いくつかのストリームデコレータ、およびクエリ文字列の解析などの便利な機能が含まれています。 | github |
hamcrest/hamcrest-php (v2.0.1) | Hamcrestは、もともとJava用に作成されたマッチングライブラリですが、その後、他の多くの言語に移植されました。hamcrest-phpはHamcrestの公式PHPポートであり、基本的にHamcrest用の元のJava APIの直訳に従いますが、いくつかの例外がありますが、ほとんどがPHP言語の壁にまで及びます。 | github |
laravel/framework (v8.27.0) | Laravelは、表現力豊かでエレガントな構文を備えたWebアプリケーションフレームワークです。 | github |
laravel/sail (v1.3.1) | Sailは、macOS、Windows(WSL2)、およびLinuxと互換性のあるLaravelのDockerを利用したローカル開発エクスペリエンスを提供します。Dockerを除いて、Sailを使用する前にローカルコンピューターにソフトウェアやライブラリをインストールする必要はありません。SailのシンプルなCLIは、Dockerの経験がなくてもLaravelアプリケーションの構築を開始できることを意味します。 | github |
laravel/tinker (v2.6.0) | Laravel Tinkerは、Laravelフレームワークの強力なREPLです。 | github |
league/commonmark (1.5.7) | 高度に拡張可能なPHP Markdownのパーサ | github |
league/flysystem (1.1.3) | PHP用のファイルストレージライブラリです。これは、多くのタイプのファイルシステムと対話するための1つのインターフェースを提供します。Flysystemを使用すると、ベンダーロックインから保護されるだけでなく、どのストレージが適切であるかについて一貫したエクスペリエンスを得ることができます。 | github |
league/mime-type-detection (1.7.0) | このパッケージは、finfoベースの実装を備えた汎用のmimeタイプの検出インターフェイスを提供します 。 | github |
mockery/mockery (1.4.2) | Mockeryは、PHPUnit、PHPSpec、またはその他のテストフレームワークを使用した単体テストで使用するためのシンプルでありながら柔軟なPHPモックオブジェクトフレームワークです。 | github |
monolog/monolog (2.2.0) | Monologは、ログをファイル、ソケット、受信ボックス、データベース、およびさまざまなWebサービスに送信します。以下のハンドラーの完全なリストを参照してください。特別なハンドラーを使用すると、高度なロギング戦略を構築できます。 | github |
myclabs/deep-copy (1.10.2) | DeepCopyは、オブジェクトのディープコピー(クローン)を作成するのに役立ちます。これは、関連グラフのサイクルを処理するように設計されています。 | github |
nesbot/carbon (2.45.1) | DateTimeの国際的なPHP拡張。 | github |
nikic/php-parser (v4.10.4) | これは、PHPで記述されたPHP5.2からPHP8.0のパーサーです。その目的は、静的コードの分析と操作を簡素化することです。 | github |
nunomaduro/collision (v5.3.0) | コマンドラインからアプリを操作するときに美しいエラーレポートを提供するように設計されたパッケージです。 | github |
opis/closure (3.6.1) | すべてのクロージャーをシリアル化できるラッパーを提供することにより、クロージャーのシリアル化に関するPHPの制限を克服することを目的としたライブラリです。 | github |
phar-io/manifest (2.0.1) | PHPアーカイブ(PHAR)からphar.ioマニフェスト情報を読み取るためのコンポーネント。 | github |
phar-io/version (3.0.4) | バージョン情報と制約を処理するためのライブラリ | github |
phpdocumentor/reflection-common (2.2.0) | 一般的なリフレクションクラス | github |
phpdocumentor/reflection-docblock (5.2.2) | PHPDoc標準と100%互換性のあるDocBlockパーサーを提供します。このコンポーネントを使用すると、ライブラリはDocBlockを介して注釈のサポートを提供したり、DocBlockに埋め込まれている情報を取得したりできます。 | github |
phpdocumentor/type-resolver (1.4.0) | 部分的なクラス名を解決しながら、指定された式の一連の値オブジェクトを返し、部分的な構造要素名を完全修飾構造要素名に解決した後、FQSENオブジェクトを返します。 | github |
phpoption/phpoption (1.7.5) | PHPのオプションタイプを実装しています。 | github |
phpspec/prophecy (1.12.2) | PHPオブジェクトモックフレームワーク | github |
phpunit/php-code-coverage (9.2.5) | PHPコードカバレッジ情報の収集、処理、およびレンダリング機能を提供します。 | github |
phpunit/php-file-iterator (3.0.5) | サフィックスのリストに基づいてファイルをフィルタリングするFilterIteratorの実装。 | github |
phpunit/php-invoker (3.1.1) | タイムアウトで呼び出し可能オブジェクトを呼び出す | github |
phpunit/php-text-template (2.0.4) | シンプルなテンプレートエンジン。 | github |
phpunit/php-timer (5.0.3) | タイミングのユーティリティクラス | github |
phpunit/phpunit (9.5.2) | PHPユニットテストフレームワーク。 | github |
psr/container (1.0.0) | 共通コンテナインターフェース(PHP FIG PSR-11) | github |
psr/event-dispatcher (1.0.0) | イベント処理用の標準インターフェース。 | github |
psr/http-client (1.0.1) | HTTPクライアントの共通インターフェース | github |
psr/http-message (1.0.1) | HTTPメッセージの共通インターフェース | github |
psr/log (1.1.3) | ライブラリをログに記録するための共通インターフェイス | github |
psr/simple-cache (1.0.1) | 単純なキャッシュのための共通インターフェース | github |
psy/psysh (v0.10.6) | 最新のPHP用のインタラクティブシェル。 | github |
ralouphie/getallheaders (3.0.3) | これはの単純なポリフィルです | github |
ramsey/collection (1.1.3) | コレクションを表現および操作するためのPHP7.2以降のライブラリ。 | github |
ramsey/uuid (4.1.1) | ユニバーサル一意識別子(UUID)を生成および操作するためのPHPライブラリ。 | github |
sebastian/cli-parser (1.0.1) | CLIオプションを解析するためのライブラリ | github |
sebastian/code-unit (1.0.8) | PHPコードユニットを表す値オブジェクトのコレクション | github |
sebastian/code-unit-reverse-lookup (2.0.3) | コード行が属する関数またはメソッドを検索します | github |
sebastian/comparator (4.0.6) | PHP値が等しいかどうかを比較する機能を提供します | github |
sebastian/complexity (2.0.2) | PHPコードユニットの複雑さを計算するためのライブラリ | github |
sebastian/diff (4.0.4) | 差分の実装 | github |
sebastian/environment (5.1.3) | HHVM / PHP環境を処理する機能を提供します | github |
sebastian/exporter (4.0.3) | 視覚化のためにPHP変数をエクスポートする機能を提供します | github |
sebastian/global-state (5.0.2) | グローバル状態のスナップショット | github |
sebastian/lines-of-code (1.0.3) | PHPソースコードのコード行をカウントするためのライブラリ | github |
sebastian/object-enumerator (4.0.4) | 配列構造とオブジェクトグラフをトラバースして、参照されているすべてのオブジェクトを列挙します | github |
sebastian/object-reflector (2.0.4) | 継承された属性と非公開の属性を含むオブジェクト属性の反映を許可します | github |
sebastian/recursion-context (4.0.4) | PHP変数を再帰的に処理する機能を提供します | github |
sebastian/resource-operations (3.0.3) | リソースを操作するPHP組み込み関数のリストを提供します | github |
sebastian/type (2.3.1) | PHP型システムの型を表す値オブジェクトのコレクション | github |
sebastian/version (3.0.2) | GitがホストするPHPプロジェクトのバージョン番号の管理に役立つライブラリ | github |
swiftmailer/swiftmailer (v6.2.5) | PHP用のコンポーネントベースのメーリングソリューション | github |
symfony/console (v5.2.3) | コンソールコンポーネントを使用すると、美しくテスト可能なコマンドラインインターフェイスを簡単に作成できます。 | github |
symfony/css-selector (v5.2.3) | CSSセレクターをXPath式に変換します | github |
symfony/deprecation-contracts (v2.2.0) | 非推奨通知をトリガーするための一般的な関数と規則 | github |
symfony/error-handler (v5.2.3) | エラーを管理し、PHPコードのデバッグを容易にするツールを提供します | github |
symfony/event-dispatcher (v5.2.3) | イベントをディスパッチしてリッスンすることにより、アプリケーションコンポーネントが相互に通信できるようにするツールを提供します | github |
symfony/event-dispatcher-contracts (v2.2.0) | イベントのディスパッチに関連する一般的な抽象化 | github |
symfony/finder (v5.2.3) | 直感的な流暢なインターフェースを介してファイルとディレクトリを検索します | github |
symfony/http-client-contracts (v2.3.1) | HTTPクライアントに関連する一般的な抽象化 | github |
symfony/http-foundation (v5.2.3) | HTTP仕様のオブジェクト指向レイヤーを定義します | github |
symfony/http-kernel (v5.2.3) | リクエストをレスポンスに変換するための構造化されたプロセスを提供します | github |
symfony/polyfill-ctype (v1.22.0) | ctype_*、ctype拡張子なしでphpバージョンを実行するユーザーに関数を提供します。 | github |
symfony/polyfill-iconv (v1.22.0) | php.net / iconv関数のネイティブPHP実装を提供し ます | github |
symfony/polyfill-intl-grapheme (v1.22.0) | Intl拡張機能からの Grapheme関数の部分的なネイティブPHP実装を提供します 。 | github |
symfony/polyfill-intl-idn (v1.22.0) | Intl拡張子なしでphpバージョンを実行するユーザーに提供idn_to_asciiおよびidn_to_utf8機能します。 | github |
symfony/polyfill-intl-normalizer (v1.22.0) | Normalizer、Intl拡張機能によって提供されるクラスのフォールバック実装を 提供 | github |
symfony/polyfill-mbstring (v1.22.0) | Mbstring拡張機能の部分的なネイティブPHP実装を提供 | github |
symfony/polyfill-php72 (v1.22.0) | PHP7.2コアに追加された関数を提供します。 | github |
symfony/polyfill-php73 (v1.22.0) | PHP7.3コアに追加された関数を提供します。 | github |
symfony/polyfill-php80 (v1.22.0) | PHP8.0コアに追加された機能を提供します。 | github |
symfony/process (v5.2.3) | プロセスコンポーネントは、サブプロセスでコマンドを実行します。 | github |
symfony/routing (v5.2.3) | ルーティングコンポーネントは、HTTP要求を一連の構成変数にマップします。 | github |
symfony/service-contracts (v2.2.0) | ライティングサービスに関連する一般的な抽象化 | github |
symfony/string (v5.2.3) | 文字列にオブジェクト指向APIを提供し、バイト、UTF-8コードポイント、および書記素クラスターを統一された方法で処理します。 | github |
symfony/translation (v5.2.3) | 翻訳コンポーネントは、アプリケーションを国際化するためのツールを提供します。 | github |
symfony/translation-contracts (v2.3.0) | Symfonyコンポーネントから抽出された抽象化のセット。 | github |
symfony/var-dumper (v5.2.3) | 任意のPHP変数をウォークスルーするためのメカニズムを提供します。のdump()代わりに使用できるより優れた関数を提供します | github |
theseer/tokenizer (1.2.0) | トークン化されたPHPソースコードをXMLに変換するための小さなライブラリ。 | github |
tijsverkoyen/css-to-inline-styles (2.2.3) | PHP CssToInlineStylesは、HTMLをインラインスタイルのHTMLに変換するクラスです。 | github |
vlucas/phpdotenv (v5.3.0) | 環境変数をから.envにgetenv()、$ENVそして$SERVER自動的にロードします。 | github |
voku/portable-ascii (1.5.6) | これはPHP(PHP 7+)で記述されており、サーバー上で「mbstring」、「iconv」、またはその他の追加のエンコーディングphp-extensionなしで機能します。 | github |
webmozart/assert (1.9.1) | この拡張機能の主な範囲は、Webmozart\Assert検証後にphpstanがオブジェクトのタイプを検出できるようにすることです。 | github |
気になったキーワード
Tidelift
オープンソースソフトウェアを継続的に保守してもらうためのマネタイズの仕組み
顧客→Tidelift→オープンソースソフトウェアのメンテナーの流れで報酬が支払われる
REPL
REPL (Read-Eval-Print Loop) とは、入力・評価・出力のループのこと。 インタプリタにおいて、ユーザーとインタプリタが対話的にコード片を実行できるもの。
FQSEN
完全修飾要素名 Fully Qualified Structural Element Name (FQSEN)
Optionタイプ
Optionタイプを使用すると、API開発者はより簡潔なAPIメソッドを提供でき、APIユーザーがこれらのメソッドをどのように使用するかを決定できます。
PSR-11
PSR-11では、依存性注入コンテナの共通インタフェースについて定義しています。
PSR
PSR(PHP Standards Recommendations = PHP標準勧告)とは、PHP-FIG(PHP Framework Interop Group = PHPフレームワーク相互運用性グループ)が策定しているPHPコーディング規約
ポリフィル
ポリフィルとは、最近の機能をサポートしていない古いブラウザーで、その機能を使えるようにするためのコード
UUID
UUID(Universally Unique Identifier)とは、ソフトウェア上でオブジェクトを一意に識別するための識別子
laravel8でsqlite使うときは空ファイルを事前に作成しておくこと
sqliteでmigrateしたときにエラーになって進まなかったので、調査しました。 本エントリは、その結果です。
事象
create-project でlaravelプロジェクトを作成して、.envを以下のように修正
DB_CONNECTION=sqlite #DB_CONNECTION=mysql #DB_HOST=127.0.0.1 #DB_PORT=3306 #DB_DATABASE=laravel #DB_USERNAME=root #DB_PASSWORD=
そして、migrate 実行
[username@hostname~/appname]$ php artisan migrate
以下のエラーが発生
Database (/home/username/appname/database/database.sqlite) does not exist. (SQL: PRAGMA foreign_keys = ON;)
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:678
// If an exception occurs when attempting to run a query, we'll format the error // message to include the bindings with SQL, which will make this exception a // lot more helpful to the developer instead of just the database's errors. catch (Exception $e) { throw new QueryException( $query, $this->prepareBindings($bindings), $e ); }
対応
事前にデータベース用の空ファイルを作っておく
[username@hostname~/appname]$ touch database/database.sqlite [username@hostname~/appname]$ php artisan migrate
参考
ドキュメントに書いてました。
国会会議録検索システム 検索用APIをPHPから触ってみる
前回の記事
PHPのソース
<?php $handle = curl_init(); curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); curl_setopt($handle, CURLOPT_URL,"https://kokkai.ndl.go.jp/api/speech?startRecord=1&from=2020-01-01&recordPacking=json&maximumRecords=1"); $result=curl_exec($handle); curl_close($handle); $result = json_decode($result); var_dump($result);
結果
object(stdClass)#1 (5) { ["numberOfRecords"]=> int(106609) ["numberOfReturn"]=> int(1) ["startRecord"]=> int(1) ["nextRecordPosition"]=> int(2) ["speechRecord"]=> array(1) { [0]=> object(stdClass)#2 (21) { ["speechID"]=> string(25) "120414292X00120210122_000" ["issueID"]=> string(21) "120414292X00120210122" ["imageKind"]=> string(9) "会議録" ["searchObject"]=> int(0) ["session"]=> int(204) ["nameOfHouse"]=> string(9) "参議院" ["nameOfMeeting"]=> string(27) "国家基本政策委員会" ["issue"]=> string(7) "第1号" ["date"]=> string(10) "2021-01-22" ["closing"]=> NULL ["speechOrder"]=> int(0) ["speaker"]=> string(15) "会議録情報" ["speakerYomi"]=> NULL ["speakerGroup"]=> NULL ["speakerPosition"]=> NULL ["speakerRole"]=> NULL ["speech"]=> string(3400) "令和三年一月二十二日(金曜日) 午前十一時四十一分開会 ───────────── 委員氏名 委員長 大塚 耕平君 理 事 衛藤 晟一君 岩井 茂樹君 宇都 隆史君 江島 潔君 小野田紀美君 武見 敬三君 中西 健治君 中西 哲君 三原じゅん子君 難波 奨二君 福山 哲郎君 水岡 俊一君 谷合 正明君 山口那津男君 松沢 成文君 小林 正夫君 小池 晃君 木村 英子君 ながえ孝子君 ───────────── 出席者は左のとおり。 委員長 大塚 耕平君 理 事 衛藤 晟一君 武見 敬三君 水岡 俊一君 松沢 成文君 委 員 岩井 茂樹君 宇都 隆史君 江島 潔君 小野田紀美君 中西 健治君 中西 哲君 三原じゅん子君 難波 奨二君 福山 哲郎君 谷合 正明君 山口那津男君 小林 正夫君 小池 晃君 木村 英子君 ながえ孝子君 事務局側 常任委員会専門 員 秋谷 薫司君 ───────────── 本日の会議に付した案件 ○理事補欠選任の件 ○国政調査に関する件 ○合同審査会に関する件 ─────────────" ["startPage"]=> int(0) ["speechURL"]=> string(77) "https://kokkai.ndl.go.jp/#/detail?minId=120414292X00120210122&spkNum=0&single" ["meetingURL"]=> string(61) "https://kokkai.ndl.go.jp/#/detail?minId=120414292X00120210122" ["pdfURL"]=> NULL } } }
PHPでPDF出力 ~ wkhtmltopdfを利用した「ええ感じ」のサンプル(htmlを利用)
- wkhtmltopdfをインストール(Homebrew-cask利用)
- knplabs/knp-snappyの準備
- 画像埋め込みの確認用に猫の画像を検索してダウンロードしておく
- phpファイル作成
- 結果
- その他
wkhtmltopdfをインストール(Homebrew-cask利用)
wkhtmltopdfはバイナリ。バイナリな分速度は早いのですが、 環境に依存しますので、サーバによっては使えない場合が有ります。 (共有サーバとかだとインストールできない場合が多い、または難易度が上がります。)
brew cask install wkhtmltopdf
knplabs/knp-snappyの準備
プロジェクト用ディレクトリ作成
mkdir pdf-example3
ディレクトリに移動
cd pdf-example3
composerの準備
composer init
knplabs/knp-snappyのインストール
composer require knplabs/knp-snappy
画像埋め込みの確認用に猫の画像を検索してダウンロードしておく
ここで猫の画像を検索 visualhunt.com
名前はcat.jpgにしよう。
phpファイル作成
base64で事前に読み込んでおく。
<?php<?php require './vendor/autoload.php'; $img = base64_encode(file_get_contents("cat.jpg")); $html = <<< EOF <style> body { font-family: ipag; } .td { border: solid 1px black; } .td2 { border: solid 1px black; height:100px; } .td3 { font-size:20px; border: solid 1px black; height:100px; } .table{ width:100%; border-collapse: collapse; border-spacing: 0px; } .left{ text-align: left; border: solid 1px black; height:30px; } .right{ text-align: right; border: solid 1px black; height:30px; } .center{ text-align: center; border: solid 1px black; height:30px; } .decoration{ text-decoration: line-through; border: solid 1px black; } .sample1 {text-decoration: none;} .sample2 {text-decoration: underline;} .sample3 {text-decoration: overline;} .sample4 {text-decoration: line-through;} .sample5 {text-decoration: underline dotted red;} .color{ background-color:black; color:white; } </style> <table class="table"> <tr> <td class="left">text-align: left;</td> <td class="center">text-align: center;</td> <td class="right">text-align: right;</td> </tr> <tr> <td class="td">test</td> <td class="td">日本語</td> <td class="td">hoge</td> </tr> <tr> <td class="td">test</td> <td class="td"><table class="table"> <tr> <td class="td" >test</td> </tr> <tr> <td class="td" >test</td> </tr> </table></td> <td class="td">hoge</td> </tr> <tr> <td class="td" colspan="2">colspan="2"</td> <td class="td" rowspan="2">rowspan="2"</td> </tr> <tr> <td class="td">test</td> <td class="td">fuga</td> </tr> <tr> <td class="td2" colspan="3">height:100px; colspan="3"</td> </tr> <tr> <td class="td2 color" colspan="3">改行<br> brタグ<br> で改行<br> 背景色変更<br> フォントカラー変更<br> </td> </tr> <tr> <td class="td3" colspan="3">改行<br> brタグ<br> で改行<br> </td> </tr> <tr> <td class="td2" colspan="3"> <div><span class="sample1">none</span> text-decoration: none;</div> <div><span class="sample2">underline</span> text-decoration: underline;</div> <div><span class="sample3">overline</span> text-decoration: overline;</div> <div><span class="sample4">line-through</span> text-decoration: line-through;</div> <div><span class="sample5">underline dotted red</span> text-decoration: underline dotted red;</div> </td> </tr> <tr> <td class="td2" colspan="3"> 画像挿入 <br> <div> <img src="data:image/jpeg;base64,{$img}" width="300px"/> </div> <br> </td> </tr> </table> EOF; // wkhtmltopdfの位置をコンストラクタに渡す $pdf = new Knp\Snappy\Pdf('/usr/local/bin/wkhtmltopdf'); // encoding = utf-8をセット $pdf->setOption('encoding', 'utf-8'); // PDFをブラウザに出力 header("Content-Type: application/pdf"); echo $pdf->getOutputFromHtml($html);
結果
その他
tcpdfはこちら
tcpdfバージョンのエントリは以下より。
dompdfはこちら
tcpdfバージョンのエントリは以下より。
VSCode、Laravelのweb.phpでUndefined type 'Route' のエラーメッセージを消す方法を探す記録
問題
VSCodeでなみなみ線がつく。
調べる
あった。 github.com
解決策
routes/web.phpの先頭に以下のコード追加
use Illuminate\Support\Facades\Route;
Authも使う場合はこちらも追加
use Illuminate\Support\Facades\Auth;
結果
無事なみなみ線が消えました。
参考
PHPでPDF出力 ~ dompdfを利用した「ええ感じ」のサンプル(htmlを利用)
dompdfの準備
プロジェクト用ディレクトリ作成
mkdir pdf-example2
ディレクトリに移動
cd pdf-example2
composerの準備
composer init
dompdfのインストール
composer require dompdf/dompdf
load_font.phpの準備
curl https://raw.githubusercontent.com/dompdf/utils/master/load_font.php --output load_font.php
IPAフォントのダウンロードと解凍
curl https://ipafont.ipa.go.jp/IPAfont/IPAfont00303.zip --output IPAfont00303.zip
unzip IPAfont00303.zip
フォントの追加
php load_font.php ipag IPAfont00303/ipag.ttf php load_font.php ipagp IPAfont00303/ipagp.ttf php load_font.php ipam IPAfont00303/ipam.ttf php load_font.php ipamp IPAfont00303/ipamp.ttf
画像埋め込みの確認用に猫の画像を検索してダウンロードしておく
ここで猫の画像を検索 visualhunt.com
名前はcat.phpにしよう。
phpファイル作成
imgタグはどうもネットワーク経由で取得しているらしく、URLが必要だった。 ローカルのファイルを利用する場合は、base64を利用することでうまくいく。 今回はローカルファイルで対応した為、base64で事前に読み込んでおく。
<?php require_once "vendor/autoload.php"; use Dompdf\Dompdf; $img = base64_encode(file_get_contents("cat.jpg")); $html = <<< EOF <style> body { font-family: ipag; } .td { border: solid 1px black; } .td2 { border: solid 1px black; height:100px; } .td3 { font-size:20px; border: solid 1px black; height:100px; } .table{ width:100%; border-collapse: collapse; border-spacing: 0px; } .left{ text-align: left; border: solid 1px black; height:30px; } .right{ text-align: right; border: solid 1px black; height:30px; } .center{ text-align: center; border: solid 1px black; height:30px; } .decoration{ text-decoration: line-through; border: solid 1px black; } .sample1 {text-decoration: none;} .sample2 {text-decoration: underline;} .sample3 {text-decoration: overline;} .sample4 {text-decoration: line-through;} .sample5 {text-decoration: underline dotted red;} .color{ background-color:black; color:white; } </style> <table class="table"> <tr> <td class="left">text-align: left;</td> <td class="center">text-align: center;</td> <td class="right">text-align: right;</td> </tr> <tr> <td class="td">test</td> <td class="td">日本語</td> <td class="td">hoge</td> </tr> <tr> <td class="td">test</td> <td class="td"><table class="table"> <tr> <td class="td" >test</td> </tr> <tr> <td class="td" >test</td> </tr> </table></td> <td class="td">hoge</td> </tr> <tr> <td class="td" colspan="2">colspan="2"</td> <td class="td" rowspan="2">rowspan="2"</td> </tr> <tr> <td class="td">test</td> <td class="td">fuga</td> </tr> <tr> <td class="td2" colspan="3">height:100px; colspan="3"</td> </tr> <tr> <td class="td2 color" colspan="3">改行<br> brタグ<br> で改行<br> 背景色変更<br> フォントカラー変更<br> </td> </tr> <tr> <td class="td3" colspan="3">改行<br> brタグ<br> で改行<br> </td> </tr> <tr> <td class="td2" colspan="3"> <div><span class="sample1">none</span> text-decoration: none;</div> <div><span class="sample2">underline</span> text-decoration: underline;</div> <div><span class="sample3">overline</span> text-decoration: overline;</div> <div><span class="sample4">line-through</span> text-decoration: line-through;</div> <div><span class="sample5">underline dotted red</span> text-decoration: underline dotted red;</div> </td> </tr> <tr> <td class="td2" colspan="3"> 画像挿入 <br> <div> <img src="data:image/jpeg;base64,{$img}" width="300px"/> </div> <br> </td> </tr> </table> EOF; $dompdf = new Dompdf(); $dompdf->loadHtml($html); $options = $dompdf->getOptions(); $options->set(array('isRemoteEnabled' => false)); $dompdf->setOptions($options); $dompdf->setPaper('A4', 'portrait'); $dompdf->render(); $dompdf->stream("example.pdf", array("Attachment" => true));
結果
その他
tcpdfはこちら
tcpdfバージョンのエントリは以下より。
wkhtmltopdfはこちら
wkhtmltopdfバージョンのエントリは以下より。
PHPでPDF出力 ~ tcpdfを利用した「ええ感じ」のサンプル(htmlを利用)
tcpdfの準備
プロジェクト用ディレクトリ作成
mkdir pdf-example
ディレクトリに移動
mkdir pdf-example
composer初期化
composer init
tcpdfインストール
composer require tecnickcom/tcpdf
IPAフォントダウンロード、解凍
curl https://ipafont.ipa.go.jp/IPAfont/IPAfont00303.zip --output IPAfont00303.zip unzip IPAfont00303.zip
tcpdfに日本語用フォント追加
php vendor/tecnickcom/tcpdf/tools/tcpdf_addfont.php -b -t ipag -f 32 -i ./IPAfont00303/ipag.ttf php vendor/tecnickcom/tcpdf/tools/tcpdf_addfont.php -b -t ipagp -f 32 -i ./IPAfont00303/ipagp.ttf php vendor/tecnickcom/tcpdf/tools/tcpdf_addfont.php -b -t ipam -f 32 -i ./IPAfont00303/ipam.ttf php vendor/tecnickcom/tcpdf/tools/tcpdf_addfont.php -b -t ipamp -f 32 -i ./IPAfont00303/ipamp.ttf
画像埋め込みの確認用に猫の画像を検索してダウンロードしておく
ここで猫の画像を検索 visualhunt.com
名前はcat.phpにしよう。
phpファイル作成
それなりに、HTMLは色々と盛り込んでみました。
<?php // composerでインストールしたライブラリを参照する require_once('./vendor/tecnickcom/tcpdf/tcpdf.php'); // 用紙の方向、用紙サイズを指定する $tcpdf = new TCPDF('P', "pt",'A4'); $tcpdf->SetMargins(5, 5, 5); //マージン無効 $tcpdf->SetFont('ipag', '', 10); $tcpdf->setPrintHeader(false); $tcpdf->setPrintFooter(false); $tcpdf->AddPage(); $html = <<< EOF <style> .td { border: solid 1px black; } .td2 { border: solid 1px black; height:100px; } .td3 { font-size:20px; border: solid 1px black; height:100px; } .table{ border-collapse: collapse; border-spacing: 0px; } .left{ text-align: left; border: solid 1px black; height:30px; } .right{ text-align: right; border: solid 1px black; height:30px; } .center{ text-align: center; border: solid 1px black; height:30px; } .decoration{ text-decoration: line-through; border: solid 1px black; } .sample1 {text-decoration: none;} .sample2 {text-decoration: underline;} .sample3 {text-decoration: overline;} .sample4 {text-decoration: line-through;} .sample5 {text-decoration: underline dotted red;} .color{ background-color:black; color:white; } </style> <table class="table"> <tr> <td class="left">text-align: left;</td> <td class="center">text-align: center;</td> <td class="right">text-align: right;</td> </tr> <tr> <td class="td">test</td> <td class="td">日本語</td> <td class="td">hoge</td> </tr> <tr> <td class="td">test</td> <td class="td"><table class="table"> <tr> <td class="td" >test</td> </tr> <tr> <td class="td" >test</td> </tr> </table></td> <td class="td">hoge</td> </tr> <tr> <td class="td" colspan="2">colspan="2"</td> <td class="td" rowspan="2">rowspan="2"</td> </tr> <tr> <td class="td">test</td> <td class="td">fuga</td> </tr> <tr> <td class="td2" colspan="3">height:100px; colspan="3"</td> </tr> <tr> <td class="td2 color" colspan="3">改行<br> brタグ<br> で改行<br> 背景色変更<br> フォントカラー変更<br> </td> </tr> <tr> <td class="td3" colspan="3">改行<br> brタグ<br> で改行<br> </td> </tr> <tr> <td class="td2" colspan="3"> <div><span class="sample1">none</span> text-decoration: none;</div> <div><span class="sample2">underline</span> text-decoration: underline;</div> <div><span class="sample3">overline</span> text-decoration: overline;</div> <div><span class="sample4">line-through</span> text-decoration: line-through;</div> <div><span class="sample5">underline dotted red</span> text-decoration: underline dotted red;</div> </td> </tr> <tr> <td class="td2" colspan="3"> 画像挿入 <br> <div> <img src="cat.jpg" width="300px"/> </div> <br> </td> </tr> </table> EOF; $tcpdf->WriteHTML($html, true, 0, false, true, 'L'); // 出力用バッファの内容を消去 ob_end_clean(); $tcpdf->Output("test.pdf", "D");
結果
URLを開くとファイルがダウンロードされます。
ファイルを開くとこんな感じに。
参考
その他
dompdfはこちら
dompdfバージョンのエントリは以下より。
wkhtmltopdfはこちら
wkhtmltopdfバージョンのエントリは以下より。
WSL + Ubuntu + PHP + xdebug + Visual StudioCode + PHP DebugでPHPの学習環境構築
前提
- OSがWindows 10 Proであること。
- WSLを有効化していること。
- WSLにUbuntuインストール済みであること。
- WSLのUbuntuにPHPインストール済みであること。
- ローカル環境にVisual Studio Codeインストール済みであること。
Ubuntuにphp-xdebugをインストール
sudo apt install php-xdebug
php-xdebugの設定ファイルを修正
vi で設定ファイルを開く
sudo vi /etc/php/7.2/cli/conf.d/20-xdebug.ini
設定ファイルの内容を以下のように修正
zend_extension=xdebug.so xdebug.remote_enable=on xdebug.remote_autostart = 1
Visual Studio CodeにPHP Debugをインストール
赤色の枠の部分をクリックしていく。
Visual Studio CodeにインストールしたPHP Debugの設定
設定ファイル(.vscode/launch.json)は、歯車マークをクリックして開けられる
設定ファイル(.vscode/launch.json)を以下のように修正
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "php local debug", "type": "php", "request": "launch", "port": 9000, "pathMappings": { "/mnt/c":"c:/" } } ] }
準備OK!デバッグ実行してみよう。
- 赤〇で囲った虫を押下。
- オレンジで囲ったところをクリックしてブレークポイントを指定
- 緑で囲ったところを「php local debug(ここはlaunch.jsonに指定したnameが表示される)」に変更して再生ボタンを押下
- 水色で囲った部分にターミナルを表示しておく(ここでプログラムの実行を行う)
プログラムは以下の通り
<?php echo "hello\n"; echo "hello\n"; $test = "test"; $number = 100; $number2 = 200; $number3 = $number + $number2;
プログラム実行してみる。
wsl php echo.php
ブレークポイントで止まった。
ステップオーバーしてみる。
赤〇で囲ったのアイコンをクリックして、1行ステップオーバー(プログラムが1行進む)
オレンジ色で囲ったところで変数の中身も確認できる。
感想
apacheをインストールする必要もなく、 簡単にできた。
こんな感じでPHPがステップ実行できると、 プログラム初級の部分(変数・演算・分岐・ループ・関数)で躓きにくくなるかもしれない。
改めて、Visual Studio Code の凄さを実感。
これが無償で利用できるなんて。。。
参考
参考にしたサイト
POP3を利用してメール受信する際に重複を防ぐ仕組み。「UIDL」を利用する
メールの受信処理でメール受信をトリガーにコマンド実行できない場合は、cronでx分単位で定時バッチを実行するのが一般的だと思います。
その際に受信したデータをメールサーバに残したままだと、何度も処理済みのデータを受信する羽目になってしまいます。
今回はそれをどうやって防ぐかという内容。
結論
「uidl」を利用します。
参考:重複せずに POP サーバからメールを受信する仕組み UIDL
PHPでUIDLを確認
ライブラリは「Net/POP3.php」を利用してます。
<?php require_once 'Net/POP3.php'; $pop = new Net_POP3(); $pop->connect(HOST, PORT); $pop->login(USER, PASS); $messages = $pop->getListing(); foreach($messages as $message){ var_dump($message); }
結果
array(3) { ["msg_id"]=> string(1) "1" ["size"]=> string(5) "74529" ["uidl"]=> string(35) "494902.IMUdeXl3re8levBIsfglvt47mt4w=" } array(3) { ["msg_id"]=> string(1) "2" ["size"]=> string(5) "34529" ["uidl"]=> string(35) "494932.IMUdeXl3re8erev4Is2vter7mt4w=" }
getListingで取得した結果を単純に回してvar_dumpしているだけですが、["uidl"]が確認できました。
あとはこれを処理後にDBに保存して、次回DBを参照した際に存在すればスキップすればいいだけですね。超簡単だ。
Microsoft Translatorに登録。クラウドを利用して翻訳プログラムを簡単に作る。
Microsoft Translatorって何?
Microsoftが提供する機械翻訳のAPIです。 Windows azure(マイクロソフトが提供するクラウドサービス)のMarketplace(データの方)にあります。
機械翻訳 -> wikipedia
利用するには、Microsoft アカウントが必要です。
ということで登録しました。
月額2,000,000文字まで無料で利用できるようなので登録しました。
試してみる。
↓のような感じにAPIを試す画面が存在します。
初めまして。私はmitsugeekです。
↓↓↓Translator実行!↓↓↓
How do you do. I am mitsugeek.
単にこれだけだと、Google翻訳や、Yahoo翻訳等のWeb上の翻訳と変わりないです。
Webで利用できる翻訳サービス一覧
WEBの翻訳サービスって結構あるんですね。
何が嬉しい?
何が良いかというと自分のアプリケーションに翻訳機能を組み込める所です。 Googleも同様のサービス(Google Translate API)を行ってますが有料です。
プログラムから呼び出してみる。
手っ取り早くPHPで実行しました。
<?php const APPID = 'プライマリ アカウント キーを入力'; $input_text = '初めまして。mitsugeekです。'; $to = 'en'; $ch = curl_init('https://api.datamarket.azure.com/Bing/MicrosoftTranslator/v1/Translate?Text=%27'.urlencode($input_text).'%27&To=%27'.$to.'%27'); curl_setopt($ch, CURLOPT_USERPWD, APPID.':'.APPID); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); $result = explode('<d:Text m:type="Edm.String">', $result); $result = explode('</d:Text>', $result[1]); $result = $result[0]; echo $input_text." -> ".$result;
結果。
コマンドで実行。
[root@localhost html]# php mst.php 初めまして。mitsugeekです。 -> How do you do. It is mitsugeek.