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

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

SQLiteを使ったテストで初学者がはまったエラー ~Laravel~

# 前提

テスト用データベースはSQLiteインメモリを使用しています。

#環境

| PHP | Laravel |PHPUnit | SQLite |
| —- | —- | —- | —- |
| 7.4.5 | 7.28.4 | 8.5 | 3.28.0 |

#エラー内容 「リレーションが辿れない」

##前提

**SQLiteは以下のデータ型の値しか格納しない。**

| 型 | 内容 |
| —- | —- | —- | —- |
| INTEGER | 符号付整数。1, 2, 3, 4, 6, or 8 バイトで格納 |
| NUMERIC | 負号付きの整数 (1、2、3、4、6、8バイト) |
| REAL | 浮動小数点数。8バイトで格納 |
| TEXT | テキスト。UTF-8, UTF-16BE or UTF-16-LEのいずれかで格納 |
| NONE | カラムにデータを指定しなかった場合この型になる |

以前Laravelで書いていたマイ

元記事を表示

初学者がPHPを学び始める4

##フォームを作成する

フォームを作りたい時は、HTMLのformタグを用います。
action属性にはデータを渡す先のURLを指定します。
method属性は値の送信の方法で、「get」と「post」のどちらかを指定します。getの場合は送信される値がURLに表示され、postの場合はURLに表示されません。
以下の場合はフォームに入力した値をsent.phpというページに送信するという意味になります。

“`

“`

##テキストボックスを作成する

テキストボックスをつくるにはHTMLのinput type=”text”を使います。name属性は入力された値を取得するときに使う名前です。後にフォームのデータを受け取るときに使用します。またinputタグは閉じタグが必要ありません。(textareaタグの場合は必要)

以下のように記述します。
inputは一行分のテキストが入力できます。
textareaの場合は複数行のテキストが入力できます。

“`

元記事を表示

(備忘録)laravelでCURDとデータ操作

https://qiita.com/apricotcomic/items/07f172a957c1f342fd91

Laravel・データベースのデータ操作(追加/変更/削除)する全実例

元記事を表示

inputタグのボタンがレスポンシブ実装時に自動でデザイン変更されてしまう現象を防ぐ

##はじめに
HTMLなどでフォームを作る際にスマートフォンのフォームデザインが勝手に変わっていることがある。

筆者の場合、HTML, PHPを用いてフォームを作成した時、PCでは自分で考えたデザインが反映されたのに対して、スマートフォンで実機確認するとボタンのデザインが変わっていた。
##解決方法
レスポンシブで自動でデザインが反映されたタグやクラスに対して、
-webkit-appearance: none;
border-radius: 0;
二つのプロパティを付ける。

(例)ブラウザによってボタンに自動で付けられた装飾を消去する

“`

“`
該当するクラスがあるcssファイルにプロパティを適用する。

“`
.c-btn {
 -webkit-appearance: none;
 border-radius: 0;
}
“`
これで、レスポンシブ実装の時に自動でデザインが変わる現象を防げる。
##P.S.
今回はこのプロパティを適用すれば防止で

元記事を表示

初学者がPHPを学び始める3

##関数について
関数とは、あるまとまった処理を行い、値を返すものです。 PHPには便利な関数がもとから組み込まれていて、それらは組み込み関数と呼ばれます。
「strlen」は組み込み関数の1つで、文字列の文字数を返します。
配列の要素数を数える「count」、ランダムな整数を返す「rand」などが他にもあります。
ここで、()の中に与える値を「引数」といいます。

以下の場合は上から


10〜15のランダムな数字が出力されます。

“`php

“`

##関数の作り方
関数を作るには「function 関数名(){ 処理 }」という書き方をします。
関数名は自由につけることが出来ます。
関数は「関数名()」というように()をつけて呼び出すことがで

元記事を表示

composer self-update のエラー

php artisan make:authが使えなくなって久しいです。
代わりとなるcomposer require laravel/uiを入力すると、次のようなエラーが出ました。

“`
Warning from https://repo.packagist.org: You are using an outdated version of Composer. Composer 2 is now available and you should upgrade. See https://getcomposer.org/2
“`
要はcomposerをver2にアップデートしてくださいということです。
composer self-update –2と打ったところ、またエラーが出ました。

“`
[Composer\Downloader\FilesystemException]
Filesystem excep

元記事を表示

Laravelのmigration classでchangeメソッドが使用できない

##現象
ある既存のカラムでNULL値を許可orDEFAULT値を設定するようにしたく、
migrationを実行したところ以下のエラーに遭遇。

“`
RuntimeException:Changing columns for table “テーブル名” requires Doctrine DBAL.
Please install the doctrine/dbal package.
“`

##対処法
素直にdoctrine/dbal packageをcomposerでinstallする。

“`
composer require doctrine/dbal
Using version ^3.0 for doctrine/dbal
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 4 installs, 0 updates

元記事を表示

PHPではてなブログのAPIで自動投稿する方法。

###PHPではてなブログのAPIで自動投稿する方法です。

ある書籍を読んでいてはてなブログにAPIがあることを知りましたが
PHPの自動投稿の方法が検索してもあまりがない感じでしたので?作りました。
(はてなのデベロッパーのヘルプを見て作りましたよ?)

“`php:index.php
format(“Y-m-d\TH:i:s”);
$digest = base64_encode(sha1($nonc

元記事を表示

[PHP]定数のプロパティだとstaticプロパティになる

“`php
class Foo {
public $a = “aaa”;
public const b = “bbb”;
}

$foo = new Foo();
echo $foo->a;
echo $foo->b;
“`

## エラー

“`
PHP Warning: Undefined property: Foo::$b in /workspace/Main.php on line 10
“`

phpでclassで定数(const)プロパティを使っても、staticプロパティになりnewで定義したインスタンスから呼び出すことができない

## 修正

“`php
class Foo {
public $a = “aaa”;
public const b = “bbb”;
}

$foo = new Foo();
echo $foo->a;
echo “\n”;
echo Foo::b;
“`

## 結果

“`
aaa
bbb
“`

## 補足
インターフェースでは定数プロパティしか定義でき

元記事を表示

CentOS5.11にPHP7.0.33を入れる

#0.はじめに

どうしても社内で、**CentOS5.11**を使わなければいけないサーバーがありました。

ソース自体は全サーバーでmasterが動いており、
15台のサーバーのうち14台は冗長化され、**CentOS6**の**PHP7.0.33**で動いていましたが、
1台だけ**CentOS5.11**で、**PHP5.6**で動いていました。

しかし、先日自身のコミットで、返り値の型指定を記載してしまい、14台の**PHP7.0.33**では一切問題なく動きましたが、

唯一**PHP5.6**で動いているサーバーがfetalで止まっている事に障害発生から24時間後に気づいてしまいました。

“`
public function sample() : string
{
return ‘test’;
}
“`

その後、いくつか有識者で対策を検討し、
・このサーバー用に独立したブランチを作り、masterをpullしない
・該当サーバーをCentOS6以降で、稼働させる方法を考える
等々考えましたが、

最終的に、
・頑張って**PHP7.0.33**を**Ce

元記事を表示

Herokuのアップロードサイズの上限を変更する方法

Herokuとその他諸々で画像共有サービスを作ろうとしたときに、ファイルをアップロード出来なくて詰まったのでメモ

#やること
Herokuはデフォルトだと2MB未満のファイルしかアップロードできないようなので、いろいろやって上限を20MBまで引き上げたい。

##.user.iniファイルを作成
設定を反映させたい対象のphpファイルと同じディレクトリ内に`.user.ini`を作成する。

##upload_max_filesizeを記述
.user.iniに`upload_max_filesize = 20M`、
今回の場合はformからアップロードしたかったので`post_max_size = 20M`とも書き込んでおく。

元記事を表示

[PHP]ディレクトリごとファイルをコピーする

PHPにはファイルのコピーをするためのcopy関数がありますが、ディレクトリとその中に含まれるファイルを丸ごとコピーすることはできません。
そこで、PHPでディレクトリごとファイルをコピーする方法をご紹介します。

“`php
/**
* ディレクトリをコピーする
*
* @param string $dir コピー元ディレクトリ
* @param string $new_dir コピー先ディレクトリ
* @return void
*/
function copy_dir($dir, $new_dir)
{
$dir = rtrim($dir, ‘/’).’/’;
$new_dir = rtrim($new_dir, ‘/’).’/’;

// コピー元ディレクトリが存在すればコピーを行う
if (is_dir($dir)) {
// コピー先ディレクトリが存在しなければ作成する
if (!is_dir($new_dir)) {
mkdir($new_dir, DI

元記事を表示

Laravel ファイル名が日本語の添付ファイルが送れなかった

# はじめに
あるプロジェクトでファイル名が日本語のPDFをメールで送信する必要がありました。
公式や記事を見ながら実装したところ、何故か日本語部分だけが送信できないという事象が発生しました。

# 前提
“`
Centos7系
PHP7系
“`

LaravelのMailファサード・Mailableクラスを用いて実装しています。

“`php:HogeController.php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Mail\SampleMailable;
use Mail;

public function sendMail()
{
Mail::to(‘hogehoge@hogehoge’)->send(new SampleMailable());
}
“`

“`php:SampleMailable.php

元記事を表示

(備忘録)PHPでデプロイとアプリ公開まで

参考記事

https://qiita.com/0yan/items/cd7eb98e114dd812c498

https://qiita.com/ak25562983/items/c6bd1ec88e06a1f7f954

https://qiita.com/youth_case/items/fb821dcb351c7542030f

元記事を表示

レンタルサーバーでPHPのSESSIONが作動しないとき

きっかけ

SESSIONがないとログイン機能を実装できないのに、コアサーバーではSESSIONがなぜか機能していなかった。例えば推移先のページにこのようなコードを打つと、「ログインし直して下さい。」が返されてしまう。

“`php:
session_start();
if(!empty($_SESSION[“userName”]))
echo $_SESSION[“userName”].”がログイン中”;
else {echo “ログインし直して下さい”;exit;}

“`
sessionが使えないときの対処法はすでにいくつか記事があるが、sudoコマンドが使えないレンタルサーバーでは少し異なる部分がある。
これを解決するのにかなりのサイトをめぐり試行錯誤したので結果をまとめておく。

環境

レンタルサーバー:コアサーバー
使用言語:php7.4
機能:SESSION

やりたいこと

  • SESSION変数に値が保存される。
  • SESSIONを自分の任意のディレクトリに保存できるようにする。※初期
元記事を表示

DockerでPHPUnitを少し使ってみる(Composer使用)

#はじめに
Dockerをある程度使える前提で書いていきます。

『DockerでPHPUnitを少しさわってPHPのテスト少し試してみたい!』方向けです。

よろしくお願いします!:bow_tone1:

“`
★テスト記述する際のお決まり事項
・Class という名前のクラスのテストは、ClassTest という名前のクラスに記述
・ClassTest は、(ほとんどの場合) PHPUnit\Framework\TestCase
・テストは、test* という名前のパブリックメソッドとなります。(なのでtestSample()やtestA()という書き方になる)
・テストメソッドの中で assertSame() のようなアサーションメソッド (アサーション を参照ください) を使用して、期待される値と実際の値が等しいことを確かめます。

★ユニットテストを書くそもそもの目的
バグの発見と修正や コードのリファクタリングを開発者がやりやすくすること。
ソフトウェアのドキュメントとしての役割を果たすこと。
私的には同じバグを繰り返さないために書くものという感じで理解しています。

元記事を表示

【Laravel カート機能実装入門】〜後編〜 sessionを使用したカート機能実装の完全解説!!

# 0. はじめに
**※こちらの記事は前後篇の後編です!前編は[こちら](https://qiita.com/yoshitaro218/items/17ffde373038e4ed3664)をクリック!!!**
**本記事ではLaravel 5.8での開発を解説しています*

ECサイトの作成をしていてこんな事を感じた経験はないでしょうか。
**「セッションを用いたカート機能実装の実装が難しすぎる!」**
過去の自分や現在進行形で困っている方へ向けて
その悩みを解決するためカート機能実装の網羅的な解説記事を作りました。
お役に立てれば幸いです!

前後編の長文となりますのでご了承下さい。

## 目次
– **0.はじめに**
– 本記事の対象になりうる方
– 概要
– 1.各分野で必要となる基礎知識
– 2.要求定義と要件定義
– 3.機能設計
– 4.大まかな流れ
– 5.実際の挙動と画面遷移のと処理の流れ(Gif動画)
– 6.関連コード
– 7. 各実装の詳細説明
– 7-1 解説-addCart-メソッド
– ~~~~~~~~~~~~

元記事を表示

VSCode で環境を汚さず好きなバージョンのPHP開発環境を作る手順

# 必要なもの

PC(Mac or Window or Linux)
Docker for Desktop(Toolkitではない方)
VSCode(Remote Development拡張機能が必要)
インターネット環境
ブラウザ(Chrome等)

# VSCodeを起動

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/7b6f2937-7884-e8d5-9d29-7cc670e7f987.png)

# 作業フォルダを開く

左上に縦に並んでいる中の Explorer ボタン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/f75d7fa2-da69-8a0d-be11-6d82dc3426d9.png)
を押します。

Open Folderボタンを押し、作業するフォルダを選択します。ここでは空のphpフォルダを選択しました。
![image.png](

元記事を表示

【Laravel】route関数を使用する場合のSSL化対策

#SSL化する前の状態
bladeテンプレートのformのaction属性を`route`関数で記載。
`route`関数については[こちらの記事](https://qiita.com/tamakiiii/items/f474c79a9e50ddc59f06)で説明しています。

“`

“`

上記の記述だと、URLが`http://・・・`になってしまいます。
SSL化されていませんので遷移先の画面では遷移先では下記画面が表示されます。
![bladeエラー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554111/338c8209-f3d1-f630-8636-3397433f38eb.png)

ちなみに、「このまま送信」ボタンをクリックするとエラーになります。
エラーの原因は、action属性で指定したroute先にリダイレクトされているため(GETリクエストのため)で

元記事を表示

【Laravel】Formの項目が多い場合にsessionに保存したエラーメッセージが表示されない問題

# 背景
LaravelでRequestFormを使ったバリデーションを実装中、

空のFormを送信するとバリデーションにひっかかって正しくリダイレクトされるが、

FormRequestに設定したエラーメッセージが表示されない問題が発生。

原因を切り分けてみるとFormRequestの設定に問題はなく、対象のformの項目数を減らすと正しくエラーメッセージが表示されたので、

項目が一定数以上あるフォームで発生するのは分かったのですが、

根本的な原因が分からずに詰まってしまったのでその原因と解決策をメモ。

# 結論
`/config/session.php`の`’driver’`の項目に**file**を指定することで解決しました。
.envの環境変数で指定している場合は対象の値を**file**に変更すると設定できます。
(※Dockerを利用している場合はDockerfileの環境変数の設定も確認)

# 結論(詳細)

こちらに似たような質問と答えが載ってました。
[stackoverflow – Laravel form validation issues (ses

元記事を表示

OTHERカテゴリの最新記事