PHP関連のことを調べてみた2021年07月19日

PHP関連のことを調べてみた2021年07月19日

PHP文法(1)

## はじめに
個人的に学びになったことを書きます。
if文、for文など基本的な文法ではなく、メソッドの使い方などがメインになってくると思います。

## 宇宙船演算子
“`php
85); //結果:0
var_dump($point <=> 70); //結果:1
var_dump($point <=> 99); //結果:-1
?>
“`
| 比較結果 | 意味 |
| —- | —- |
| 0 | 右辺と左辺が等しい |
| 1 | 右辺が左辺より小さい |
| -1 | 右辺が左辺より大きい |

## 配列の合成
配列の合成をするには+とarray_merge関数の2つの方法がありますが下記の通り動きに違いがあります。

| 合成の方法 | 配列を合成時の挙動 | 連想配列を合成時の挙動 |
|———–|——————-|———————-|
|+記号を使う| 同一キー番

元記事を表示

Laravelしくじり先生その2「sesionsテーブルのidの型はBIGINT!じゃない!!」

#TL;DR
“VARCHAR(255)“(NOT NULLと主キー制約付き)でした。

#前提
– Laravel Valetで開発環境を構築しています(Docker不使用)
– Laravel 8.41.0
– PHP 8.0.8
– Nginx 1.21.1
– macOS Big Sur 11.4
– Laravel Fortifyの認証機能を使用しています
– .envファイルにて“SESSION_DRIVER=database“にしています。
– .envファイルにて“APP_DEBUG=false“にしています。
– データベースmigrationに、[Laravel純正のもの](https://readouble.com/laravel/8.x/ja/migrations.html)ではなく[ridgepole](https://github.com/ridgepole/ridgepole)を使用しています

# 事の発端
本番環境を構築してログインページからフォームのPOSTを送ったところ下記の画面が表示されました。
“419|期限切れのページ“
「L

元記事を表示

PHPを書くときに注意することリスト

PHPは自由度が高く、サクッと動くものを作るのに適した自分のような初心者にも優しい、素晴らしい言語ですよね。

一方で、自由度の高さゆえに意図しない挙動を示すことが多々あり、ある程度サービスの規模が大きくなってくると、思わぬ罠に引っかかったりすると思います。

そこで、PHPを書き始めてから3ヶ月ほど経ち、だんだん知見も溜まってきたので
個人的にPHPを書くときに気をつけたいと思ったことをリストアップしてみたいと思います。
(随時更新予定)

# in_arrayはデフォルトで型の比較をしない
第一引数に指定した値が、第二引数のarrayに含まれているかどうかを判断する`in_array`という関数、けっこう多くの場面で使うのではないでしょうか?

“`php
$value = $this->getValue();
$targets = array(
‘hoge’,
‘fuga’,
‘piyo’,
);

if (in_array($value, $targets)) {
// やりたい処理
}
“`

こんな感じで`$targets`に処理を行いたい対象を列挙して

元記事を表示

AWS(S3)に画像を保存できない

s3に画像を保存する処理を書いたのですが、以下のエラーがでてしまい画像を投稿する事ができません。
バケット内のファイルを

“`
$list = Storage::disk(‘s3’)->files(”);
dd($list);
“`

で確認することはできます。
putができません。

![スクリーンショット 2021-07-18 15.05.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/826735/af008389-38ac-eb6f-ef4d-ef4f7ad97fc9.png)

![スクリーンショット 2021-07-18 11.16.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/826735/b18b4521-4a55-9c2d-df86-615ec064e901.png)

試したこと
.envファイルの設定の見直し、○は正しい値を設定している

“`php
AWS_ACCESS_K

元記事を表示

【講義10.php_rdb実践_複数テーブル操作】マスターテーブルについて

#本記事について
今後の開発の参考になればと思い、マスターテーブルについて、講義内容や職場での実体験をまとめたもの。

##マスターテーブルについて
マスターテーブルとは、システムの運用上変更が頻繁にない基本的な情報が格納されたテーブル。
例えば、商品の情報が格納されたデータベースであれば「商品情報」「商品カテゴリ情報」がマスタテーブルになる。
「商品マスタ」「商品カテゴリマスタ」などと呼ばれる。
マスタは「m_」や「mst_」などの名前から始める、というルールでテーブル名がつけられる。
(テーブル名の例: mst_product,m_product)

##マスターテーブルの活用例
カラムの中で同じ値が繰り返し入る場合は、マスターテーブルを利用する。
ここでは顧客情報のテーブルに、関連するデータ(性別マスタ、職業マスタ)を紐付ける。
以下のような、3つのテーブルをINNER JOINを使用して結合する。
性別ID、職業IDにそれぞれ相対する名称を紐付ける。

①t_customer(顧客情報テーブル)

| id | custmer_name | gender_id

元記事を表示

【データベース】トランザクションを張ってみよう

今回はトランザクションを紹介します。

#■トランザクションとは??
データベース操作にて、まとめて実行されるべき一連の処理です。
トランザクションはbeginというSqlを実行することで開始します。
begi後に追加・更新・削除処理を行っても、すぐにDBには反映されません。
これらの変更を反映させるためには、commitを行うことで、トランザクション内の処理を一気に反映させることができます。
また、rollbackを行うことで、処理をすべて取り消すことも可能です。

####begin→トランザクションの開始
-追加処理
-更新処理
-削除処理
####commit 一括反映
若しくは、
####roll back 取り消し

それでは、トランザクションが必要な理由について例を挙げますので、イメージしてみましょう。

##Amazonで商品が購入される流れをイメージ!!

###トランザクションなしの場合
購入者AさんがカゴにA本を入れて決済ボタンを押します。カゴにA本を入れると、
在庫が1->0に減ります。
決済時に間違えてクレジットを決済をしてしまい、エラーになりました。
ここ

元記事を表示

MAMPでタイムゾーン変更が反映されない時

#MAMPでphp.iniファイルのtimezone設定を変更したのにタイムゾーン変更が反映されない
php.iniファイルを編集したはずなのに変更が反映されない
どうして?

##確認1 編集したphp.iniファイルは正しいですか?

### php.iniファイルの場所の確認
1, MAMPコントローラーからWebStartボタンをクリックしMAMPのページを開きます
2, **Tools**メニューから**phpinfo**を選択します。
3, **phpinfo**が表示されたら**Loaded Configuration File**の項目を確認します。
ここに編集すべきphp.iniファイルの場所とファイル名が記載されています。`/Applications/MAMP/bin/php/php(バージョン番号)/conf/php.ini`

このファイルを編集しないと変更が反映されません。

### よくある間違い
`/Applications/MAMP/conf/php(バージョン番号)/`フォルダに有る`php.ini`ファイルを編集した。

##確認2 php.iniフ

元記事を表示

初心者がPHPの開発で注意すること

個人的に役に立った記事をまとめメモ
各記事の執筆者様本当にありがとうございます…!
# 開発の前に読むとはかどる記事
by @mpyw 様

https://qiita.com/mpyw/items/b00b72c5c95aac573b71

https://qiita.com/mpyw/items/2f9955db1c02eeef43ea

by @7968 様

https://qiita.com/7968/items/6f089fec8dde676abb5b

#注意することポイント(初心者)
### ビューとロジックは分けて実装する
間違い↓

“`




Example

元記事を表示

Laravelに初めからある変数やメソッドには、むやみに型定義しない方が良い

## どういうことか

(PHPStormの型補完機能を使って型宣言をしたら、地味にエラーにハマったのでメモです。)

Laravelプロジェクトをインストールしたら、初めから様々なClassが作成されていると思います。
例えば、
`Http/Middleware/EncryptCookies.php`
というClassが既に存在していたりするのですが、このClassでは
`$except`という変数が定義されています。

“`EncryptCookies.php

元記事を表示

【Laravel】return back() で何が起きてるか調べてみた

#はじめに
バリデーションに失敗した場合など直前のページにリダイレクトする場合があるが、
そのときに使用する`return back()`について何が起こっているかを調べてみた。

“`php:example.php
Route::post(‘user/profile’, function () {
// リクエストのバリデート処理…

return back(); // これが何をしているのか調べたい
});
“`

#バージョン
PHP 7.4.20
Laravel 6.18.43

#前提知識
`return back()`のback()の正体はグローバルに定義されたヘルパ関数である。

>無効なフォームが送信された場合など、まれにユーザーを直前のページへリダイレクトする必要が起きます。グローバルなbackヘルパ関数を使用することで行なえます。この機能はセッションを利用しているため、back関数を呼び出すルートがwebミドルウェアグループを使用しているか、全セッションミドルウェアを確実に適用してください。

参考:[Laravel 6.x HTTPリダイレクト

元記事を表示

PHPでユニークIDを生成する

PHPでユニークなIDを生成するときには、uniqid関数を使うとできます。

## uniqid とは
uniqidは、マイクロ秒単位の現在時刻に基づき、接頭辞なしで一意なIDを取得します。
※ 同じマイクロ秒で同じIDが生成される可能性がある。

## uniqid のメリット
・一意なIDを生成する

## 使い方
### 接頭辞
接頭辞ありとなしで文字列を生成することができます。

“`
// 接頭辞なし
uniqid();
“`

“`
// 接頭辞あり
uniqid(“PREFIX_”);
“`

### 文字列の長さ
第二引数がfalse・なしの場合は、返される文字列が13文字になります。
第二引数がtrueの場合は23文字となります。

“`
// 第二引数がFALSE
uniqid(“”, false);
“`

“`
// 第二引数がTRUE
uniqid(“”, true);
“`

元記事を表示

PHP基本事項まとめ

#PHPの基本事項まとめ

1.複数行では終わりにセミコロン必要!
2.500エラーはプログラムでなにかエラーがあった時に起こる
3.PHPタグの後になにも記載しない場合は閉じタグをかかない
→閉じタグの後はHTMLと認識され空白も認識されてしまうため。
4.コメントアウトは#でもいける
5.文字列結合はドットを使う
6.ダブルクォーテーションとシングルクォーテーションの違い
・ダブルクォーテーション内では変数が使える、かぶる場合は{}をつける
・ダブルクォーテーション内ではエスケープシーケンスが使える
7.自己代入演算子

“`
$i = $i + $j
//同じ意味
$i += $j
“`
8.動的型付け言語

元記事を表示

画像変更したらstorage内に画像データを溜めないようにしたい。

# はじめに
画像を変更すると、`元の画像は削除`して`新しい画像データを保存`するようにしたい。
DBでは画像データの入れ替えはできているが、`storage内の画像データは溜まっていく一方`…。

という状況であったため、更新すると`storage`内の画像データの入れ替えができるよう実装しました。

# 条件
“`
macOS: “11.2.3 Big Sur”
Laravel Framework: “6.20.27”
PHP: “8.0.7”
nginx: “1.18”
mysql: “8.0”
vue: “2.6.14”
“`

# 画像の保存

すでに何枚か入っていますが、投稿された画像データは以下のように保存されています。
今回は、赤枠で囲った画像をピックアップして見ていこうと思います。
![スクリーンショット 2021-07-16 16.44.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1379469/39dcfb11-3eea-c936-5d34-dfb30588fa8

元記事を表示

PHPバージョンを切り替える

phpのバージョンを更新したくて、homebrewでphpをインストールして、今まで使っていた7.3から8に切り替える。

シンボリックリンクの張り替え
※ここら辺は色々やったのでどのコマンドで反映されたかわからない

“`bash
$ brew unlink php@7.3 && brew link –force php
$ brew unlink php && brew link php
“`

.bash_profileからphp@7.3のパスを削除(コメントアウト)

“`bash
# export PATH=”/usr/local/opt/php@7.3/bin:$PATH”
# export PATH=”/usr/local/opt/php@7.3/sbin:$PATH”
“`

.bash_profileを反映

“`bash
$ source ~/.bash_profile
“`

まだパスにphp@7.3が残っているので、最終的に使ってるターミナル(iterm)を再起動する。

“`bash
$ php -v
PHP 8.0.0 (cli) (buil

元記事を表示

PHPのmemory_limitのデフォルト値を変更する

次のようなメモリ制限のエラーが出た時の対処法。デフォルトでは128Mになっているので、-1(上限なし)に変更する。

“`terminal
PHP Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 4096 bytes)
“`

現在のメモリ上限を確認する。

“`terminal
$ php -r “echo ini_get(‘memory_limit’).PHP_EOL;”

128M
“`

php.iniファイルの場所を確認する。

“`terminal
$ php –ini
Configuration File (php.ini) Path: /usr/local/etc/php/7.3
Loaded Configuration File: /usr/local/etc/php/7.3/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.3/conf.d
Addit

元記事を表示

DrushコマンドでDrupalをインストールして起動する

## ComposerでDrupalをダウンロード

composerでdrupalプロジェクトを作成し、プロジェクトルートに移動します。

“`terminal
$ composer create-project drupal/recommended-project drupal-demo
$ cd drupal-demo
“`

デフォルトではDrushは入っていないので、別途composerでダウンロードします。

“`terminal
$ composer require drush/drush
“`

## インストール

DrushでDrupalのインストールを行います。

例では `$ ./vendor/bin/drush` で作成したDrupalプロジェクトのDrushを指定していますが、Drush Launcherをインストールしている方は `$ drush` コマンドで実行できます。

“`terminal
$ ./vendor/bin/drush site:install standard –db-url=sqlite://sites/defaul

元記事を表示

ざっくりのWEBの知識メモ

ざっくりとWEBの知識を書いて行きます・

1. hrefでパスは指定するときは**絶対パス**を使うべき!!
>>URLはサーバーにあげたときにドメイン、ポートが変わる、外部サイトへのアクセスには使える
>>相対パスはhtmlファイルの場所変更に対応できない

元記事を表示

Laravelで都道府県やカテゴリなどのプルダウンと文字入力から検索機能を実装する

## 業務でプルダウンと文字入力から検索機能を実装する機会があり調べながら実装したので備忘録として。

ここではユーザーが都道府県やカテゴリを選択してニュースを投稿するという前提で進める。

###都道府県とカテゴリデータの準備

config下にファイルを作成することで、定数的な使い方ができる。定義した値はconfig(‘ファイル名.キー名’)でアプリのどこからでも取得できる。

“`php:pref.php
‘北海道’,
‘2’ => ‘青森県’,
‘3’ => ‘岩手県’,
‘4’ => ‘宮城県’,
‘5’ => ‘秋田県’,
‘6’ => ‘山形県’,
‘7’ => ‘福島県’,
‘8’ => ‘茨城県’,
‘9’ => ‘栃木県’,
’10’ => ‘群馬県’,
’11’ => ‘埼玉県’,
’12’ => ‘千葉県’,
’13’ => ‘東京都’,
’14’ => ‘神奈川県’,
’15’ => ‘新潟県’,
’16’ => ‘

元記事を表示

Twitterのトレンドを取得し、記事を自動生成するアプリケーションを作ってみた。

## 概要
ツイッターを見ていてもその時々のトレンドは自分で見に行かないと分からないですよね。
自分が見ているフィードにツイートが流れてきて、そこに貼ってあるリンク先の記事を読めば今のトレンドの内容が分かるとちょっと楽しいかなと思って、ツイッターの現在のトレンドを取得して、自動的に記事が投稿されるメディアを個人開発で作成してみました。(現在はサーバー閉じています。)
こちらで生成される記事を見れば人気のツイートやトレンドに関連するニュース記事へのリンクが集まっているので、トレンドの内容を正確に素早く知ることができます。

今回は作成したバッチの内容をざっくりと話していこうと思います。

## 処理の流れ
ブログ部分は一から実装するのが面倒だったため、ワードプレスを導入し、そこに今回phpで自作した記事作成バッチを配置して記事の自動生成を行いました。

バッチの処理の流れは以下のようになっています。

“`
①twitterAPIを利用して、現在の上位5件とトレンドワードを取得
②同じくTwitterAPIを経由して、上記のトレンドが含まれているツイートで特に人気の高い(いいね数の多い

元記事を表示

LaradockでLaravel開発環境構築

## はじめに
Laradockで Laravel Frameworkをインストール
– Composer、Git、Dockerのインストールについては扱っていません。

## プロジェクト作成
“`shell
composer create-project laravel/laravel ${プロジェクト名}
“`

上の過程を通じてLaravelをインストールします。

## Laradockインストール
“`shell
git clone https://github.com/laradock/laradock.git
“`

## envファイルをコピー
“`~/laradock.
cp env-example .env
“`

.envファイルにはPORTやLaradock設定に関連するほとんどの内容があります。

## ngnixとmysqlを実行
“`shell
docker-compose up -d nginx mysql
“`

初めて実行した場合、イメージをインストールするため時間がかかります。

## コンテイナー確認

“`shell
doc

元記事を表示

OTHERカテゴリの最新記事