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

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

Laravel でのファイルダウンロードを実装してみた

##LaravelでPDFファイルのダウンロードを実装してみて、こんなに簡単に実装できるんだ、、、と驚いたので書いてみた

####仕様、もしくは前提
・OS : Windows
・PHP 7.4.16 (cli) (built: Mar 2 2021 14:06:15) ( ZTS Visual C++ 2017 x64 )
・Laravel Framework 6.20.24
・ある画面に表示される「PDF出力」ボタンをクリックすると、DBに登録されているPDFファイルのパスを取得し、ブラウザ経由でローカルにPDFファイルがダウンロードされる。

####1.PDFファイルのパス取得
“`php
$res = \DB->table(‘files’)
->where(‘id’, ‘=’, $id)
->get();
$pdfFilePath = $res->pdf_pile_path;
//C:\LavelDir\storage\app\public\pdfFiles\202107191038162092931173.pdf
$pdfFileName

元記事を表示

Laravel+Eclipseで開発するための準備&Google App Engineにデプロイする

# 概要
以前からLaravelに興味があり、Laravelを用いて何かWebアプリケーションを作ってみたいと思っていました。

そこで先日、準備としてLaravelをインストールしてEclipseで開発環境を作り、作成した新規LaravelプロジェクトをGoogle App Engineにデプロイしてみました。最初は色々つまずきましたが、何とか一通りできたので参考にさせていただいたサイトと手順をメモとして残します。

## 目的
– Laravelをインストールしてプロジェクトを作成する
– LaravelプロジェクトをEclipseにインポートして編集できるようにする
– 作成したLaravelプロジェクトをGoogle App EngineにデプロイしてWebアプリとして公開する

## 環境
macOS Catalina ver.10.15.7
PHP 7.3.11
Laravel Framework 8.50.0
Eclipse Platform Version: 2021-06 (4.20)

※おおよその手順は同じだと思いますが、Windowsの場合手順が一部異なる可能性

元記事を表示

httpdとphp-fpmが動かない

EC2でwordpress環境を、codeDeployで自動デプロイ時に「systemctl start httpd.service」
「systemctl start php-fpm.service」を実行するのだが、1度目は動いて、二度目は動かない

#httpd原因

“`
#ログをコマンドで確認
vi /var/log/httpd/error_log
“`

“`
#ログ内容
[Mon Jul 19 13:41:39.413688 2021] [suexec:notice] [pid 3196] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Mon Jul 19 13:41:39.440099 2021] [lbmethod_heartbeat:notice] [pid 3197] AH02282: No slotmem from mod_heartmonitor
[Mon Jul 19 13:41:39.440194 2021] [http2:warn] [pid 3197] AH10034

元記事を表示

PHP基礎まとめ

未経験からPHP実務半年の駆け出しエンジニアです。
実務と学習で学んだ内容を整理のための記事です。
(学習内容は山浦清透さんの[独学エンジニア](https://dokugaku-engineer.com/course/serverside)というサイトで学んだものをベースにアウトプットしています。エンジニアとしての基礎力を習得したい方にはオススメです。)
PHP初心者の方は良ければ参考にしてください。

## 実務レベルで必要な姿勢(3つ)
1. 自分が理解したコードのみ書くこと
コピペで動いたからOKでは障害や問題等のエラー発生時に対応できない。
2. 読みやすいコードを書く
機能追加や修正は必ずある。その際にパッとみて分かるコードでないと対応できない。
(チーム開発や将来性を見越しているか)
3. 変更しやすいコードを書く
その場限りのコードではなく、機能の変更しやすいコード、拡張性の高いコードを書く。
(運用のこともイメージできているか)
※オブジェクト指向の設計手法が変更・拡張性のしやすいコードに繋がる

## PH

元記事を表示

PHP 任意の文字列の中に指定の文字列があるかどうかを調べる

# 目的

– 任意の文字列の中に指定の文字列があるかどうかを調べる`strpos()`メソッドについてメモ的にまとめる

# 情報

– 筆者は下記のサービスを使用して当該メソッドの動作検証を行った。
– [https://paiza.io/ja](https://paiza.io/ja)

# 方法

– 下記のように記載することで任意の文字列中に指定の文字列があるかどうかを調べる事ができる。

“`php
strpos(‘任意の文字列’, ‘指定の文字列’);
“`

– `strpos()`メソッドの戻り値
– 任意の文字列内に指定の文字列が存在した場合、「任意の文字列の先頭から指定の文字列までの文字数」をバイト単位で返す。(日本語は2バイト文字なので注意)
– 任意の文字列内に指定の文字列が存在しなかった場合、`false`を返す。(この関数はboolのfalseを返すが、「falseとして評価される値」を返す可能性があるらしい。戻り値の比較には`===`演算子を使用して厳密に比較する必要がある。)

# 例

– 下記の内

元記事を表示

Composerのインストール手順

## Composerとは

PHPの依存管理ツール。パッケージ管理ツール。

## パッケージ管理ツールとは

パッケージとは便利ツールなど複数のファイル一式が集まったもの。
パッケージを使用するには別のパッケージが必要だったりする。これを依存関係という。
インストール時やアップグレード時には依存関係にあるパッケージを自動でインストールやアップデートしてくれる。

## インストール手順

“`jsx
//①composerのインストール
curl -sS https://getcomposer.org/installer | php
//-sは通常出力される進捗状況表示やエラーメッセージ表示を表示しないようにする
//ただし-Sを同時に指定することでエラーメッセージの表示抑制は行わない、

//②composerのファイルを/usr/local/binに移動
sudo mv composer.phar /usr/local/bin/composer

//③composerのアクセス権限を変更する
chmod a+x /usr/local/bin/composer
//a+xは全

元記事を表示

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フ

元記事を表示

【PHP8.1】finalクラス定数が作れるようになる

クラス定数は上書き可能です。

“`php
class FOO{
public const HOGE = 1;
}

class BAR extends FOO{
public const HOGE = 2;
}

var_dump(BAR::HOGE); // 2
“`

定数なのに上書き可能とはこれ如何に。

クラス定数ではない通常の定数は当然ですが上書きできません。

“`php
const HOGE = 1;
const HOGE = 2; // E_WARNING

echo HOGE; // 1
“`

エラーではなくE_WARNING止まりってのはよくわかりませんが、ともかく値は変更できていません。
定数は上書きできないのにクラス定数は上書きできるというのはよくわかりませんね。

まあ、実は他の言語もだいたいこんな仕様だったりするのですが。

“`java:Java
class A{
static int num=0;
}

class B extends A{
static int num=10;
}
“`

そんなわけで絶対

元記事を表示

Laravelプロジェクトをcloneした後、「500 Server Error」が表示される

#原因
環境構築時に.envファイルが作成されていなかったことでした。

#前提
Laravelで作成されたアプリケーションには.envファイルが必要です。
.envファイルはアプリケーションが実行されるときの環境ごとの設定値を持ちます。

引用:[Laravel 7.x 設定](https://readouble.com/laravel/7.x/ja/configuration.html)
>新たにLaravelをインストールすると、アプリケーションのルートディレクトリには、.env.exampleファイルが含まれています。ComposerによりLaravelをインストールした場合は自動的に、このファイルは.envにコピーされます。Composerを使わずにインストールした場合は、コピーしてください。

Composerを使ってインストールしたので、.envができている想定でしたが今回は作られていませんでした…。
.gitignoreに「.env」が設定されてしまっていたから?

#今回の事象
1. composer installコマンドの実行時に.env.exampleをコ

元記事を表示

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に減ります。
決済時に間違えてクレジットを決済をしてしまい、エラーになりました。
ここ

元記事を表示

初心者が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.動的型付け言語

元記事を表示

OTHERカテゴリの最新記事