PHP関連のことを調べてみた2020年02月29日

PHP関連のことを調べてみた2020年02月29日

Laravelの外部キー制約でハマった話

#はじめに
1. Laravel初心者につき、お手柔らかに。
2. 自分がハマってしまったので備忘録として。
3. 「間違ってる!」、「○○したほうが良い!」みたいなことは教えてください。

# ハマったこと
マイグレーションファイルを作成中のこと。外部制約キーを記述し、いざ`$ php artisan migrate`をすると、SQLSTATE[HY000]: General errorのエラーが。
参照元のテーブルや型の部分で間違いがあるのかと思い何度も確認したが間違いはなさそう。

# 原因
結論から述べると、マイグレーションファイルの順番(作成の順番)がまずかったようです。
最初のマイグレーションファイルがこれ↓
スクリーンショット 2020-02-28 17.12.51.pngisset について

##issetを使う機会が多かったのでメモを残しておきます。

###issetとは
変数にnull以外の値がセットされているかどうか検証する。

まず、3つの変数を初期化しておく。

“`php:qiita.php
$a = ‘a’;
$b = null;
$c = [‘aa’=>’a’, ‘bb’=>null];
“`

以下の状態でNoticeエラーが発生するのはどれか。

“`php:qiita.php
echo $a.”\n”; //a
echo $b.”\n”;//出力なし
echo $d.”\n”;//Noticeエラー
echo $c[‘aa’].”\n”;//a
echo $c[‘bb’].”\n”;//出力なし
echo $c[‘dd’].”\n”;//Noticeエラー
“`

変数d,c[‘dd’]は初期化されていないので参照した瞬間にNoticeエラーになる。

以下の関数を定義

“`php:qiita.php
function echoBool($bl){
if($bl) echo ‘YES’;
else echo ‘NO’;
}
“`

元記事を表示

laravel6のbladeファイル内で変数・配列を新規作成する。

# bladeファイル内で変数・配列を新規作成する。
“`php
{{– laravel6標準ではphpタグでしかできない。(blade構文を拡張して追加・作成する方法はある) –}}

{{– 配列の場合は、値の確認もphpタグで –}}

{{– 配列の場合下記ではエラーになる。恐らく後からblade内で追加した配列だからだと思われる。 –}}
{{ dump( $v ) }}

{{–しかし下記はエラーにならない –}}
{{ dump( $v[0] ) }}
“`
### 参考情報
– [Laravel5.4ではbladeファイル内で`{{–*/ $hoge = ‘hoge’ /*–}}`といった書き方で変数代入できない – Qiita](https://qiita.com/madayo/items/667beaec1121ec6dd13a)
– [php – Bladeテンプレートで変数を設定したい – スタック・オーバーフロー

元記事を表示

PHPの有名どころライブラリ群メモ

# PHPの有名どころライブラリ群メモ

# PSR実装

## PSR-3 Logger

– [monolog](https://packagist.org/packages/monolog/monolog)
– 最古のPSR-3実装。とりあえずこれを使っておけば問題ない
– Symfony2で採用された

## PSR-7 Http Message

– [laminas/laminas-diactoros](https://packagist.org/packages/zendframework/zend-diactoros)
– 昔は [zendframework/zend-diactoros](https://packagist.org/packages/zendframework/zend-diactoros) だった
– [guzzlehttp/psr7](https://packagist.org/packages/guzzlehttp/psr7)
– HTTPクライアントとしてguzzleを使う機会は多い
– [slim/psr7](https:/

元記事を表示

LIMIT句を使用してページネーションに必要な件数分を取得する図

“`sql
LIMIT 取得開始行, 取得件数;
“`

「**取得開始行**」は0から始まる数値を指定するため、仮に11〜15までの5件分を取得したい場合は以下のような指定になる。

“`sql
LIMIT 10, 5;
“`
4ページ目のデータ行を7件分取得する場合のSQL

“`sql
SELECT * FROM members LIMIT 21,7;
“`

仮にこの取得したパラメータ「4」から「21」を指定するための逆算を行う。
そのためには、**過去のページ数に表示件数分を掛ける**必要がある。

![](https://i.imgur.com/fnlFUN6.jpg)

![](https://i.imgur.com/tyx3Y0k.jpg)

“`php
// offsetとは基準値から差分を相殺した値のこと
$offset = ($page – 1) * 7;
“`

これで各ページごとに、毎回必要な件数分のデータだけを取得することができるようになる。

元記事を表示

【PHP】比較演算子「==」と「===」の違い

#はじめに
業務でphpを使い始めてから4ヶ月目ですが、正直なんとなくの知識でコードを書いていたので、あやふやだった部分を学習し記事にすることで理解を深めていこうと思います。

#「==」 と 「===」の違い
2つの値が等しいかどうか確認する場合、基本的には`「==」`ではなく`「===」`を使いましょう、とネットのどの記事にも書いてありますがそれは一体なぜなのか??
ここで、整数型の1と文字列の1を比較して見ます。

“`php5
var_dump(1 == ‘1’); //bool(true)
var_dump(1 === ‘1’); //bool(false)
“`

このような結果となります。
なぜ`「==」`の方はtrueとなってしまうのか??
それは`「==」`だと比較する際にphpが自動キャストを行うからです!

#自動キャスト
キャストというのはデータ型の変換を意味します。
phpは異なる型同士で演算を行う場合、自動キャストを行います。
特に文字列型はキャストがされやすい型で、「数値っぽい文字列」数値型にキャストしてから

元記事を表示

brew install php@7.4を実行した時にエラーが出た話

# 目的

– エラー解決の方法をまとめる

# エラー概要

– 下記コマンドを実行後エラーが出力された。

“`terminal
$ brew install php@7.4
“`

– エラー文を下記に記載する。

“`
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
Error: The following formula
[#, #]
cannot be installed as binary package and must be built from source.
Install the Command Line Tools:
xcode-select

元記事を表示

PHPでmkdir時に4桁のパーミッションを文字列型の変数の値より指定するには

PHPのmkdir関数でディレクトリを作成する際に8進数4桁のパーミッションを指定する場合、mkdir関数の第2引数へ

“`
mkdir(‘/var/dat/hogefuga’, 0755, true);
“`
のような形で指定することで、0755(rwxr-xr-x)というパーミッションのディレクトリが作成されます。

変数でセットする場合も、

“`
$perm = 0755;
mkdir(‘/var/dat/hogefuga’, 0755, true);
“`
とすることで、上記と同様のパーミッションでディレクトリを作成することができます。

しかし、変数が文字列型である場合、例えば

“`
$perm = ‘0755’;
mkdir(‘/var/dat/hogefuga’, 0755, true);
“`
である場合、0755(rwxr-xr-x)とならず(例えば、-wxr—tのようになり)、意図したパーミッションとならない場合があります。

変数が文字列型であるケースとしては、Webシステムから送信された値や、DBやAPI、ファイル等から取得した値を使用す

元記事を表示

【PHP】array(連想配列)とobjectの違い

#array(連想配列)

“`
$array = [
    “school” => “日本高校”,
    “class” => “A”,
];

echo $array[“school”];
// 日本高校
“`

#オブジェクト

“`
class object{
    public $school = “日本高校”;
    public $class = “A”;
}
$objectSchool = new object;
echo $objectSchool->school;
// 日本高校
“`

#確認方法
var_dumpして先頭にarrayとobjectのどちらが付いているか

#注意すること
呼び出し方が違う(上記コード参照)

元記事を表示

PHPで十進法->二進法に変換する

PHPで十進法->二進法に変換するコードを書いてみました。
decbin()関数があリますが。

“`php:binary.php

“`

元記事を表示

文系ガチの未経験エンジニアだった僕が自力4ヶ月弱で自社開発のweb系会社で新卒内定をもらうために行ったこと

#誰に読んで欲しいか
・文系新卒未経験の方
・web系の会社で働きたい方
・フリーランスでアソビタィ!!

偉そうに書きますがご容赦ください>< #なぜ書くのか 実際に自分がエンジニアになりたいと思った時に情報が全くなかったから。 **何をしなければいけないかが全くわからなかった。** web系で就職した人や未経験理系卒の方の情報は多少あれど文系未経験新卒でweb系エンジニアになった人の情報は全くなかったため。しかし文系卒のエンジニア志望は増えて来ていてニーズはかなりあると考えた。 #自己紹介 早稲田大学文系3年生。 長所は考えた上で実際に行動にすぐに移せること。 大学生時代は酒飲み、遊び、そして**オーストラリアとニュージーランドでワーキングホリデーを行い、ガチガチの現地の環境に身を置いて生活をした。** その時に初めてテクノロジーに触れて衝撃を受け、ITに興味を少し持つ。 ものを作ってびっくりさせることが好き。 #自分が行ったこと ####3年生の夏 コンサル目指してサマーインターンを応募しまくるも落選落選。 →自己分析を重ねてどう考えても仕事よりノマドになって海外で自由に

元記事を表示

【PHP】CSVファイルを読み込む方法

#はじめに
アプリケーションを作成しているとcsvファイルを読み込み、書き込みする場面が多くあると思います。
今回はcsvファイルを読み込み、書き込みする方法を解説します。

##今回使用するcsvファイル 祝日のデータ
内閣府が出している祝日のファイルを使って解説します。

中身は下記のような形式です。

“`:syukujitu.csv
1955/1/1,元日
1955/1/15,成人の日
1955/3/21,春分の日
  // :
  // :
2021/10/11,スポーツの日
2021/11/3,文化の日
2021/11/23,勤労感謝の日
“`

#csvファイルの読み込み
csvファイルを読み込む方法の大まかな流れは下記の通りです。

1. csvファイルを開く
2. csvファイルを読み込む
3. csvファイルを閉じる

##1. csvファイルを開く
まず、csvファイルを読み込むためにファイルを開きます。
使用する関数は`fopen`です。
この関数の処理に成功するとファイルポインタリソースが返ってきます。
ファイルポインタリソースとはファイルの読み書きに必

元記事を表示

RHEL7でyum update 時にPHP5.4がアップデート出来ない場合の対応

RedHat Enterprise Linux 7(RHEL7)で、yum updateしようとした際に次のようなメッセージが表示され、php5.4のアップデートに失敗する場合があります。

“`
# yum update
読み込んだプラグイン:langpacks, product-id, search-disabled-repos, subscription-manager
依存性の解決をしています
–> トランザクションの確認を実行しています。
—> パッケージ php.x86_64 0:5.4.16-46.el7 を 更新
—> パッケージ php.x86_64 0:5.4.16-46.1.el7_7 を アップデート
—> パッケージ php-cli.x86_64 0:5.4.16-46.el7 を 更新
–> 依存性の処理をしています: php-cli(x86-64) = 5.4.16-46.el7 のパッケージ: php-devel-5.4.16-46.el7.x86_64
—> パッケージ php-cli.x86_64 0:5.4.16-46.1.e

元記事を表示

Laravel 暗号化 初期化ベクトルが格納される場所

Laravelには“`encrypt“`、“`decrypt“`という暗号化、復号のヘルパーメソッドが用意されています。

暗号化 6.x Laravel
https://readouble.com/laravel/6.x/ja/encryption.html

暗号化の結果を見ると、同じ文言でも全く違う文字列になっています。ということは、Laravelの暗号化ではランダム生成された初期化ベクトルを使っているということになりますが、データベースには初期化ベクトルのカラムはありません。初期化ベクトルはどこに保存されているのでしょうか。

# 前提知識

LaravelはAES-256-CBCという方式で暗号化をしています。この記事を理解するためには、AES、CBC、初期化ベクトルについてある程度の知識が必要です。

プログラマの暗号化入門
https://qiita.com/asksaito/items/1793b8d8b3069b0b8d68

Advanced Encryption Standard
https://ja.wikipedia.org/wiki/Advanced

元記事を表示

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; WP_MatchesMapRegex has a deprecated constructor in /

⚠️階層ファイルがめちゃくちゃなのは、スルーしてくださいw

#WordPressの自作テーマの作り方の講座を見ていて急に出て来たエラー

`Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; WP_MatchesMapRegex has a deprecated constructor in /Users/Sites/bootstrap_wp_udemy/B2W Final Course Files/B – Download WordPress/b2w/wp-includes/class-wp.php on line 633
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; Translation_Entry has a deprecated constructo

元記事を表示

【Laravel】環境構築からSNS連携まで

# Laravel 環境構築
https://qiita.com/sano1202/items/6021856b70e4f8d3dc3d

# Laravel ログイン機能実装

Laravelでサクッとログイン機能を実装する方法


https://readouble.com/laravel/5.6/ja/authentication.html

# Laravel SNS API連携

[Laravel] Socialite で SNS 認証を手軽に実装

元記事を表示

MODx Evolutionのエレメントをファイル出力する

MODx Evolutionは、CMSとしても、ライトなWebアプリケーションフレームワークとしても使い勝手が良いのですが、エレメントの管理に常に悩まされます。エレメント(テンプレート、テンプレート変数、チャンク、スニペット、プラグイン)は管理画面上から手軽に追加・編集可能な利点がある反面、DB上でコードが管理されているのでバージョン管理やコードの比較、バックアップがしづらい等、そのような問題がメンテ時の欠点として出てきます。(手軽さとメンテのしやすさはトレードオフの関係です)

そこで、コードを出力してファイルとして管理できるようにしました。ざっくりと書いた感じなので、調整が必要な場合もあるかも知れませんが、これによってメンテが少しでも楽になれば。。

## コード
“`php

元記事を表示

Laravelプロジェクト作成から初めに行うべき設定まとめ

# はじめに
Laravelプロジェクトを作成する方法と、初めに行うべき設定(DB設定や日本語化など)をまとめました。

# 環境
– macOS Catalina 10.15.3
– PHP 7.3.11
– Composer 1.9.3
– Laravel 6.17.1

# プロジェクト作成
ターミナルで以下のコマンドを実行します。

“`terminal
$ composer create-project laravel/laravel –prefer-dist sample
Installing laravel/laravel (v6.12.0)
– Installing laravel/laravel (v6.12.0): Loading from cache

Application key set successfully.
“`

## `–prefer-dist`について

`–prefer-dist`は、Laravelを圧縮(zip形式)してダウンロードするためのオプションになります。
`–prefer-dist`を指定しないと、Lara

元記事を表示

XLSXWriterの導入

## 参考
– [PHP-XLSXWriterの導入とはじめの一歩](https://armageddooon.hatenablog.com/entry/2018/12/07/115733)

## 環境
– PHP 5.6
– Laravel 5.4
– LaravelExcel 2.1
– XLSXWriter

LaravelExcelを利用し、DBから取得したデータをExcelファイルに書き込んでExportする処理を作っていたが、データ件数が大量になると

`Allowed memory size of ○○○○○ bytes exhausted`

というメモリオーバーのエラーが出た。

PHPでExcelファイルを作成する際にはしばしばぶち当たるこの問題。
今回は顧客の要望をまったく満たせないパフォーマンスだったので、ライブラリをXLSXWriterに変更してみた。

パッケージのインストール

“`
composer require mk-j/PHP_XLSXWriter
“`

簡単な使い方

“`php

use XLSXWriter;

// 中略

//

元記事を表示

「チーム共有機能・Views生成時の命名規則修正」LaravelDB.com

# ◇Laravel DB.com を初めて知った人はこちらから
1.Laravel DB.com ってなに?前回の紹介記事です!

2.[Qiita記事LaravelDB.comの紹介 >> ](https://qiita.com/daisu_yamazaki/items/068595670bdc2b6fe3fc)

3.次にLaravelDB.comを知った人は以下へどうぞ。

4.[LaravelDB.comへログイン >> ](https://laraveldb.com)

#◇NewUpdate[2020-02-25~]

###1.Update:Views生成時フォルダ名の命名規則
以前と現在のLaravelDB.comのView生成時の命名規則は以下です。

| | 記法| 複/単 | 例 |
|:—————–|:——————|:——————:|:——————:|
| **以前** | キャメルケース | 複数形 | testDemos |
|

元記事を表示

OTHERカテゴリの最新記事