f@ctor
# 概要 自サーバーのファイルの存在確認は、「file_exists関数」で可能ですが、外部サーバーのファイルの存在確認する方法をシェアします。 # 方法1 「file_get_contents関数」でURLを指定して、外部サーバーのファイルの存在確認をします。 “` if (file_get_contents($url)) { echo ‘ファイルが存在します’; } “` # 方法2 「get_headers関数」でURLを指定して、外部サーバーのファイルの存在確認をします。 方法1の「file_get_contents関数」でもファイルの存在確認ができますが、GETメソッドは画像や動画等の大きなサイズのファイルへアクセスした際に速度が遅くなるデメリットがあります。 以下の「get_headers関数」ならHEADメソッドを使用するため、ファイルサイズを問わずに一定の速度を実現することができます。 “` $headers = get_headers($url); if ($headers[0] === ‘HTTP/1.1 200 OK’) { ec
# 概要
自サーバーのファイルの存在確認は、「file_exists関数」で可能ですが、外部サーバーのファイルの存在確認する方法をシェアします。
# 方法1 「file_get_contents関数」でURLを指定して、外部サーバーのファイルの存在確認をします。
“` if (file_get_contents($url)) { echo ‘ファイルが存在します’; } “`
# 方法2 「get_headers関数」でURLを指定して、外部サーバーのファイルの存在確認をします。 方法1の「file_get_contents関数」でもファイルの存在確認ができますが、GETメソッドは画像や動画等の大きなサイズのファイルへアクセスした際に速度が遅くなるデメリットがあります。 以下の「get_headers関数」ならHEADメソッドを使用するため、ファイルサイズを問わずに一定の速度を実現することができます。
“` $headers = get_headers($url); if ($headers[0] === ‘HTTP/1.1 200 OK’) { ec
# REPLとは? REPLとは「Read-Eval-Print-Loop」の略です。 コマンドラインからプログラムを1行づつ実行できる機能のことです。 # REPLが役立つ場面 ### 関数の使い方を調べるとき 例えば、print関数等初めて使用する関数の動作確認したいときに、REPLを使用することで簡単に確認することができます。 ### 関数の仕様の確認 変数の真偽判定をする際にissetを使用することで正しい判定を行ってくれるか確認できます。 # REPL使用方法 php -aコマンドで起動できます。 “` ~ php -a Interactive shell php > $value = ‘Hello’; php > echo $value; Hello “` # 最後に 初心者だけでなく、PHPの動作確認等、便利なのでオススメです。
# REPLとは? REPLとは「Read-Eval-Print-Loop」の略です。 コマンドラインからプログラムを1行づつ実行できる機能のことです。
# REPLが役立つ場面
### 関数の使い方を調べるとき 例えば、print関数等初めて使用する関数の動作確認したいときに、REPLを使用することで簡単に確認することができます。
### 関数の仕様の確認 変数の真偽判定をする際にissetを使用することで正しい判定を行ってくれるか確認できます。
# REPL使用方法 php -aコマンドで起動できます。
“` ~ php -a Interactive shell
php > $value = ‘Hello’; php > echo $value; Hello “`
# 最後に 初心者だけでなく、PHPの動作確認等、便利なのでオススメです。
*** ####クォーテーションが入ってるダミーデータが生成されると通らない Laravel 6でファクトリーを使って生成した文字列データをAssertSeeでテストすると通ったり通らなかったり。 確認したところクォーテーションが入ってるダミーのみ通っていないっぽい。 ファクトリー “`php $factory->define(Sample::class, function (Faker $faker) { return [ ‘name’ => $faker->realText(10), ] “` テスト “`php $response->assertSee($Sample->name); “` *** ####ヘルパーファンクションをつかって特殊文字のエスケープ テストをこうする “`php $response->assertSee(e($Sample->name)); “` e()で特殊文字をエスケープしてテストすることができる *** ####参考 https://laracasts.com/discuss/c
***
####クォーテーションが入ってるダミーデータが生成されると通らない Laravel 6でファクトリーを使って生成した文字列データをAssertSeeでテストすると通ったり通らなかったり。 確認したところクォーテーションが入ってるダミーのみ通っていないっぽい。
ファクトリー
“`php $factory->define(Sample::class, function (Faker $faker) { return [ ‘name’ => $faker->realText(10), ] “`
テスト
“`php $response->assertSee($Sample->name); “`
####ヘルパーファンクションをつかって特殊文字のエスケープ
テストをこうする
“`php $response->assertSee(e($Sample->name)); “`
e()で特殊文字をエスケープしてテストすることができる
####参考
https://laracasts.com/discuss/c
#はじめに 以下のようなセレクトボックス(値は20個ぐらい格納)を実装したので、備忘録として残しておきます。 ![スクリーンショット 2021-10-30 21.25.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1697283/910c9824-136f-c8b5-95cf-987a879248e8.png) #コード “`php:create.blade.php {{ __(‘カテゴリー’) }} @foreach ($categories as $category)Dockerがぶっちゃけよく分からんっていう人向けにCentOS 8/PHP7.4/Apache2.4の環境構築を例に説明してみる #概要 本記事はDocker初心者向けです。 またDockerで環境構築したことはあるけど、何が起こっているのか分からない人向けです。 Dockerは良くも悪くもコマンド一発で環境構築ができてしまうので、何が起こっているのか分からない人は意外と多いのではないでしょうか。 ぶっちゃけ僕、最初は1ミリも分かってなかったです。 でも使えちゃうのがdockerの凄いところですね! 今回はタイトルの通り、CentOS 8/PHP7.4/Apache2.4の環境構築のシナリオを通してDockerに触れていきたいと思います。 まずは環境の基本となるCentOS 8の環境を作り、その上でDockerfileの必要性を述べながら環境を構築していき、最終的にハローワールドをブラウザに表示するという流れでやっていきたいと思います。 #環境 * macOS * Docker 19.03.5 #前提 今回は/Users/dockerというディレクトリを作成/移動した前提で話を進めます。 “` mkdir /Users/hoge/docker && cd /Users/hoge/docker ` 元記事を表示 Google Cloud Storage キャッシュを変更 なぜか知らないが、vue.jsでGoogle Cloud Storageの画像を読み出すと、 ところどころ真っ白になったり読み出せなかったりする。 理由は不明。 まぁ、キャッシュかなと考えているので Google Cloud Storage の デフォルト 3600秒の画像のキャッシュを伸ばす。 アップロード時にオプション設定してもうまくいかないので、 アップロード後に変更する “`hoge.php $img = public_path($file); $object = $bucket->upload( fopen($img, ‘r’) ); $object->update([ ‘cacheControl’ => ‘public, max-age=2592000’ ]); “` こんな感じ。 とりあえず、すでにあるファイルを変更する場合は以下。 “`hoge.php $storage = new StorageClient([ ‘projectId’ => config(‘app.gcp_project_id’), ‘ke 元記事を表示 macOS Montereyにアップデートしたら『command not found: php』 つい先日macOS Montereyにアップデートしました。 その後、作業をするためにphpを立ち上げようとしたらところ、 command not found: php でエラーに、、、。 なにが原因なのかと調べたところ、 https://jp.quora.com/%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%E3%81%A7php%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%81%A8php%E3%81%AF%E6%8E%A8%E5%A5%A8%E3%81%97%E3%81%AA%E3%81%84-%E5%B0%86 どうやら今回のMonteryでphpが同梱されず追加パッケージ扱いになるようです。 なので、brewでインストールしたところ、問題なく動きました。 元記事を表示 【PHP/Laravel】input type=”file”でファイルが送信できない(受け取れない) fileを選択しているのに、受け渡しがうまくできなかったときの解決策メモ。 ①name属性のタイプミス ②form に enctype=”multipart/form-data” が抜けている ③inputにdisabledが入っている(jsで動的についてたりするので注意) あとでちゃんと清書します。 元記事を表示 DockerでPHPとMySQLのシンプルすぎる環境構築を行う ## 執筆に至った経緯 – Docker使えたらカッコよくね? ↓ – ネットに転がってる環境構築は強すぎて理解できなくね? ↓ – 最小構成の環境構築を知って、そこから自分が必要な部分を拡張していったら理解できるんじゃね? ## 想定読者 – Dockerの基礎的なことは何となく分かったが、実際に使ってみたい方。 – 他人の作ったDocker環境は使ったことがあるが、自分では構築したことがない方。 ## 今回のゴール – DockerでPHPとMySQLの環境構築を行う。 – 具体的には以下3つが実行できたら完了とする。 – PHPコンテナ内に入り、helloworldを出力する。 – MySQLコンテナ内に入り、適当なSQL文を実行する。 – PHPからMySQLに接続する。 ## 実行環境と筆者のレベル感 ### 実行環境 – OS : Windows10 Pro – プロセッサ : 11th Gen Intel(R) Core(TM) i7-11370H @ 3.30GHz 3.00 GHz – 実装RAM : 16.0GB – システムの種類 : 64 ビット 元記事を表示 AWS SDK for PHP3 AutoScalingClientからAuto Scaling グループを設定してみる ## 経緯 LaravelアプリケーションでAWSのメッセージキューイングサービス(Amazon SQS)を利用する機会があり、 Webから取得したデータをキューに送信、定期的にキューからデータを取得しては処理をするということをしていました。 但し、気づいたらキューに数万件のメッセージが。。 もう少し早く、柔軟に処理できないかと模索した結果、キューに溜まっているメッセージ件数に応じてAuto Scaling グループ(AWS Auto Scaling)の設定を変更、必要なだけサーバーを立てるということをしたいと思い、この記事を書くに至りました。 以下、ざっくりとした処理フローです。 ①Laravelアプリケーション実装しているCommandでwebから情報を定期取得 ↓ ②Amazon SQS(メッセージキューイングサービス)に取得したデータを追加 *必要なデータを配列に入れ、serializeしたものを送信しています。 ↓ ③定期的にキューからメッセージを取得し処理を実施 追伸: 私もまだまだ道半ば故、ご指摘やアドバイスを頂ければとっても嬉しいです。 ## ■事前準備 今回 元記事を表示 【VirtualBox+Apache+PHP】共有ファイルのパーミッションエラーを解消する方法 VirtualBoxでCentOSにApacheをインストール。 共有ファイルで作成したtest.phpに接続すると、「You don’t have permission to access /test.php on this server.」と表示され、ページの表示ができなくて結構ハマりました、、、 無事解決出来たので手順を記録しておきます。 ##環境 VirtualBox:6.1.28 ホストOS:MacOS Big sur 11.5.2 ゲストOS:CentOS7 Apache:2.4 ##前提条件 「VirtualBox Guest Additions」をインストール済みであること 共有フォルダーのマウント方法は「自動マウント」にしていること ##エラー解消手順 エラーの原因は、ファイル共有をすることにより、ゲストOS(CentOS7)側のマウント先のフォルダの権限が強制的に「rootユーザまたはvboxsfグループ」のみしか読み込み権限が付与されていないからでした。 “` # ls -la /var/www/ drwxrwx—. 1 root vboxsf 元記事を表示 備忘録~リファレンスについて~ ##リファレンスとは(PHP) ###例1と例2を比較して理解しよう! #####(例1) “` $a = ‘qiita’; $b = $a; $a[0] =’z’; echo $a . PHP_EOL; echo$B . PHP_EOL; “` 上のコードを実行すると、 “` zhp php “` を返す。 #####(例2) “` $a = ‘qiita’; $b = &$a; $a[0] =’z’; echo $a . PHP_EOL; echo$B . PHP_EOL; “` 上のコードを実行すると、 “` zhp zhp “` を返す。 ###解説 変数(箱)の中に値(中身)が入っている。 ・例1のような通常の代入は$aの変数の値を$bの変数に代入している。 訳すと、$aという名前の箱の中身を$bという名前の箱の中にコピーして入れている。 なので、$aの値と$bの値は別々で存在しており、三行目で変更しているのは$aの中の値だけである。 ・例2はリファレンスを代入している。 リファレンスとは同じ変数を異なった名前で呼び出すこと。「あだ名」である。 元記事を表示 MAMP&DockerでXdebugを使えるまで。 #動いた環境 2021年10月28日時点 OS:MacOSX BigSur CPU:M1チップ エディタ:vscode MAMP: Version 6.4(1182) 初めに以下の記事の通りに設定しました。 https://dezanari.com/mamp-xdebug/ vscodeのデバッグ再生ボタンを押すとステータスバーはオレンジになりますが、 ブレークポイントを貼ってブラウザでアクセスしても止まりませんでした。 それでググると以下の質問を見つけました。 https://teratail.com/questions/348559 この回答の通り、ポート番号を合わせると無事に止まりました。 MAMPのwebstartからphpinfoを開いて、 xdebug.remote_port とページ内検索するとポート番号が判明します。 ![スクリーンショット 2021-10-28 15.39.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201982/fed870d0-ee1d-7 元記事を表示 クッキーとセッションとデータベース ## 概要 クッキーとセッションの違いをうまく説明できなかったので、クッキー、セッション、データベース、3つのデータを保存する方法の、調べたこと、自分の考えをまとめました。 ##クッキー 特徴 – クッキーを使うことでPHPが作成したデータをクライアントのPCに保存して、ブラウザを閉じてから一定期間、維持することが出来る。 – 保存されたクッキーデータは、保存したサイトへの以降のアクセスでHTTPリクエスト中のクッキーヘッダに常に含まれるようになる。 – 基本的に、クッキーはユーザー側の操作に関わらず、すべてのHTTPリクエストに含まれる。 – クッキーはユーザーがブラウザの設定を変えることでブロックすることができる。 ## セッション – セッションとは、ユーザーがWebサイトにアクセスし、ページ遷移し、ブラウザを閉じるまでの期間のこと。 – セッション変数を使うことでクッキーと同じ用に一定期間ユーザーごとのデータを維持することが出来る。 – セッション変数はその期間だけ値を使うことが出来る変数のこと。 – セッション変数は、サーバーの設定で有効期限が決められている。 ### 元記事を表示 Cloud BuildでPHPUnitテストを行う # やること 1. `cloudbuild.yaml` に`docker-compose` の処理を追加 1. CloudBuild用の`docker-compose-test.yaml` を作成 1. CloudBuild用の`.env.testing` を作成 ## `cloudbuild.yaml` に`docker-compose` の処理を追加 “`yaml:cloudbuild.yaml timeout: 1200s steps: # builds the container image – name: ‘gcr.io/cloud-builders/docker’ id: Build args: – ‘build’ – ‘-t’ – ‘gcr.io/$PROJECT_ID/test:$SHORT_SHA’ – ‘-f’ – ‘Dockerfile’ – ‘.’ – name: ‘docker/compose’ id: UnitTest args: 元記事を表示 Sailを使ってインストールしたLaravelのTinkerで日本語が使えないときの対処 # この記事について sailを使って、laravelの環境を構築したところTinkerで日本語の入力ができませんでした。症状としては以下の記事と同様。 [Laravel の tinker で日本語が入力できなくて困ったけどなんとかなった話](https://qiita.com/B73W56H84/items/a9152ec00cd7996f6573) [Laravel の tinkerで日本語入力ができず色々迷走していたらもっと根本的な問題だった件](https://qiita.com/fugaxx/items/bd8de7573d727d08b128) 違いは、`./vender/bin/sail tinker`としてTinkerを起動している点です。 本記事では最終的には、Dockerコンテナ内でTinkerを起動すれば日本語入力できるようになったというところまで紹介します。 (良い方法がありましたらご教授ください。記事の一番下に参考として検証した事項をまとめています。) ## 環境(PC) “` $ ./vendor/bin/sail -v 元記事を表示 PHPUnitでテストケースを個別に指定して実行したい場合 phpunitでテストコードを書いている場合、全体実行だけでなくグループ単位だったり、書いているケースを個別で実行したい場合があります。 そんな時のコマンドメモです。 ## グループ単位の場合 “` phpunit –group=testA “` ## ケース指定の個別の場合 “` phpunit –group=testA –filter “testA-001” “` filterのみでも実行可能です “` phpunit –filter “testA-001” “` 日本語のテスト関数名にしている場合も実行可能です “` phpunit –filter “テスト〜〜〜がエラーにならないことを確認する” “` 元記事を表示 【PHP】PHPのバージョンを更新するべき理由 # はじめに プロジェクトを進めるにつれて、PHPのバージョンの更新は確実に必要はあると思っていたのですが、なぜバージョンアップが必要なのかを具体的に把握できていなかったので考えてみました。 # 目次 1. [公式サポート期限](#Chapter1) 1. [パフォーマンス向上](#Chapter2) 1. [新文法に対する対応](#Chapter3) 1. [まとめ](#Chapter4) 1. [参考文献](#reference) # 公式サポート期限とセキュリティの脆弱性 ### PHPバージョンとサポート期限一覧 |バージョン|初回リリース|最新リリース|最新リリース日|アクティブサポート|セキュリティサポート| |——-|———|——–|———–|—————-|—————-| |8.0|2020/11/26|8.0.9|2021 元記事を表示 備忘録~BootstrapをSassでカスタマイズする方法~ ##PHP(7.4)・Bootstrap(v4.5)・Scssphp(Sass)(v1.81) Windows 10 Home ##Bootstrapとは 世界で最も人気なHTML、CSS、JavaScriptのフレームワーク メリット:①CSSを一から書かなくてよい。 ②レスポンシブデザインに対応している。 ③統一感のあるデザインが簡単にできる。 今回はComposerを用いてインストールした。 ![Bootstrapインストール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1773238/cd98bb87-a93a-e114-c3fb-116df58ac97a.png) するとVendorというフォルダが作成される。 CSSで使うには、Vendor/twbs/bootstrap/dist/cssのフォルダの中の bootstrap.css:ローカル環境向き bootstrap.min.css:本番環境向き この二つのうちどちらかをHTMLに読み込む。 “` 元記事を表示 結局コメントってどんなこと書けばいいのよ? # コメント、書いてますか? プログラムを書く時、処理に対する解説などの用途としてコメントを書くことがあると思います。 プログラムの勉強をし始めた時などは、まず実装を行う前にどのような処理を行うかをコメントで書いてから実装した方がいい、プログラムと同じくらいコメントもたくさん書こう!等と教えられた方も多いと思います。(筆者もその一人) 実際のところ、コメントはどれくらいの粒度でどれくらいの量記載するのが正しいのでしょうか? ここではコメントを書くことの意義や有用性、そして実際にどのように書くべきかを考えていきたいと思います。 # コメントの例 早速ですが、コメントの例を記載しながら考えていきたいと思います。 サンプルについては僕が実際に仕事や本、その他資料で見たり書いたりしたものを例題用に変更したものですので、必ずしも普遍性が担保されているものではないということについてはご留意ください。 サンプルのコードはphpを使用しますが、他の言語でも同様の考えができるかなと。 “`php /** * 数量と単価から合計金額を算出する * @param int $quantity 数量 元記事を表示
#はじめに 以下のようなセレクトボックス(値は20個ぐらい格納)を実装したので、備忘録として残しておきます。 ![スクリーンショット 2021-10-30 21.25.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1697283/910c9824-136f-c8b5-95cf-987a879248e8.png)
#コード
“`php:create.blade.php
#概要 本記事はDocker初心者向けです。 またDockerで環境構築したことはあるけど、何が起こっているのか分からない人向けです。 Dockerは良くも悪くもコマンド一発で環境構築ができてしまうので、何が起こっているのか分からない人は意外と多いのではないでしょうか。 ぶっちゃけ僕、最初は1ミリも分かってなかったです。 でも使えちゃうのがdockerの凄いところですね! 今回はタイトルの通り、CentOS 8/PHP7.4/Apache2.4の環境構築のシナリオを通してDockerに触れていきたいと思います。 まずは環境の基本となるCentOS 8の環境を作り、その上でDockerfileの必要性を述べながら環境を構築していき、最終的にハローワールドをブラウザに表示するという流れでやっていきたいと思います。 #環境 * macOS * Docker 19.03.5 #前提 今回は/Users/dockerというディレクトリを作成/移動した前提で話を進めます。 “` mkdir /Users/hoge/docker && cd /Users/hoge/docker `
#概要 本記事はDocker初心者向けです。 またDockerで環境構築したことはあるけど、何が起こっているのか分からない人向けです。
Dockerは良くも悪くもコマンド一発で環境構築ができてしまうので、何が起こっているのか分からない人は意外と多いのではないでしょうか。 ぶっちゃけ僕、最初は1ミリも分かってなかったです。 でも使えちゃうのがdockerの凄いところですね!
今回はタイトルの通り、CentOS 8/PHP7.4/Apache2.4の環境構築のシナリオを通してDockerに触れていきたいと思います。
まずは環境の基本となるCentOS 8の環境を作り、その上でDockerfileの必要性を述べながら環境を構築していき、最終的にハローワールドをブラウザに表示するという流れでやっていきたいと思います。
#環境
* macOS * Docker 19.03.5
#前提
今回は/Users/dockerというディレクトリを作成/移動した前提で話を進めます。
“` mkdir /Users/hoge/docker && cd /Users/hoge/docker `
なぜか知らないが、vue.jsでGoogle Cloud Storageの画像を読み出すと、 ところどころ真っ白になったり読み出せなかったりする。 理由は不明。 まぁ、キャッシュかなと考えているので Google Cloud Storage の デフォルト 3600秒の画像のキャッシュを伸ばす。 アップロード時にオプション設定してもうまくいかないので、 アップロード後に変更する “`hoge.php $img = public_path($file); $object = $bucket->upload( fopen($img, ‘r’) ); $object->update([ ‘cacheControl’ => ‘public, max-age=2592000’ ]); “` こんな感じ。 とりあえず、すでにあるファイルを変更する場合は以下。 “`hoge.php $storage = new StorageClient([ ‘projectId’ => config(‘app.gcp_project_id’), ‘ke
なぜか知らないが、vue.jsでGoogle Cloud Storageの画像を読み出すと、 ところどころ真っ白になったり読み出せなかったりする。
理由は不明。 まぁ、キャッシュかなと考えているので Google Cloud Storage の デフォルト 3600秒の画像のキャッシュを伸ばす。
アップロード時にオプション設定してもうまくいかないので、 アップロード後に変更する
“`hoge.php
$img = public_path($file);
$object = $bucket->upload( fopen($img, ‘r’) );
$object->update([ ‘cacheControl’ => ‘public, max-age=2592000’ ]);
“`
こんな感じ。
とりあえず、すでにあるファイルを変更する場合は以下。
$storage = new StorageClient([ ‘projectId’ => config(‘app.gcp_project_id’), ‘ke
つい先日macOS Montereyにアップデートしました。 その後、作業をするためにphpを立ち上げようとしたらところ、 command not found: php でエラーに、、、。 なにが原因なのかと調べたところ、 https://jp.quora.com/%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%E3%81%A7php%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%81%A8php%E3%81%AF%E6%8E%A8%E5%A5%A8%E3%81%97%E3%81%AA%E3%81%84-%E5%B0%86 どうやら今回のMonteryでphpが同梱されず追加パッケージ扱いになるようです。 なので、brewでインストールしたところ、問題なく動きました。
つい先日macOS Montereyにアップデートしました。
その後、作業をするためにphpを立ち上げようとしたらところ、
command not found: php
でエラーに、、、。
なにが原因なのかと調べたところ、
https://jp.quora.com/%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%E3%81%A7php%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%81%A8php%E3%81%AF%E6%8E%A8%E5%A5%A8%E3%81%97%E3%81%AA%E3%81%84-%E5%B0%86
どうやら今回のMonteryでphpが同梱されず追加パッケージ扱いになるようです。
なので、brewでインストールしたところ、問題なく動きました。
fileを選択しているのに、受け渡しがうまくできなかったときの解決策メモ。 ①name属性のタイプミス ②form に enctype=”multipart/form-data” が抜けている ③inputにdisabledが入っている(jsで動的についてたりするので注意) あとでちゃんと清書します。
fileを選択しているのに、受け渡しがうまくできなかったときの解決策メモ。
①name属性のタイプミス
②form に enctype=”multipart/form-data” が抜けている
③inputにdisabledが入っている(jsで動的についてたりするので注意)
あとでちゃんと清書します。
## 執筆に至った経緯 – Docker使えたらカッコよくね? ↓ – ネットに転がってる環境構築は強すぎて理解できなくね? ↓ – 最小構成の環境構築を知って、そこから自分が必要な部分を拡張していったら理解できるんじゃね? ## 想定読者 – Dockerの基礎的なことは何となく分かったが、実際に使ってみたい方。 – 他人の作ったDocker環境は使ったことがあるが、自分では構築したことがない方。 ## 今回のゴール – DockerでPHPとMySQLの環境構築を行う。 – 具体的には以下3つが実行できたら完了とする。 – PHPコンテナ内に入り、helloworldを出力する。 – MySQLコンテナ内に入り、適当なSQL文を実行する。 – PHPからMySQLに接続する。 ## 実行環境と筆者のレベル感 ### 実行環境 – OS : Windows10 Pro – プロセッサ : 11th Gen Intel(R) Core(TM) i7-11370H @ 3.30GHz 3.00 GHz – 実装RAM : 16.0GB – システムの種類 : 64 ビット
## 執筆に至った経緯 – Docker使えたらカッコよくね? ↓ – ネットに転がってる環境構築は強すぎて理解できなくね? ↓ – 最小構成の環境構築を知って、そこから自分が必要な部分を拡張していったら理解できるんじゃね?
## 想定読者 – Dockerの基礎的なことは何となく分かったが、実際に使ってみたい方。 – 他人の作ったDocker環境は使ったことがあるが、自分では構築したことがない方。
## 今回のゴール – DockerでPHPとMySQLの環境構築を行う。 – 具体的には以下3つが実行できたら完了とする。 – PHPコンテナ内に入り、helloworldを出力する。 – MySQLコンテナ内に入り、適当なSQL文を実行する。 – PHPからMySQLに接続する。
## 実行環境と筆者のレベル感 ### 実行環境 – OS : Windows10 Pro – プロセッサ : 11th Gen Intel(R) Core(TM) i7-11370H @ 3.30GHz 3.00 GHz – 実装RAM : 16.0GB – システムの種類 : 64 ビット
## 経緯 LaravelアプリケーションでAWSのメッセージキューイングサービス(Amazon SQS)を利用する機会があり、 Webから取得したデータをキューに送信、定期的にキューからデータを取得しては処理をするということをしていました。 但し、気づいたらキューに数万件のメッセージが。。 もう少し早く、柔軟に処理できないかと模索した結果、キューに溜まっているメッセージ件数に応じてAuto Scaling グループ(AWS Auto Scaling)の設定を変更、必要なだけサーバーを立てるということをしたいと思い、この記事を書くに至りました。 以下、ざっくりとした処理フローです。 ①Laravelアプリケーション実装しているCommandでwebから情報を定期取得 ↓ ②Amazon SQS(メッセージキューイングサービス)に取得したデータを追加 *必要なデータを配列に入れ、serializeしたものを送信しています。 ↓ ③定期的にキューからメッセージを取得し処理を実施 追伸: 私もまだまだ道半ば故、ご指摘やアドバイスを頂ければとっても嬉しいです。 ## ■事前準備 今回
## 経緯 LaravelアプリケーションでAWSのメッセージキューイングサービス(Amazon SQS)を利用する機会があり、 Webから取得したデータをキューに送信、定期的にキューからデータを取得しては処理をするということをしていました。 但し、気づいたらキューに数万件のメッセージが。。 もう少し早く、柔軟に処理できないかと模索した結果、キューに溜まっているメッセージ件数に応じてAuto Scaling グループ(AWS Auto Scaling)の設定を変更、必要なだけサーバーを立てるということをしたいと思い、この記事を書くに至りました。
以下、ざっくりとした処理フローです。 ①Laravelアプリケーション実装しているCommandでwebから情報を定期取得 ↓ ②Amazon SQS(メッセージキューイングサービス)に取得したデータを追加 *必要なデータを配列に入れ、serializeしたものを送信しています。 ↓ ③定期的にキューからメッセージを取得し処理を実施
追伸: 私もまだまだ道半ば故、ご指摘やアドバイスを頂ければとっても嬉しいです。
## ■事前準備 今回
VirtualBoxでCentOSにApacheをインストール。 共有ファイルで作成したtest.phpに接続すると、「You don’t have permission to access /test.php on this server.」と表示され、ページの表示ができなくて結構ハマりました、、、 無事解決出来たので手順を記録しておきます。 ##環境 VirtualBox:6.1.28 ホストOS:MacOS Big sur 11.5.2 ゲストOS:CentOS7 Apache:2.4 ##前提条件 「VirtualBox Guest Additions」をインストール済みであること 共有フォルダーのマウント方法は「自動マウント」にしていること ##エラー解消手順 エラーの原因は、ファイル共有をすることにより、ゲストOS(CentOS7)側のマウント先のフォルダの権限が強制的に「rootユーザまたはvboxsfグループ」のみしか読み込み権限が付与されていないからでした。 “` # ls -la /var/www/ drwxrwx—. 1 root vboxsf
VirtualBoxでCentOSにApacheをインストール。 共有ファイルで作成したtest.phpに接続すると、「You don’t have permission to access /test.php on this server.」と表示され、ページの表示ができなくて結構ハマりました、、、
無事解決出来たので手順を記録しておきます。
##環境 VirtualBox:6.1.28 ホストOS:MacOS Big sur 11.5.2 ゲストOS:CentOS7 Apache:2.4
##前提条件 「VirtualBox Guest Additions」をインストール済みであること 共有フォルダーのマウント方法は「自動マウント」にしていること
##エラー解消手順 エラーの原因は、ファイル共有をすることにより、ゲストOS(CentOS7)側のマウント先のフォルダの権限が強制的に「rootユーザまたはvboxsfグループ」のみしか読み込み権限が付与されていないからでした。
“` # ls -la /var/www/ drwxrwx—. 1 root vboxsf
##リファレンスとは(PHP) ###例1と例2を比較して理解しよう! #####(例1) “` $a = ‘qiita’; $b = $a; $a[0] =’z’; echo $a . PHP_EOL; echo$B . PHP_EOL; “` 上のコードを実行すると、 “` zhp php “` を返す。 #####(例2) “` $a = ‘qiita’; $b = &$a; $a[0] =’z’; echo $a . PHP_EOL; echo$B . PHP_EOL; “` 上のコードを実行すると、 “` zhp zhp “` を返す。 ###解説 変数(箱)の中に値(中身)が入っている。 ・例1のような通常の代入は$aの変数の値を$bの変数に代入している。 訳すと、$aという名前の箱の中身を$bという名前の箱の中にコピーして入れている。 なので、$aの値と$bの値は別々で存在しており、三行目で変更しているのは$aの中の値だけである。 ・例2はリファレンスを代入している。 リファレンスとは同じ変数を異なった名前で呼び出すこと。「あだ名」である。
##リファレンスとは(PHP)
###例1と例2を比較して理解しよう! #####(例1) “` $a = ‘qiita’; $b = $a; $a[0] =’z’; echo $a . PHP_EOL; echo$B . PHP_EOL; “` 上のコードを実行すると、
“` zhp php “` を返す。
#####(例2) “` $a = ‘qiita’; $b = &$a; $a[0] =’z’; echo $a . PHP_EOL; echo$B . PHP_EOL; “` 上のコードを実行すると、
“` zhp zhp “` を返す。
###解説 変数(箱)の中に値(中身)が入っている。
・例1のような通常の代入は$aの変数の値を$bの変数に代入している。 訳すと、$aという名前の箱の中身を$bという名前の箱の中にコピーして入れている。 なので、$aの値と$bの値は別々で存在しており、三行目で変更しているのは$aの中の値だけである。
・例2はリファレンスを代入している。 リファレンスとは同じ変数を異なった名前で呼び出すこと。「あだ名」である。
#動いた環境 2021年10月28日時点 OS:MacOSX BigSur CPU:M1チップ エディタ:vscode MAMP: Version 6.4(1182) 初めに以下の記事の通りに設定しました。 https://dezanari.com/mamp-xdebug/ vscodeのデバッグ再生ボタンを押すとステータスバーはオレンジになりますが、 ブレークポイントを貼ってブラウザでアクセスしても止まりませんでした。 それでググると以下の質問を見つけました。 https://teratail.com/questions/348559 この回答の通り、ポート番号を合わせると無事に止まりました。 MAMPのwebstartからphpinfoを開いて、 xdebug.remote_port とページ内検索するとポート番号が判明します。 ![スクリーンショット 2021-10-28 15.39.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201982/fed870d0-ee1d-7
#動いた環境
2021年10月28日時点 OS:MacOSX BigSur CPU:M1チップ エディタ:vscode MAMP: Version 6.4(1182)
初めに以下の記事の通りに設定しました。
https://dezanari.com/mamp-xdebug/
vscodeのデバッグ再生ボタンを押すとステータスバーはオレンジになりますが、 ブレークポイントを貼ってブラウザでアクセスしても止まりませんでした。
それでググると以下の質問を見つけました。
https://teratail.com/questions/348559
この回答の通り、ポート番号を合わせると無事に止まりました。
MAMPのwebstartからphpinfoを開いて、
xdebug.remote_port とページ内検索するとポート番号が判明します。 ![スクリーンショット 2021-10-28 15.39.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201982/fed870d0-ee1d-7
## 概要 クッキーとセッションの違いをうまく説明できなかったので、クッキー、セッション、データベース、3つのデータを保存する方法の、調べたこと、自分の考えをまとめました。 ##クッキー 特徴 – クッキーを使うことでPHPが作成したデータをクライアントのPCに保存して、ブラウザを閉じてから一定期間、維持することが出来る。 – 保存されたクッキーデータは、保存したサイトへの以降のアクセスでHTTPリクエスト中のクッキーヘッダに常に含まれるようになる。 – 基本的に、クッキーはユーザー側の操作に関わらず、すべてのHTTPリクエストに含まれる。 – クッキーはユーザーがブラウザの設定を変えることでブロックすることができる。 ## セッション – セッションとは、ユーザーがWebサイトにアクセスし、ページ遷移し、ブラウザを閉じるまでの期間のこと。 – セッション変数を使うことでクッキーと同じ用に一定期間ユーザーごとのデータを維持することが出来る。 – セッション変数はその期間だけ値を使うことが出来る変数のこと。 – セッション変数は、サーバーの設定で有効期限が決められている。 ###
## 概要 クッキーとセッションの違いをうまく説明できなかったので、クッキー、セッション、データベース、3つのデータを保存する方法の、調べたこと、自分の考えをまとめました。
##クッキー 特徴 – クッキーを使うことでPHPが作成したデータをクライアントのPCに保存して、ブラウザを閉じてから一定期間、維持することが出来る。
– 保存されたクッキーデータは、保存したサイトへの以降のアクセスでHTTPリクエスト中のクッキーヘッダに常に含まれるようになる。 – 基本的に、クッキーはユーザー側の操作に関わらず、すべてのHTTPリクエストに含まれる。 – クッキーはユーザーがブラウザの設定を変えることでブロックすることができる。
## セッション – セッションとは、ユーザーがWebサイトにアクセスし、ページ遷移し、ブラウザを閉じるまでの期間のこと。 – セッション変数を使うことでクッキーと同じ用に一定期間ユーザーごとのデータを維持することが出来る。 – セッション変数はその期間だけ値を使うことが出来る変数のこと。 – セッション変数は、サーバーの設定で有効期限が決められている。
###
# やること 1. `cloudbuild.yaml` に`docker-compose` の処理を追加 1. CloudBuild用の`docker-compose-test.yaml` を作成 1. CloudBuild用の`.env.testing` を作成 ## `cloudbuild.yaml` に`docker-compose` の処理を追加 “`yaml:cloudbuild.yaml timeout: 1200s steps: # builds the container image – name: ‘gcr.io/cloud-builders/docker’ id: Build args: – ‘build’ – ‘-t’ – ‘gcr.io/$PROJECT_ID/test:$SHORT_SHA’ – ‘-f’ – ‘Dockerfile’ – ‘.’ – name: ‘docker/compose’ id: UnitTest args:
# やること
1. `cloudbuild.yaml` に`docker-compose` の処理を追加 1. CloudBuild用の`docker-compose-test.yaml` を作成 1. CloudBuild用の`.env.testing` を作成
## `cloudbuild.yaml` に`docker-compose` の処理を追加
“`yaml:cloudbuild.yaml timeout: 1200s steps: # builds the container image – name: ‘gcr.io/cloud-builders/docker’ id: Build args: – ‘build’ – ‘-t’ – ‘gcr.io/$PROJECT_ID/test:$SHORT_SHA’ – ‘-f’ – ‘Dockerfile’ – ‘.’
– name: ‘docker/compose’ id: UnitTest args:
# この記事について sailを使って、laravelの環境を構築したところTinkerで日本語の入力ができませんでした。症状としては以下の記事と同様。 [Laravel の tinker で日本語が入力できなくて困ったけどなんとかなった話](https://qiita.com/B73W56H84/items/a9152ec00cd7996f6573) [Laravel の tinkerで日本語入力ができず色々迷走していたらもっと根本的な問題だった件](https://qiita.com/fugaxx/items/bd8de7573d727d08b128) 違いは、`./vender/bin/sail tinker`としてTinkerを起動している点です。 本記事では最終的には、Dockerコンテナ内でTinkerを起動すれば日本語入力できるようになったというところまで紹介します。 (良い方法がありましたらご教授ください。記事の一番下に参考として検証した事項をまとめています。) ## 環境(PC) “` $ ./vendor/bin/sail -v
# この記事について sailを使って、laravelの環境を構築したところTinkerで日本語の入力ができませんでした。症状としては以下の記事と同様。 [Laravel の tinker で日本語が入力できなくて困ったけどなんとかなった話](https://qiita.com/B73W56H84/items/a9152ec00cd7996f6573) [Laravel の tinkerで日本語入力ができず色々迷走していたらもっと根本的な問題だった件](https://qiita.com/fugaxx/items/bd8de7573d727d08b128)
違いは、`./vender/bin/sail tinker`としてTinkerを起動している点です。
本記事では最終的には、Dockerコンテナ内でTinkerを起動すれば日本語入力できるようになったというところまで紹介します。
(良い方法がありましたらご教授ください。記事の一番下に参考として検証した事項をまとめています。) ## 環境(PC)
“` $ ./vendor/bin/sail -v
phpunitでテストコードを書いている場合、全体実行だけでなくグループ単位だったり、書いているケースを個別で実行したい場合があります。 そんな時のコマンドメモです。 ## グループ単位の場合 “` phpunit –group=testA “` ## ケース指定の個別の場合 “` phpunit –group=testA –filter “testA-001” “` filterのみでも実行可能です “` phpunit –filter “testA-001” “` 日本語のテスト関数名にしている場合も実行可能です “` phpunit –filter “テスト〜〜〜がエラーにならないことを確認する” “`
phpunitでテストコードを書いている場合、全体実行だけでなくグループ単位だったり、書いているケースを個別で実行したい場合があります。 そんな時のコマンドメモです。
## グループ単位の場合
“` phpunit –group=testA “`
## ケース指定の個別の場合
“` phpunit –group=testA –filter “testA-001” “`
filterのみでも実行可能です
“` phpunit –filter “testA-001” “`
日本語のテスト関数名にしている場合も実行可能です
“` phpunit –filter “テスト〜〜〜がエラーにならないことを確認する” “`
# はじめに プロジェクトを進めるにつれて、PHPのバージョンの更新は確実に必要はあると思っていたのですが、なぜバージョンアップが必要なのかを具体的に把握できていなかったので考えてみました。 # 目次 1. [公式サポート期限](#Chapter1) 1. [パフォーマンス向上](#Chapter2) 1. [新文法に対する対応](#Chapter3) 1. [まとめ](#Chapter4) 1. [参考文献](#reference) # 公式サポート期限とセキュリティの脆弱性 ### PHPバージョンとサポート期限一覧 |バージョン|初回リリース|最新リリース|最新リリース日|アクティブサポート|セキュリティサポート| |——-|———|——–|———–|—————-|—————-| |8.0|2020/11/26|8.0.9|2021
# はじめに プロジェクトを進めるにつれて、PHPのバージョンの更新は確実に必要はあると思っていたのですが、なぜバージョンアップが必要なのかを具体的に把握できていなかったので考えてみました。
# 目次 1. [公式サポート期限](#Chapter1) 1. [パフォーマンス向上](#Chapter2) 1. [新文法に対する対応](#Chapter3) 1. [まとめ](#Chapter4) 1. [参考文献](#reference)
# 公式サポート期限とセキュリティの脆弱性 ### PHPバージョンとサポート期限一覧 |バージョン|初回リリース|最新リリース|最新リリース日|アクティブサポート|セキュリティサポート| |——-|———|——–|———–|—————-|—————-| |8.0|2020/11/26|8.0.9|2021
##PHP(7.4)・Bootstrap(v4.5)・Scssphp(Sass)(v1.81) Windows 10 Home ##Bootstrapとは 世界で最も人気なHTML、CSS、JavaScriptのフレームワーク メリット:①CSSを一から書かなくてよい。 ②レスポンシブデザインに対応している。 ③統一感のあるデザインが簡単にできる。 今回はComposerを用いてインストールした。 ![Bootstrapインストール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1773238/cd98bb87-a93a-e114-c3fb-116df58ac97a.png) するとVendorというフォルダが作成される。 CSSで使うには、Vendor/twbs/bootstrap/dist/cssのフォルダの中の bootstrap.css:ローカル環境向き bootstrap.min.css:本番環境向き この二つのうちどちらかをHTMLに読み込む。 “`
##PHP(7.4)・Bootstrap(v4.5)・Scssphp(Sass)(v1.81) Windows 10 Home
##Bootstrapとは 世界で最も人気なHTML、CSS、JavaScriptのフレームワーク メリット:①CSSを一から書かなくてよい。 ②レスポンシブデザインに対応している。 ③統一感のあるデザインが簡単にできる。
今回はComposerを用いてインストールした。 ![Bootstrapインストール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1773238/cd98bb87-a93a-e114-c3fb-116df58ac97a.png)
するとVendorというフォルダが作成される。 CSSで使うには、Vendor/twbs/bootstrap/dist/cssのフォルダの中の
bootstrap.css:ローカル環境向き bootstrap.min.css:本番環境向き
この二つのうちどちらかをHTMLに読み込む。
# コメント、書いてますか? プログラムを書く時、処理に対する解説などの用途としてコメントを書くことがあると思います。 プログラムの勉強をし始めた時などは、まず実装を行う前にどのような処理を行うかをコメントで書いてから実装した方がいい、プログラムと同じくらいコメントもたくさん書こう!等と教えられた方も多いと思います。(筆者もその一人) 実際のところ、コメントはどれくらいの粒度でどれくらいの量記載するのが正しいのでしょうか? ここではコメントを書くことの意義や有用性、そして実際にどのように書くべきかを考えていきたいと思います。 # コメントの例 早速ですが、コメントの例を記載しながら考えていきたいと思います。 サンプルについては僕が実際に仕事や本、その他資料で見たり書いたりしたものを例題用に変更したものですので、必ずしも普遍性が担保されているものではないということについてはご留意ください。 サンプルのコードはphpを使用しますが、他の言語でも同様の考えができるかなと。 “`php /** * 数量と単価から合計金額を算出する * @param int $quantity 数量
# コメント、書いてますか? プログラムを書く時、処理に対する解説などの用途としてコメントを書くことがあると思います。 プログラムの勉強をし始めた時などは、まず実装を行う前にどのような処理を行うかをコメントで書いてから実装した方がいい、プログラムと同じくらいコメントもたくさん書こう!等と教えられた方も多いと思います。(筆者もその一人) 実際のところ、コメントはどれくらいの粒度でどれくらいの量記載するのが正しいのでしょうか? ここではコメントを書くことの意義や有用性、そして実際にどのように書くべきかを考えていきたいと思います。
# コメントの例 早速ですが、コメントの例を記載しながら考えていきたいと思います。 サンプルについては僕が実際に仕事や本、その他資料で見たり書いたりしたものを例題用に変更したものですので、必ずしも普遍性が担保されているものではないということについてはご留意ください。 サンプルのコードはphpを使用しますが、他の言語でも同様の考えができるかなと。
“`php /** * 数量と単価から合計金額を算出する * @param int $quantity 数量