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

PHP関連のことを調べてみた2021年02月16日
目次

PHP5上級試験/準上級試験の上級合格に挑戦(2) 3章関数中編

# 前回
[上級Ⅱ3章関数前編](https://qiita.com/Atsulabo/items/1697299314441ff22105)

+ 副作用をもつ関数
+ 関数表記方法・変数との表記方法の違い

# スコープ
+ グローバル(つまり関数の外側)スコープ・関数レベルのスコープ
+ マクロで言う、Public/Private
+ 関数内から、外にある変数にアクセスしたいときはglobalを使う
+ ここからの出題は、スコープを使って出力がどうなるかを問う問題が多い

# スコープに関する問題
さて、下記は1を出力するか否か?

“`index.php

function test() {
$x = 1;
}
$x = test();
echo $x;
“`

# 解答
正解は、「何も出力しない」
なぜなら、 関数内で、$x = 1を出していてもそれを関数の外に出す処理をしていないため
外側の$xには何も値が入らないからである。

正確には、下のように書けば、1が出力される。

“`index.php

function test() {
$x

元記事を表示

Herokuでデプロイ後、日時表示がUTCになってしまう(time_zoneの設定)

#環境
Mac
PHP 7.3.24
ClearDB MySQL(MySQL Workbenchで操作)
Heroku(本番環境)

##現状
・Heroku clearDB MySQLにおいてデフォルトでUTCで保存されている
・デプロイをしてから、本番環境でUTC表示になってしまった(ローカル環境で使用している時は日本時間で表示されていた)

##実現したいこと
・投稿した際に、日本時間で表示させる
・発生している9時間の時差を解決する方法を知りたい

##調べたこと
・clearDB MySQLでデフォルト設定されているUTCは変更できない。(自動的にUTCで保存されてしまう)
・PHPプログラムで実装する方法が良さそう

##試したこと
・php.ini、HerokuのtimezoneをAsia/Tokyoに変更

・date_default_timezoneを使用。効果なし。これで、データ登録の際に、日本時間で登録してくれると思っていた。(取り扱うデータベースによってはこの方法で登録できる?)

##解決
接続の際に、タイムゾーンを設定することで、日本時間で登録され表示され

元記事を表示

計算と集計

##3.10 計算と集計

####3.10.1 基本的な集計
データベースは、計算や集計の機能も備えています。
次のようなSQLを実行してみましょう。

“`sql
SELECT SUM(price) * FROM `my_items`;
“`

元記事を表示

猫の画像と日記投稿サイト 課題や今後の目標

###現在、猫の画像と日記(記事)投稿ポートフォリオサイト制作中。
https://cat-lover4432.herokuapp.com/

###☆会員登録、ログイン機能、ページネーション(多分)あり。

###☆現在の課題
・ログイン後に、画像のアップロードと日記(記事)投稿画面に行けるボタンがない(画像のアップロードだけは/output/image/upload/imageなどと自分でURL飛ばしたらいける。投稿フォームはおそらくない)、自身のプロフィールの画面とそこに行けるボタンがない、投稿一覧の画面とそこにいけるボタンがない
https://cacoo.com/diagrams/1bvOuNN5mwuDAzLc#C2FB6

・ユーザー一覧に行こうとしたらエラーがでるようになった

###☆2月下旬からの1ヶ月で付けたい機能(頑張れるなら)
・投稿フォーム作成
・投稿、プロフィールボタン作成
・日記(記事)編集機能(余裕があれば)
・日記(記事)削除機能
・投稿に対するコメント機能(余裕があれば)
・プロフ写真や自己紹介テキストなどがあるプロフィール
・お気に入り機能(余裕

元記事を表示

【PHP】Laravelで遊ぶ(セットアップ)

#この記事について
久しぶりにエンジニアとしてお仕事をし始めたので、ちょくちょく記事を投稿していきたいと思っています。
ここ1ヶ月ほどLaravelで遊んでいるので、備忘録として記事に残します。
今回はLaravelのセットアップまで。

#環境
OS:Windows10 Home

#Laravelのセットアップ
##PHP環境のセットアップ
ローカル環境でさくっとPHP環境をセットアップするには「XAMPP」が楽ですよね。
[ここ](https://www.apachefriends.org/jp/index.html)からダウンロードします。
Windows版も8.0.2が最新版ですが、本記事では7.4.15をインストールすることにします。
インストール自体は特に悩むことはないので、割愛します。

インストールを完了しても、このままだとコマンドプロンプトでPHPが使えないので、
環境変数にXAMPPでインストールしたフォルダ群に含まれるPHPフォルダのPathを追加します。

僕の場合、CドライブのWorks→Dev→XAMPPというフォルダにインストールしたので、
「C:\W

元記事を表示

Laravelで指定の言語で翻訳があるかどうかの判定をしたい

# はじめに
こんにちは。ひそかに保持しているビットコインがついに800%を超えました、筆者です 🙂

Laravelで多言語サイトの構築をしているのですが、指定の言語で翻訳があるかどうかの判定をしたいケースがありました。

先入観にとらわれ地味にうまくいかなかったので記事にしました。
参考にしてくださいませ。

# 前提
## 翻訳ファイル
“`php:resources/lang/ja/messages.php
return [
];
“`

“`php:resources/lang/en/messages.php
return [
‘title’ => ‘Hello’,
];
“`

## 設定ファイル
“`php:config/app.php
return [
‘fallback_locale’ => ‘en’,
];
“`

# 悪い例:sob:
“`php
App::setLocale(‘ja’);
$has = \Illuminate\Support\Facades\Lang::has(‘messages.title’);
du

元記事を表示

xamppでPHPからaccessにデータを繰り返し登録していたら急にエラーが出て焦った

データ移行の案件で、30万件のデータをaccessに登録、削除していたら、急に以下のようなエラーが出て書き込めなくなりました。

**SQLSTATE[HY000]: General error: -1206 [Microsoft][ODBC Microsoft Access Driver] データベース ‘|’ を開くことができません。アプリケーションで認識できないデータベースであるか、またはファイルが破損しています。**

## とりえあずググる

こちらの記事を参考にさせていただきました。
[Access 2010 (x64) で 2GB 以上のデータベースを扱えない](https://ez-net.jp/article/81/a2yIHklK/2aeLDr8nt9Fp/)

accessのサイズを確認すると、たしかに2GBを超えていました。。。

## トランザクションログ?

昔SQLServerで、サイズが大きすぎてインポートできない問題を思い出し、トランザクションログを削除する機能がないか調べました。

## データベース最適化で解決

データベースツール内の「データベー

元記事を表示

PHP5上級試験/準上級試験の上級合格に挑戦(2) 3章関数前編

# 先日の記事を書いた後
+ Qiitaに投稿後あらためて自分の記事見たら、参考記事としてPHP5上級試験のをまとめてる方がいた(下記)
+ せっかくなのでそれも参考にしつつ、自分なりに勉強に役に立つようにまとめたい

# 参考
[PHP5技術者認定試験(上級)に学ぶ、実はよく知らないPHPの仕様 (1) | @tmak_tsukamotoさん](https://qiita.com/tmak_tsukamoto/items/84f7d62f6106fad5fd23)

#注意
初級ならわかるようなものはこちらには書きません。
すみませんが、変数や関数とはなんぞやがわかるようになってから再び来てください。
分かりづらい、間違いやすいと思うものだけ、下記に整理していきます。
勉強のために、問題形式になってますのでご了承ください。

# 覚えること雑記
+ マクロ屋時代からパラメータのことを引数と言っていたが、正確には仮引数
+ その仮引数に入れる値こそが実引数。(確かにそのほうがわかりやすい)

# 副作用を持つ関数
+ 副作用とは、引数から返り値を計算す

元記事を表示

PHP5上級試験/準上級試験の上級合格に挑戦(1) 試験研究

# 自己紹介と受験背景
+ 学生時代から今まで、プライベートでの活動の一つとしてWebサイトを作り運用してきている
+ 本来の業務では使ったことはないが、フロントエンドエンジニアで必要なことは一通りできる
+ その一方で、入社後からずっとマクロを学び業務としてきたマクロ屋
+ 現在の環境でPHPについて学ぶ必要があり、その過程で自然と上級試験を受けることに
+ PHPは関数とか書き方とかはマクロと似ているところがあり、基礎のところは理解している
+ しかし業務ではまだまだ使えていない
+ PHP7初級試験は合格済(上司がPHP5でなくて最新が7だからそれを受けて、と言われた)
+ その後、PHP7上級は2021年2月の時点でまだなく、PHP5上級を受けることに
+ 一応準上級までは合格済(かなりぎりぎり)
+ 文法とかクラスとかは一応理解はできているが、DBや拡張モジュールとかになるとわからない
+ 試験を受ける以上、暗記はしたが、知識として理解できているとは言い難い
+ たとえばどんなときにこの知識を使えばいいのかイメージできていない
+ PHPをきっかけにバックエンドエンジニアとし

元記事を表示

Navberが動作しない。ドロップダウンが動かない。

##問題発生##
bootstrapのNavberのドロップダウンリストがうまく動かない。
レスポンシブルで画面を小さくすると、nav-itemが表示されない。消えてしまう。

##結論##
navbar-lightを消していたので動かなかった。

CSSでいじったりする際に消してしまっていた。

“`html

//1行目のnav class内の navbar-light が必要。消してはだめ

元記事を表示

[CakePHP] AuthComponentのidentifyメソッドの中身の流れをざっくりと見ていく

この記事ではCakePHPのAuthComponentのメソッドであるidentifyメソッドの中身の中身をざっくりと見ていきます。

### identifyメソッドとは

> リクエスト中の認証情報を使用してユーザーを識別するために、 $this->Auth->identify() を 手動で呼ぶ必要があります。

> ユーザーを認証する際には、設定されている認証オブジェクトを設定された順にチェックしていきます。 あるオブジェクトでユーザーが識別できたら、以降のオブジェクトはチェックされません。
>
[cakephp Bookより](https://book.cakephp.org/3/ja/controllers/components/authentication.html)

注意

– versionは3.9.6です
– AuthComponentは4.0から非推奨です
– あくまでも流れなので詳しく知りたい方はソースコードを追ってみてください

コード

“`
public function identify()
{
$this->_setD

元記事を表示

【デザインパターン】Factory Methodパターン・Builderパターン

# はじめに
オブジェクト指向プログラミングのデザインパターンを学習した際の個人的な記事です。
今回は「Factory Method」および「Builderパターン」について学習しました。

## Factory Methodパターン
* 「ペアになるオブジェクトを用意するメソッドを定義する」方法
* クラスの内部で、別のサブクラスのインスタンスを生成するためのメソッドを定義する
* サブクラスと別のサブクラスの結合度が高い場合に有用
* 別のサブクラスを単独でも呼び出す場合、インスタンス化を別クラスで行う理由がわかりにくい
* クラスを継承してサブクラスを作成する場合に用いられる

**コード例**
Macbookの抽象クラスを継承する「MacBook2019」「MacBook2020」は、
それぞれ搭載されるCPUが異なるが、「createCpu」でCPUのオブジェクトを個別に紐付ける。

“`php:FactoryMethod.php

元記事を表示

新しく追加されたクエリビルダーのsoleメソッドとは

#はじめに
Laravelのバージョンが**8.23**以上からクエリビルダーに`sole`メソッドが導入されています。
soleメソッドは**単一レコードに一致する場合のみ、一致したレコードを取得します。**一致しない場合は例外エラーが発生します。
この記事は簡単なデモを通じて下記内容について解説しています。

* soleメソッドの使い方について
* データ取得メソッドのfirst、get、soleの違いについて

#事前準備
予め`user`テーブルに次の値をセットしています。

“`
+—-+——-+——————–+——————-+————————————————————–+—————-+———————+———————+
| id | name | email | email_verified_at | password

元記事を表示

[PHP×PostgreSQL]DBのレコードをCSV出力する

PHPで、DBから取り出したレコードをCSV出力するサンプルコードです。

## 環境
* OS: Amazon Linux2
* PHP: 7.4.11
* PostgreSQL: 11.5

※今回は、[Amazon Linux2でLNPP環境を構築する | Qiita](https://qiita.com/C_HERO/items/7563d8e7fcbe63754e90)で構築した、LNPP環境を使用しています。

## ディレクトリ構成と処理概要

“`
/product/share
|
ccc
|—-dbCsv.php → 処理プログラム
|
|—-config.ini → 設定ファイル(PostgreSQLへの接続情報を記載)
|
|
|—-csv
|—-data_[yyyymm].csv → 出力CSV(yyyymm形式:年月ごとに出力, 文字コード:SJIS)

元記事を表示

Attempt to read property on nullの解決

LaravelでAttempt to read property on nullが出た話

記事内容

本記事ではLaravelで自作の認証機能を実装していた際に、本題のエラーが出たので、その解決方法を書き下ろします。

開発環境

Laravel 8.22.1
PHP:8.0.1
MySQL:8.0.23
MacOS:11.1 ( Big Sur )

やろうとしていること

ビューで入力フォームと、データベースにcompaniesテーブルを作成し、
ユーザーから入力された値と、テーブルに格納されているデータ(カラム:company_id)と一致するものがあれば、ページを遷移させる。
一致するものがなければ、簡単なエラーメッセージを返すというもの。

テーブル

“`○○_create_companies_table.php

元記事を表示

Laravelで画像を保存 / 取得する

Laravelで画像の保存 / 取得を実装する

記事内容

Laravelではデータベースを使って、画像の保存/取得などを実装できます。
今回は画像の保存から表示まで実装していきます。

開発環境

Laravel 8.22.1
PHP:8.0.1
MySQL:8.0.23
MacOS:11.1 ( Big Sur )

やろうとしていること

  1. ビューでformを作り、画像をアップロード。
  2. Controllerで画像を保存。
  3. 保存した画像を取得。
  4. 画像をビューで表示。

画像のアップロード

ビューでformを作る

“`○○.blade.php


元記事を表示

herokuへのデプロイでfailed to push some refs to …のエラー

#環境
PHP : 7.1.3
Laravel : 5.7
docker-compose.yml

“`
#docker-compose.ymlのバージョン
version: ‘3’
#docker volumeの設定
volumes:
docker-volume:

#services以下に各コンテナの設定を書く
services:
#Webサーバーのコンテナ
web:
image: nginx:1.18
ports:
– ‘8000:80’
volumes:
– ./server:/var/www
– ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
– php

#アプリケーションのコンテナ
php:
build: ./docker/php
volumes:
– ./server:/var/www

#データベースのコンテナ
db:
image: mysql:5.7

元記事を表示

【PHP】無名関数内でスコープ内の変数を使いたい場合

PHPを書いているときに、無名関数内で該当スコープで使用している変数を使用したいケースがあったので、まとめておきます。

## ダメな例
下記のように記述するとNULLが出力されてしまいます。

“`php
$hoge = 1;
$hoge_func = function () {
var_dump($hoge);
};
$hoge_func();
“`

“`php:出力結果
NULL
“`

これは、無名関数内のスコープでは、$hogeが定義されていないからです。

## 正しい例
無名関数のスコープ外で使用されている変数を使用したい場合には、下記のように書きます。

“`php
$hoge = 1;
$hoge_func = function () use($hoge) {
var_dump($hoge);
};
$hoge_func();
“`

“`php:出力結果
int(1)
“`

## まとめ
PHPだからよしなにやってくれるだろうと高を括らず(?)、きちんと使用する変数はuseで定義するようにしましょう。

元記事を表示

LaravelでViewインスタンスに渡した値を取り出したい

# はじめに
こんにちは。昨日の地震、皆さまご無事でしてでしょうか。自分自身も周りの人も無事でほっとした筆者です:pray:

さて、共通で使用したい値をVIewインスタンスにあらかじめセットした際に、あとで取り出して使いたいケースがあったので、方法を共有します(そんなケースあるのか:thinking_face:、と思うのですが、あったんです…)。

# 結論
“`php:Controller.php
$data = [];

// Viewインスタンスに共通で値をセット.
view()->share(compact(‘data’));

// Viewインスタンスから値を取り出す.
$data2 = view()->shared(‘data’);

// Viewインスタンスを返却.
return view(‘home’);
“`

# おわりに
上記のような使い方はしないと思います。
私のこれを使用したケースは、**親Controller**で共通値をセットして、その値が**子コントローラー**で上書きされるものの、元の値も必要だったので、取り出して別名でセットし直すケース

元記事を表示

No application encryption key has been specifiedを解決する

#エラー発生
ソースコードをcloneした後に、ローカルでサーバーを立ち上げてページアクセスすると画面に**「500 | SERVER ERROR」**が表示。

#原因調査

`storage/logs/laravel.log`でエラー内容を確認します。
エラーの原因は下記の通り。

“`:storage/logs/laravel.log
[2021-02-14 03:34:41] production.ERROR: No application encryption key has been specified. {“exception”:”[object] (Illuminate\\Encryption\\MissingAppKeyException(code: 0): No application encryption key has been specified. at /Users/******/dev/laravel-project/laravel-blade-sortable-demo/vendor/laravel/framework/src/Illuminate/E

元記事を表示

OTHERカテゴリの最新記事