PHP関連のことを調べてみた2022年04月01日

PHP関連のことを調べてみた2022年04月01日
目次

PHPでデータを取得する方法

## PHPでデータを取得する6つの方法
1.「スーパーグローバル変数」から受け取る
2.「ファイル」から受け取る
3.「データベース」から受け取る
4.インターネット上の「外部URL」から受け取る
5.「メモリ」から受け取る
6.「標準関数」から受け取る

### 「スーパーグローバル変数」から受け取る 

PHPの主なスーパーグローバル変数
$_GET

$_POST

$_SERVER

$_COOKIE

$_FILES

$_SESSION

$_GET

$_POST

“`php.sample



“`
“`php.sample

元記事を表示

【独学+職業訓練】実務未経験からたった一年半でバックエンドエンジニアとして医療系自社開発企業に転職したお話

# はじめに
こんにちは。ゆうと申します。

今回の記事を書くにあたりまして前置きとして、決して、「この通りにやれば効率よく転職できる!」みたいな感じのスマートなものではなく、「泥臭くもがき、苦しんだ記録」として記しています。ですので、時には反面教師にしつつ、参考にできる部分がございましたら参考にしていただくといった形でお読みいただければ幸いだと思っております。

今回はこれからプログラマー/エンジニアとしてWeb企業へ転職を目指されている方を応援するため、私自身、知識ゼロの状態から学習をスタートし転職するまでの過程を踏まえたロードマップを共有します。

# 自己紹介

・年齢:26歳
・学歴:私立理系大学中退
・職歴:電話営業(契約社員を1年間)→テレアポスタッフ(アルバイト)
・プログラミング経験:一切なし

大学4年生の途中で休学して訪問営業の仕事をしていて、復学して研究(物理化学分野)を続けるか、興味のあった医薬の分野を0から学び直すかどうかで悩んだ挙句、はじめは薬学部を目指していましたが、勉強を進める中で医学の分野にも興味を持つようになり、医学部再受験を志して半年ほど受

元記事を表示

正規表現で記号が入った文字をチェックするには

#### お問い合わせなどの入力フォームで名前に記号などの文字が入っているかチェックしたい

記号が入っている名前はいたずらの可能性がある

正規表現で記号かどうかチェック

`[^!”#$%&'()\*\+\-\.,\/:;<=>?@\[\\\]^_`{|}~]+`

でもこういうのもチェックしたい

`①②③㌢〒♡♢`

記号や機種依存文字を全部書いてもいいが、大変なので、いっそのこと許可する文字以外だったらNGにする
ひらがな、英数字、漢字、句読点、空白
`^[ぁ-んァ-ヶーa-zA-Z0-9一-龠0-9ー、。\n\r]+$/u`

でもそうすると名前で使われている機種依存文字もNGになってしまう。

こういうやつ
`謹祐神﨑謁逸敏﨏㘴隆晴𠮷海朗都羽㤗㟢﨑々猪猪隆繁飼祥塚悅悊惞惕愠`

今回はmysqlに登録してある正規表現に一致したらNGみたいな処理を使おうとしたが、限界なので、php側でチェックすることにした。

こんなやり方がある!

PHPで機種依存文字をチェック(https://mgng.mugbum.info/60)

> mb_convert_encoding

元記事を表示

CakePHP4 クエリビルダー 記法まとめ

## 概要

クエリビルダーの使い方をまとめる。非推奨な方法が混じっているかもしれない。
詳しくは[Cookbook](https://book.cakephp.org/4/ja/orm/query-builder.html)を読むこと。

命名は[規約](https://book.cakephp.org/4/ja/intro/conventions.html#id4)に則っているものとします。
実際のDBのテーブル名はスネークケース、CakePHPで使用するモデル名はパスカルケースで記述しています。

使用している CakePHP のバージョンは 4.3.6

## まずはクエリを発行してみよう

とりあえずSQLを発行できなければ始まらない。そのための準備

“`php
use Cake\ORM\TableRegistry;

// “users”テーブルを使いたいので、UsersTableクラスのインスタンスを取得
// @var \App\Model\Table\UsersTable
$users = TableRegistry::getTableLocator()->get

元記事を表示

カテゴリ別お知らせ機能をつくる時にやること

1.wordpress化
2.index.phpのお知らせを表示したい部分に以下を記述、カスタムフィールドでそれぞれのカテゴリを作って、スラッグの部分にカテゴリの名前(当てたいCSSを書く)、それぞれのスラッグ名のクラスにCSSを当てたものを用意するとカテゴリ別に色分けできる
“`

cat_name; //カテゴリー名
$catslug = $cat[0]->slug; //スラッグ名
?>

元記事を表示

【php】SplFileObjectでcsvを読み込む前に(SJIS-win → UTF-8)

SJIS-winからUTF-8にエンコードする時は注意が必要。

“`php:before

public function convertCsv($filePath){
$csv = new SplFileObject($filePath);
$csv->setFlags(
\SplFileObject::READ_CSV | // CSV 列として行を読み込む
\SplFileObject::READ_AHEAD | // 先読み/巻き戻しで読み出す。
\SplFileObject::SKIP_EMPTY | // 空行は読み飛ばす
\SplFileObject::DROP_NEW_LINE // 行末の改行を読み飛ばす
);

$readData = collect($csv)->map(function($data,$key){

元記事を表示

ポケモンWordleの最適な初手を考えてみた

## はじめに

最近ポケモンWordleにハマっています。
効率よくクリアするための最適な初手はなんだろう?と疑問になったので自分なりに分析して調べてみました。

## ポケモンWordleとは

https://wordle.mega-yadoran.jp/

ポケモンの名前を当てるクイズゲームです。
ポケモンの名前を入力して得た情報を頼りに答えのポケモンを当てるゲームです。
詳細なルールは以下です。
![スクリーンショット 2022-03-31 11.55.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67471/9ca58009-948b-d300-65db-38ba83952faa.png)

## 先に結論

![369.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67471/57f3a50f-b6e5-aa78-f250-c0216d4c0693.png)
僕の分析の結果、最適な初手は「**ジーラン

元記事を表示

複数選択可能な入力フォームで、リクエストされたIDとDBに格納されているIDで差分がある場合、削除したり更新したりする。

# はじめに

今回、個人開発で提案商品という複数選択可能な配列形式のフィールドをforeach文で回しつつ、下記のような
処理を実装する機会があったので今後の自分用の忘備録として記事をまとめていきます。

・送られてきた提案商品IDとDBに格納している提案商品IDに差分があった場合、DBに格納されている提案商品のレコードを削除。

・そもそもリクエストとして送られてきた値に、提案商品IDが含まれておらず、その代わりに他の値が入っていた場合は
提案商品テーブルにレコードを新規作成。

・送られてきた提案商品IDと、DBに格納されている提案商品IDに差分がない場合、一致する場合はその提案商品IDのレコードの修正内容を更新する。

# 前提条件

仕様としては、提案商品編集というボタンがあり、そのボタンを押すと各商品、提案内容を入力出来て
商品名と、提案内容のセットが複数登録出来るという内容です。

提案商品テーブルに、商品IDが56、57のレコードが元々登録されていて、どちらかの商品を削除したい場合は
商品名の横に ×ボタンが付いており それを押すとフロント側でその商品の表示が削除され

元記事を表示

PHPにおけるDTOとはどうあるべきか?を今更考えてみた

今更ながらPHPにおけるモデル(DTO)とはどうあるべきか?を考えてみた。
(php8.0前提)

### 私の結論

まずは結論から。上司に怒られっからね!

“`php
$value) {
match($key)

元記事を表示

Cloud Run→Cloud Storageの画像保存

メモはたくさんあるのですが、まとめる時間がないです。

## とどいた案件
「Google Cloud(以下GCP)でWebアプリ走らせて」

お、おう、、、

## このタイミングで
いつかはAWSかGCPかと思ってましたが、まさかのこのタイミングでこの案件とは、、

## 環境
PHP8 Laravel8.x Dockerつかってます

## Cloud Runここが困ったぞ

コストカットのために未使用時はサーバがすぐに止まる設定にしているのですが、**アップロードした写真など**はアクセス後に消える仕様らしい。

なので、プロフィール写真や、発行したPDFなどはサーバがお眠りになた瞬間に消えるらしい。

いろいろググると、S3か、FTP(SFTP)がオススメらしい。

S3は別のバックアップで使っているのですが、お客様にまたS3を契約してもらうのは億劫なので、**Google Cloud Storage**を利用することにしました。

## Cloud RunからCloud Storageにどうやってアップするの?
### よくわかない
いろいろ検索した結果、、、よくわから

元記事を表示

LaravelのCashierでwebhookをイベントリスナでアレコレしようとして困った話

## ■ はじめに

当記事は

https://qiita.com/smtwtfs/items/daffbacd54f1dbc3df7b

↑この記事からの続きです。

Stripeのwebookのことについて書きますが、
Laravelでwebhookをどうやって使えるようにするかの詳細や、
ngrokでwebhookをテストできるよ、ということなどについては
既にたくさん良い記事がありますので
(記事を書いて下さった皆様大変お世話になりました🙇‍♀️)
当記事ではLaravelでStripeからwebhookを受けることができるようになったという前提で、
その後イベントリスナを活用しようとして
少し困ったことがあったので、そのときのことを備忘録的に残しておきたいと思います。

## ■ ありがとうCashier、ありがとうwebhook
LaravelのCashierではStripeからのwebhookを受けて色々な処理をしてくれます。
Cashierでwebhookを処理できるようにするには、
>[Laravel 8.x Laravel Cashier (Stripe)](ht

元記事を表示

プログラミングを学んで半年の感想

## プログラミング学習スタート

2021年5月からプログラミングって何かなという好奇心で学習を始めました。
初めはpythonがわかりやすいという記事を読んだので、pythonを触ってみました。
pythonの基本文法と、ゲーム作りを実践してみましたが、
結構面白くてプログラマーになるための情報を集めながら色々触ってみました。

2021年は下記の項目を学習しました。

– python
– html
– css
– javascript
– php
– Linux
– AWS
– mySQL
– git

学習中に気づいたこととして、
いつも使っているアプリやウェブサービス全てがプログラミング言語で書いていることでしてさらに学習のモチベーションになりました。

まずはフロントエンドとバックエンドを経験して、もっと面白い領域を深掘りしようと思いました。

## フロントエンド
– HTML, CSS, Javascript

### 習ったこと

– HTML,CSS,Javascriptの基礎
– CSSのFlexible Boxを利用した配置方法
– CSSでhoverなどのア

元記事を表示

予定管理アプリを作ってみた

Wenサイト: https://plan.towelman.server-on.net/sign_in

# 動機
 自分で予定管理をしようと思ったときに一つのプロジェクトごとに、複数人で管理できるような物が欲しくなり探してもこれといってピンとくるものがなかったため自分で作ってみようと思った。

# 大雑把な機能
 基本予定をプロジェクト単位で分ける。そしてプロジェクトは2種類ある。一つ目は複数人で管理・参画でき、「やること」の担当をそれぞれに割り振ることができて、期間を指定する「パブリックプロジェクト」である。基本的になにかの目的をなすための計画を管理するのに使うプロジェクトで使い方次第で1人でも複数人でも使えるようになっている。また、複数人で使い、自分以外にも計画に変更を加えさせたい人がいる場合はその人を管理者にすることによって実現可能である。そして二つ目は自分専用の期間を指定できない「プライベートプロジェクト」である。これはなにかの目的をなすための計画ではなく、日常で自分がやらないといけない「やること」を管理するプロジェクトだ。このプロジェクトで「入浴する」、「掃除する」などの「

元記事を表示

MAMPのローカル環境では動くのに、サーバーにアップするとphpが動かない(HTTP500エラー)

## サーバーのphpのshort_open_tagがoffになっている可能性
short_open_tagは、phpを省略して書く方法

## その情報を見るには
ファイルにinfo.phpという名前のからファイルを入れてアップ、アドレスバーにそこまでのファイルのパスを書く。
→サーバーの設定情報一覧が出る

## 解決策
info.phpページのuser_ini.filenameに書いてあるファイルの名前を作ってアップする
そこにshort_open_tagをオンにする記述して、アップする
例).user.ini

記述するコード↓
https://helog.jp/php/short_open_tag/

元記事を表示

【PHP】サマータイムかどうかを判定する

## 目的
サマータイムのある地域において、特定の日付がサマータイムの期間内かどうかを調べる機会があったので、PHPで判定の実装をしてみました。

## 結論
DateTimeZone::getTransitionsを用いて判定を行います。
“`php
$timezone = new DateTimeZone(‘America/Los_Angeles’);
$datetime = new DateTime(‘2022/3/12’, $timezone);
$transitions = $tz->getTransitions($datetime->getTimestamp(), $datetime->getTimestamp());
echo $transitions[0][‘isdst’]; // false
“`

## DateTimeZoneオブジェクト

PHPの日付クラスであるDateTimeはタイムゾーンの情報は持っていますが、サマータイムの情報はもっていません。
与えられた日時においてサマータイムかを判定するために5分で読める! laravel で DB 作成から 画面にデータを表示するまで

大事な部分でありながら、短い文章でまとめられていて初学者でもイメージしやすいものがあまりなかったのでまとめてみました。間違っている部分もあるかもしれません。

初学者の備忘録ですので参考までに
環境
+ mac
+ mamp
+ composer 利用
+ MySql を利用

## laravel インストール
“`
composer create-project –prefer-dist “laravel/laravel=6.*” プロジェクト名
“`
LTS(ロング・ターム・サポート)の「6」系統を使うことが多いと思います
“`
php artisan serve
“`
で確認

## DB の作成
MAMPの画面の「webstart」をクリックし
http://localhost:8888/MAMP/?language=English#
の「tools」->「phpMyAdmin」と行き、DB を作成

## 「.env」の設定を変更
http://localhost:8888/MAMP/?language=English#
の真ん中あたりにある「MySql

元記事を表示

静的(スタティック)メソッドと動的(インスタンス)メソッド

# 静的(スタティック)メソッドと動的(インスタンス)メソッドの違いとは?

## 静的(スタティック)メソッドとは何か?
クラスの中で「static」を記述して作成した関数の中のメソッドのこと。呼び出しはクラスに対して行い、どこで呼び出しても同じ処理を行う。クラスメソッド」という名称もよく使う。

– 定義例

“`php
//クラスの中で定義
[アクセス権限] static function メソッド名(){
//処理
};
“`

## 動的(インスタンス)メソッドとは何か?
インスタンスに対して呼び出し、インスタンス毎に固有の結果を返す。関数を定義する時は「static」を付けない。

*インスタンスとは、クラスで定義したプロパティを受け継いでいるものを指します。
詳しくはhttps://qiita.com/non0311/items/26f18af83d84ae95bc91

– 定義例

“`php
//クラスの中で定義
[アクセス権限] function メソッド名(){
//処理
};
“`

## 静的(スタティック)メソッドと動的(インスタンス)メソ

元記事を表示

名前空間 php (学習中・メモ)

名前空間について書いていきます。

・namespaceとは
名前空間とも呼ばれ、項目をカプセル化するときに使用します。
これにより、例えば通常同じファイルに同じクラスや関数名、定数名が存在することはできませんが、名前空間を使用することにより、関連するクラスや、インターフェイス、関数、定数などをグループ化することが可能です。また、名前空間を指定しておけば自分が作ったクラスが、サードパーティのクラスや関数などと名前が衝突することを防ぐことができます。

・書き方
namespace 名前空間名;
必ずソースコードの1番先頭で宣言する。「クラス」「インターフェイス」「関数」「定数」が名前空間の影響を受けます。また、namespaceの前にHTMLを記述するとエラーになる。

namespace name1;

function getName(){
return ‘tanaka’;
}

namespace name2;

function getName(){
return ‘kodama’;
}

namespaceを宣言すると、その後に記述した関数はその名前空間の関数に属

元記事を表示

【Laravelエラー】Cannot add or update a child row: a foreign key constraint fails

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 状況

“`php artisan migrate:refresh –seed“`を実行したとき、外部キーを設定している場合に下記のエラーが出ることがある。

“`
Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails…
“`

## 原因
上記コマンドで“`refresh“`した後に“`db:seed“`を実行しているが、seedを実行するファイルの順番で子ファイルが親ファイルより先に実行されてしまっているから。

## 解決法
migrateがちゃんとされているかを確認しできていたら、
ファイルを指定して、親ファイルが先にseedされるようにする。

“`
db:seed –class=HogeSeeder
“`

元記事を表示

CPI / ACE01 に入れた Laravel を 5.5 から 6.0 にバージョンアップした話

# サーバーのバージョンを php7.0 から php7.4 に上げよ

対象のサイトは laravel5.5 で作られているもので、自分的Laravel案件の初期の頃のものです。申し訳ないですがもう中身なんて覚えていません。
CPIでは、PHPのバージョンを .htaccess で変更できます。ディレクトリごとに設定することも可能なようです。CPIすごいねえ。。

とりあえずとにかく、まずはテスト環境で PHP7.4に変更してみましたが、動きません!
PHP7.4 では Laravel6.0 以上でないと動かないのです。

というわけで
# Laravel のバージョンを 5.5 から 6.0 に上げよ

大丈夫!
素直に作ってたら問題はあまりありません。

ただし、CPIのACE01(今回は ae***〜 サーバー)では OpenSSL がサポートされていないため、SSHでは行えません。
弊社では最近は Dockerで開発することが多いので、今回もDocker開発環境で行いました。

ここから手順を①〜⑤の5つに分けて書いていきます。

## ① Docker
– ベースイメージ

元記事を表示

OTHERカテゴリの最新記事