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

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

【PHP】PHPで301リダイレクトをする方法

# リダイレクトの301や302とは?

リダイレクトの301や302は、HTTPレスポンスステータスコードという、リダイレクトの目的を明示的に表したものです。
301は、Webサイトの引っ越し等のURLが恒久的に変更された場合に使用されます。
302は、メンテナンス中等の一時的なURL変更の際に使用されます。
Google等のクローラーが、ステータスコードを判断して、検索順位に影響を与えるため、リダイレクトを行う場合は適切なステータスコードを設定します。

# リダイレクトする方法

header関数でリダイレクトをします。
第三引数でステータスコードを設定します。
header関数以降も継続して処理が続くため、exit関数で処理を終了させましょう。

“`php
header関数

元記事を表示

PHPUnitでControllerのプロパティにモックを持たせる方法

# はじめに

CakePHP の Controller クラスの initialize メソッドで、プロパティにインスタンスを持たせており、テスト実行時にはモックを持たせたかったのですが、うまくいかず詰まりました

– 問題
1. Controller のテストを実行するとモックではなく実処理が走る問題
2. Controller のテストを実行すると private プロパティが上書きできない問題
– `error: [Error] Cannot access private property Controller::$property in Controller.php on line xxx`

# 結論

:::note info
EventManager::instance()->on() で Controller->initialize() を検知して controller オブジェクトを取得し、  
private プロパティを Reflection クラスで無理やり上書き可能にしてモックを差し込めば OK
:::

“`php:tes

元記事を表示

Unable to load FFProbe

“`
apt-get update && \
apt-get install -y \
ffmpeg
“`

元記事を表示

【超初心者編】PHP7×MySQL、PDOを使用してDB(データベース)に接続する方法

#データベースとの接続は、初心者にとって「最初の壁」#
こんにちは、自分はPHPを勉強して2ヶ月目の初心者です。
今回は自分用のメモと記憶整理としてデーターベース(以降:DB)との接続方法を超簡単に説明します。

環境は以下の通り
・MAMP6.2
・PHP7.4.9
・MySQL 5.7.30

#####【注意】初心者の解説なので、専門的に学習したい人は他の学習用のサイト・ページなどを参考にしてください!#####

#MySQLとPDOについて#
###MySQLはオープンソースのDB(データベース)管理システムです。###
(オープンソースとは商用、非商用を問わず配布されてるもの)
・無償で利用できる
・大容量のデーターを高速で動作させられる
・幅広いOSに対応している(Windows,mac,Linuxなど)

上記は特徴の一部に過ぎません。
優秀なシステムで実際に世界中の企業でも使用されています。

###PDOとは?###
PDO(PHP Data Objects)とは、
PHPからDBへアクセスする機能を持った拡張モジュ

元記事を表示

apacheのエラーログがstderrには出せずstdoutには出せた話

# 現象

Dockerで動かしているapacheのエラーログをDocker Logsに出したかったので、以下のように標準エラー出力するように設定したがDocker Logsに出力されない。

“`
ErrorLog /dev/stderr
“`

一方、標準出力を指定するとDocker Logsに出力される。

“`
ErrorLog /dev/stdout
“`

# 調査結果

httpdプロセスの `fd/2` がttyではなくログファイルを向いていた。

“`
# ls -l /proc/1/fd
total 0
lrwx—— 1 root root 64 Nov 3 14:53 0 -> /dev/pts/0
lrwx—— 1 root root 64 Nov 3 14:53 1 -> /dev/pts/0
l-wx—— 1 root root 64 Nov 3 14:53 2 -> /var/log/httpd/error_log
以下省略
“`

# 補足情報

PHPのエラーは以下の設定でDocker Logsに出力できた。

元記事を表示

事前に採番したそのID使われてないかも!?(CakePHP)

# はじめに

データ新規作成時、あらかじめ ID を採番しておいて、オブジェクトを持ちまわしていました
しかし、そのオブジェクトの保存処理後、採番していた ID とは違う ID で保存されていたのです

# 結論

:::note info
patchEntity() の返り値のエンティティの id に値を設定すれば OK
:::

“`php:CakePHPUserRepository.php
// ユーザーを保存する
public function save(User $user): UserId
{
$model = TableRegistry::getTableLocator()->get(‘Users’);
$saveData = [
‘Users’ => [
// ここで ID を設定しても保存処理に採用されない
// ‘id’ => $user->getId()->getValue(),
‘username’ => $user->getUsername()->g

元記事を表示

認可 gate メソッドの違いについて

#gate

(名前の通り門のイメージ)
→roleに応じてアクセス制御を行う

#使われるメソッド
authorize 

403のAuthorizationExceptionがthrow

allows⇄denies

allows

→AuthorizationExceptionがthrowされないので、if分により分岐処理を行うことができる

forUser
アクセス制限を行うために他のユーザのアクセス権を利用する
forUserメソッドに他のユーザを指定して、指定したユーザの情報で削除のアクセス制限を行う(?)

元記事を表示

【Laravel・PHP】動画ファイルがアップロードできない時に対処 php.iniの設定

# はじめに
Laravelで動画アップロード機能を実装したがどうしても成功しなかった。
実は**php.ini**というPHPの設定を変更しないとうまく動かないことがわかったのでそれに関する情報です。

# 環境
PHP 7.4.21
Laravel 8.39.0

# php.ini
このファイルの場所ですが、今回の環境はEC2(Linux系)なので
**/etc/php.ini**にあります。

ファイルの場所はOSなどで違う場合ありますので`phpinfo()`でみれます。

ここの記述を編集します。

# 設定内容
今回は**アップロードする容量の制限にひっかかっている**ことがわかったのでその上限を変えます。
変更加えたのは以下の内容です。

“`
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

(中略)

memory_limit = 1024M // デフォルトは128M

;;;;;;;;;;;;;;;;;
; Data Handling ;
;;;;;;;;;;;;;;;;;

(中略)

元記事を表示

dockerを使ってLaravel6系の環境構築するとき、つまづいたディレクトリ階層について。【初投稿】

【Dockerを使って環境構築しようとしたきっかけ】
チーム開発する上でDockerを使う機会があると聞いたので、就活のポートフォリオでLaravelの環境構築をDockerを使ってみたいから。

(参考記事)
https://www.engilaboo.com/how-to-use-docker-for-laravel/

今回、以下の環境を構築する。
Laravel 6.0
PHP 7.3
Nginx
MySQL 5.7

まずディレクトリの作成。(今回はdocumentの下でtestディレクトリを作成)
$ cd document
$ mkdir test
$ cd test

testディレクトリに以下のファイルを作成。
php.ini
default.conf
Dockerfile
docker-compose.yml

4つのファイルの記述を記事を参考にコピペして以下のcomposeコマンドを実行。
$ docker-compose up -d

ここでエラーが発生。
エラー内容:docker-compose.ymlのBildで設定したパスが見つからない。
![スクリーンシ

元記事を表示

メモ PHP SQL

query($show);
foreach($stmt as $result) {
echo $result->name1 . ‘:’ . $result->name2. ‘:’ . $result->name3 . ‘:’ . $result->name3;
echo ‘
‘;
}

元記事を表示

【PHP】PHP_EOLとは?使用方法も解説!

# PHP_EOLとは?

PHP_EOLは、PHPで定義済みの定数です。
PHP_EOLは改行を表し、WindowsやLinux等のOSによって自動で改行コードを切り替えてくれます。

| OS | 改行コード | 改行文字 |
| ————– | ———- | ——– |
| Windows | CRLF | \r\n |
| Linux/UNIX系 | LF | \n |

# 使用方法
“`php

・出力結果
おはようございます。
今日はいい天気ですね。
“`

元記事を表示

Laravelで画像ファイル等を受け取り、DB保存したい。

#目的
Laravelでフロントから送信された画像ファイル&文字データをDB保存します。
以下の方の参考になれば幸いです。
・画像ファイル&文字データをDB保存してみたい。

#関連Episode
①[Reactで画像ファイルを送信するAPI送信の方法](https://qiita.com/Ryotaross/items/abdcb3540d0f4f9e2406)

#マイグレーション
マイグレーションはDBのテーブルの内容を定義するようなもの。
以下のコマンドをターミナルで実施すると、マイグレーションファイルが作成される。

“`php:ターミナル
php artisan make:migration create_posts_table –create=posts
“`

database/migrationsに“`****_**_**_******_create_posts_table“`というファイルが作成される。
up() の部分を更新する。画像データ(image),文字データ(title)どちらもstring型のカラムにする。

“`php:**

元記事を表示

【PHP】エクスクラメーションマーク2つでbooleanに型変換する

PHPのコードを読んでいて、以下のような書き方を見かけた。

“`php:
$count = $this->user->where(‘name’, $name)->count();
return !!$count;
“`

$countには0もしくは1の数字が入っている。

この$countに対して「!」の否定演算子を2回連続で行うと、boolean型に変換できるらしい。

つまり、以下の2つは同じ意味になる。

“`jsx
return (boolean)$count;
return !!$count;
“`

初めて見た書き方だったので、覚書き。

### 参考記事

https://techgekka.hateblo.jp/entry/2018/01/24/133933

元記事を表示

PHPの緩やかな比較の実態

# **概要**

PHPには等価演算子が2つあります。「==」と「===」です。
前者は緩やかな比較、後者は厳密な比較が行われます。
PHPerの方ならよくご存知だと思います。
今回は前者の緩やかな比較を実態がどうなっているのかを追って見たいと思います。

# **緩やかな比較のカオスさ**

例:

“`php

元記事を表示

laravelでstorage配下の画像をシンボリックリンクを張らずに表示する方法

###/storage/app/images/の画像を表示してみる

フロント側(bladeファイル)

“`

“`
こんな感じで。
ディレクトリまで動的にする場合は、ディレクトリ名も渡してあげます。

“`
//bladeファイル

“`
とりあえずルーティング書きます。

“`
//web.php
Route::get(‘/get_request_image’, ‘TestController@get_request_image’);
“`

“`
//TestController.php
public function get_request_image(Request $request){
$data = $request->all();
$path = storage_path(“app/images/” . $d

元記事を表示

PHP入門

# PHP超基礎文法
PHPを勉強し始めたので自分用にまとめていきます。Progateで勉強しています。
***

## Hello World
“`php

“`

~ の部分にphpのコードを書く
セミコロンを文末に入れる

– echo
出力命令

– 文字列
文字列にはシングルクォーテーションかダブルクォーテーションをつける
数値には不要

## 変数
“`php
$num = 1;
$num++; //$num += 1; と同義
echo $num++; //echoの後にプラス 結果2
echo ++$num; //echoの前にプラス 結果3
“`
– 変数
$英単語の形
数字スタート・ローマ字不可

– 変数更新
後に書かれたコードが優先される
+=や++など利用可能

“`php
$hello = ‘こんにちわ’;
$name = ‘イチロー’;
echo $hello.$name; // こんにちわイチロー
$name.= ‘さん’; //こんにちわイチローさん
echo “

元記事を表示

Warning: SSL: certificate subject name ‘localhost.localdomain’ does not match target host name ~~ in~~にはまった件

##環境
* OS :AmazonLinux2
* 証明書 :AWS ACM
##事象
自サイト内でPHPcURLコマンドでファイルを読み込んでいる際に、以下のエラー文が表示されて画面上にコンテンツが表示されなかった。

Warning: SSL: certificate subject name ‘localhost.localdomain’ does not match target host name ~~ in ~~

curlコマンドで疎通する場合にはSSL通信を行うようですが、その際に証明書の名前とターゲットの名前に差分があるとのエラー。
localhost.localdomainなんて証明書をアタッチするのは違うと思うので、サーバー側の修正で対応。

##対処方法
target host name ~~ に記載のホスト(hogehoge.jp)を読み込むようにhostsファイルを修正

“`vim:/etc/hosts
127.0.0.1 ここにホスト名(hogehoge.jp) localdomain localhost.localdomain local

元記事を表示

PHPにおけるクラスの事前バインディングについて

**Ogirinal article:[https://www.npopov.com/2021/10/20/Early-binding-in-PHP.html](https://www.npopov.com/2021/10/20/Early-binding-in-PHP.html)** by Nikita Popov

“`php
$test = new Test;

class Test {}
“`

これは正常に動作します。
Testクラスを定義するより先に使っているのに動きます。
ふしぎですね。

これは一見JavaScriptにおける巻き上げと同じように見えますが、実際はもっと複雑でややこしいことをやっています。
そこらへんについて、PHPの第一人者[Nikita Popov](https://twitter.com/nikita_ppv)が解説していました。
以下は[Early binding in PHP](https://www.npopov.com/2021/10/20/Early-binding-in-PHP.html)の日本語訳です。

# Early bin

元記事を表示

文字数のバリデーションで気をつけること【Laravel】

## はじめに
Laravelで文字数のバリデーションを実装するときの注意点のお話です。

## 環境
Laravel8
PHP 8.0.12

## バリデーションの方法おさらい

Laravelは一般的なバリデーションを簡単に実装するための方法を3つ用意してくれています。

– Illuminate\Http\Requestオブジェクトのvalidateメソッドを使用する
– フォームリクエストを作成する
– Validatorファサードを使う

 [バリデーション 8.x Laravel](https://readouble.com/laravel/8.x/ja/validation.html)

これら以外にもルールオブジェクトを利用することでカスタムバリデーションを実装することができます。
ドキュメントには
>より複雑なバリデーションシナリオの場合は、「フォームリクエスト」を作成することをお勧めします。

とありますが、個人的にControllerはスッキリさせたいので、基本的にはフォームリクエストを作成したいところです。

今回はバリデーションの実装方法に関わらず起こりう

元記事を表示

laravel 確認事項 レビューしてもらう前に見直し用メモ!

getメソッドのものはviewが必要なので、getはちゃんとリンクがひらけるかの確認

idはブラウザ側から送るもの

Formで送れる値はinputタグに書いてあるものだけ

Formでidを送れる
→hidden input使う

“`php
{!! Form::hidden(‘article_id’,$articles->id) !!}
“`

#php docの書き方

(例):

“`php
/**
* 記事詳細画面表示機能
* @param Request $request
* @param int $id
* @return view 記事詳細ページ
*/
“`

@parmが2個ある時は1個づつ書くと、見やすい

元記事を表示

OTHERカテゴリの最新記事