- 1. PHPのバージョンを切り替える
- 2. 【Laravel】フォームの日付入力のデフォルト値を今日にする
- 3. No application encryption key has been specified.
- 4. PHPStormの便利機能
- 5. php-cs-fixerをvscodeに設定する ハマりポイントも添えて
- 6. Laravelのエラー「SQLSTATE[42S22]: Column not found: 1054 Unknown column」を全力で解決する
- 7. PHPによるファイルアップロードフォームの作り方
- 8. 最初にやっておきたいfunctions.phpの基本設定
- 9. MacにPHPをインストールする
- 10. PHP – mysqli prepare のエラー ( Fatal error: Uncaught ArgumentCountError: The number of elements in the type definition string must match the number of bind variables )
- 11. PHPerが学ぶPython② クラス
- 12. 【Laravel】知らずに生じていたN+1問題
- 13. Laravelの外部キー制約を指定する際に使用するconstrained()に任意の指定したidを付与する方法
- 14. fsockopenとstream_socket_clientの違い【UNIXドメインソケット】
- 15. composer.lockを.gitignoreに追加しないで
- 16. Stripe で銀行振込のサブスクリプションを実装する際の注意点
- 17. 【PHP】配列をjson_encodeするとlistじゃなくてobjectになる
- 18. PHPerが学ぶPython① 変数・配列・タプル
- 19. 雑学投稿系SNS Nijiki
- 20. PHP 基本文法
PHPのバージョンを切り替える
# remi リポジトリを追加する
“`bash:bash
yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
“`# PHP 5.6 7.2 7.3 をインストールしてみる
“`bash:bash
for v in 56 72 73 ; do yum -y install php$v php$v-php-{gd,xml,mbstring,mysqlnd,opcache,pecl-apcu,common,fpm,embedded,pear} ; done
“`# 本体の場所の確認
“`bash:bash
$ ls -l /opt/remi/
total 0
dr-xr-xr-x. 3 root root 32 Feb 15 12:17 php56
dr-xr-xr-x. 3 root root 32 Feb 15 12:18 php72
dr-xr-xr-x. 3 root root 32 Feb 15 12:18 php73
“`:::note
本体のシンボリック
【Laravel】フォームの日付入力のデフォルト値を今日にする
## フォームの日付入力のデフォルト値を今日にする
ユーザーに入力をしてもらうフォームを作る際、日付を手入力で入れてもらうのですが、
意外と面倒だったりするなと思い、デフォルト値を設定することとしました。今日のトレーニングメニューだったり今日の体重を入力することが主なので、
ある程度固定で今日をデフォルト値としていいというフォームを作る前提です。### 考え方
inputタグの中にあるvalueに今日の日付を入れてあげればOK
“`
“`
ただこれだと固定で12月22日になってしまうので、
phpを使って書いていきます。### 実際のコード
“`
No application encryption key has been specified.`php artisan key:generate`でキーを作りましょう
“`bash
APP_KEY=$(php artisan key:generate –show) php artisan test
“`
PHPStormの便利機能
PHPStormでよく使う設定・ショートカットキーをまとめました。
# 目次
[1. Xdebug](#xdebug)
[2. DBクライアント](#dbクライアント)
[3. Git](#git)
[4. ショートカットキー](#ショートカットキー)
[参考](#参考)# 1.Xdebug
設定することで、ステップ実行ができるようになります。
デバッグ時に役立ちます。## 準備
今回はDocker環境でXdebugを有効にする手順を記しています。
開発環境によって設定の方法が異なります( [参考1](https://www.jetbrains.com/help/phpstorm/configuring-xdebug.html#integrationWithProduct) )### ①インストール
まずはXdebugをインストールするために、Dockerfileに以下を記述“`dockerfile
RUN pecl install xdebug \
&& docker-php-ext-enable xdebug
“`※以下のようなエラーが出
php-cs-fixerをvscodeに設定する ハマりポイントも添えて
## 目的
php-cs-fixerをvscodeで動作させるのに想定以上に時間がかかったのでその備忘録として## 取り扱わないこと
1. php-cs-fixerのそれぞれの設定の意味
[PHP-CS-Fixer configuration](https://mlocati.github.io/php-cs-fixer-configurator/#version:3.13)を読んだ方が分かりやすいです
1. php-cs-fixerやphpのインストール方法## 前提
php-cs-fixerと動かすphpはダウンロード済み## .php-cs-fixer.phpを設定
“`php
setRiskyAllowed(false)
->setRules([
// configurationを見ながら設定
])
->setFinder(
PhpCsFixer\Finde
Laravelのエラー「SQLSTATE[42S22]: Column not found: 1054 Unknown column」を全力で解決する
### ことのあらまし
* テーブルarticlesにアクセスしたユーザのログを取りたい、と言うことでarticle_access_logsを新規追加するよ
* Modelも新規追加したよ
* ControllerでSELECTしたら良く分からないエラーが出たよ
* ER図はこんな感じ
![image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2809857/25f2ffd8-058a-bdb2-0da3-9bbac9775dee.png)### エラーの内容
なんてことないエラーだと思ったんです。“`
SQLSTATE[42S22]: Column not found: 1054 Unknown column ・・・
“`
article_access_logテーブルからSELECTする時のカラム名のtypoかしらね、と悠長に構えていたら“`
SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘article_ac
PHPによるファイルアップロードフォームの作り方
# こんな人向け
PHPを勉強中の初心者の方には
「POSTやGET等のメソッドを使ってフォームのデータを送信したり取得したりする方法は分かったけど、じゃあ画像のアップロードやダウンロードはどうしたらいいわけ?」
と思っている方もいるはず。
今日はそんな迷える子羊のためにPHPフォーム上でのファイルアップロード・ダウンロードを行う方法をご紹介します。# 実装する機能一覧
・index.phpのフォームからファイル選択ボタンを押すとクライアントローカルのファイルを選択できる
・「アップロード」ボタンを押すと、サーバー上のフォルダへファイルをアップロード。result.phpへ遷移し、結果を表示。
・index.phpにはアップロード済みのファイルの一覧が表示される。
・表示済みのファイル名をクリックすると、ファイルがダウンロードされる。# 設計
構成を確認しておきましょう。
root
∟ index.php
∟ result.php
∟ download.php
∟ files
∟image.jpgindex.php : トップページ。ファイルのアップローダーと格
最初にやっておきたいfunctions.phpの基本設定
セキュリティの観点や諸々から、Wordpress(以下WP)のカスタム設定ファイルの`functions.php`に標準設定として入れておいた方が良いコード。
基本は、日々利用されるお客様が運用しやすいようにすることが大事なので、標準設定として自作テーマの時は必ず入れるようにしておくと良いかと思います。以前書いた、`functions.php`にhead情報を入れる記事はこちら
https://qiita.com/makkie/items/34a608ca3dc8a0b8d66b
# 事前準備
テーマを自作する場合、他ファイルと同様に`functions.php`をテーマフォルダ配下に作成します。
既にある場合は、既存のコードの下や上に追記していきますが、コードの競合等がない様に注意してください。
以下は私がテーマを自作する際に用意するファイルとフォルダの構成です。
“`
../themes/original/
├─images/(画像用)
├─inc/(パーツ用)
├─fnc/(functionsのパーツ用)
MacにPHPをインストールする
# PHPのインストール
“`bash
# 最新のPHPをインストール
brew install php
“`# PHPのバージョンの切り替え
“`bach
# PHP 8.0を無効にする
brew unlink php@8.0# PHP 7.0を有効にする
brew link php@7.0
“`# 参考
https://tech.amefure.com/php-homebrew
https://oopsoop.com/how-to-switch-php-versions-on-mac-brew-link-unlink/
PHP – mysqli prepare のエラー ( Fatal error: Uncaught ArgumentCountError: The number of elements in the type definition string must match the number of bind variables )
# ポイント
prapare の第一引数には bind するパラメータの型を文字列で渡すこと
string 二個なら `ss`
string と integer なら `si`というように
# コード例
巷の例に出てくる `sss` とか ってなんだよと思いながらてきとうに指定していたらエラーが起こり続けていた
“`php
prepare(“INSERT INTO users(id, name) VALUES (?, ?)”);// $stmt->bind_param(‘sss’, $id, $name); # エラー
$stmt->bind_param(‘is’, $id, $name); # integer と string なので 第一引数は is$id = 2;
$name = “ABC”;$stmt->execute();
“`# 参考
https://man.plusta
PHPerが学ぶPython② クラス
うっすっす。豚野郎です。
今回は前章の続きです。https://qiita.com/pig_buhi555/items/301f7c8eabd1a5fd121f
変数・配列がわかれば、次はクラスかな?と思い書いていきます。
※ 注意:内容はPHPか何かの言語を書いたことがある方向けなので、
説明を割愛している箇所は多々ありますので、ご了承ください。**バージョン:3.9.1**
# 1. クラス
“`class.py
class Sample:
class_test = ‘クラステスト’
# 第一引数は必須。慣習的にself
def test(self, test):
print(test)# Sampleクラスのclass_testを使用
test = Sample.class_test# インスタンス化
sample = Sample()# テストメソッド呼び出し
sample.test(test)
“`
“`
$ python class.py
クラステスト
【Laravel】知らずに生じていたN+1問題
初めまして、大学院生のなかじです。
自分の開発物で知らずに生じていたN+1問題について、備忘録として残しておく?
## N+1問題とは
#### N+1問題とは・・・SQL文が大量に発行されてしまう問題
– DBから値の取得する時(SQLのクエリを発行して情報を集めていく時)に、余分にたくさんのクエリを発行してしまい、表示速度等に悪影響を出してしまうことをN+1問題と言います。
#### 例
– 1対多で生じる
ex) 本紐づいている著者リスト(公式ドキュメントより)
ex) ユーザーに紐付いているコメント
ex) ユーザーに紐付いている記事など…## ①本のデータを全件取得し、②本のデータの数だけ著者の名前を取得する:N+1問題発生
#### DB説明(ダミーデータを用意してみました笑)booksの例
| id | title |
| –| —————— |
| 1 | 令和04年【春期】【秋期】 応用情報技術者 合格教本 |
| 2 | キタミ式イラストIT塾 応用情報技術者 令和04年
Laravelの外部キー制約を指定する際に使用するconstrained()に任意の指定したidを付与する方法
公式の書き方を参照すると、外部キー制約を追加する際、マイグレーションファイルに下記を記述する
“`php:マイグレーショファイル
# userテーブルと紐付ける条件で作成した
Schema::create(‘posts’, function (Blueprint $table) {
$table->id(‘post_id’);$table->foreignId(‘user_id’)->constrained(‘users’)->onDelete(‘cascade’);
# または
$table->foreignId(‘user_id’)->constrained()->onDelete(‘cascade’);$table->timestamps();
});
“`
:::note warn
– 今回は、CASCADEの設定も行っている
– 著者は、userテーブルを題材として使用し、今回の説明を行う
:::上記の記述の場合、userテーブルが下記の状態であれば、マイグレーションを正常に行う事ができる
|id|n
fsockopenとstream_socket_clientの違い【UNIXドメインソケット】
https://www.php.net/manual/ja/function.fsockopen.php
https://www.php.net/manual/ja/function.stream-socket-client.php
stream_socket_client() 関数もこれと似ていますがより豊富なオプションを持っており、 非ブロック接続をしたりストリームコンテキストを提供したりする機能があります。ジェネリックfsockopenのstream_socket_clientは、PHP5から登場しナウいのでオススメ
composer.lockを.gitignoreに追加しないで
https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control
# `composer.lock`ファイルをバージョン管理にコミットする
このファイルをバージョン管理にコミットすることは重要です。なぜなら、プロジェクトをセットアップする人が、あなたが使用している依存関係とまったく同じバージョンを使用することになるからです。CI サーバー、運用マシン、チーム内の他の開発者など、すべての人が同じ依存関係で実行されるため、展開の一部にのみ影響するバグの可能性が軽減されます。単独で開発した場合でも、6 か月後にプロジェクトを再インストールすると、依存関係がその後多くの新しいバージョンをリリースしたとしても、インストールされた依存関係がまだ機能していると確信できます。(コマンドの使用については、以下の注を参照してください`update`。):::note info
ライブラリの場合、ロックファイルをコミットする必要はありません。
[ライブラリ – ロックファイル]
Stripe で銀行振込のサブスクリプションを実装する際の注意点
# Stripeで銀行振込のサブスクリプションを実装する際の注意点
## 参照記事
https://qiita.com/hideokamoto/items/e03984b982574ab01c31#サブスクリプションを作成するコード## 結局のところ
銀行振込でサブスクリプションを始めるのは、様々な状況を想定した上で実装する必要がある## 銀行振込のサブスクを申し込みを受け付けるときに利用できないstripeの機能
1, 支払いリンクによる申し込み受付 (ダッシュボードから3回くらいクリックするとできるやつ)
2, クリエイトセッションでの受付 (checkout->sessions->create でできるやつ)どちらのUIも綺麗で、実装の手間も少ないものですが、どちらも銀行振込のサブスクでは現時点では利用できません。
そのため他の方法で申し込みを受け付ける必要が発生します。*クリエイトセッションの場合、1回払い (mode=payment)の場合は利用できます。
##### 参考記事
https://qiita.com/hideokamoto/items/d6b
【PHP】配列をjson_encodeするとlistじゃなくてobjectになる
# 結論
配列を操作した後にjson_encodeするときはindexを詰めてから行おう!
:::note alert
ダメなパターン
json_encodeした結果listではなくObjectになっている
:::“`php
$array = array(1,2,3,3,3,4);配列を操作…
echo $array;
// -> array(1,2,4)echo json_encode($array);
// -> {“0″:1,”1″:2,”5”:4}
“`:::note info
いいパターン
json_encodeした結果listのまま
:::“`php
$array = array(1,2,3,3,3,4);配列を操作…
echo $array;
// -> array(1,2,4)// indexを詰める
$array = array_values($array);echo json_encode($array);
// -> [1,2,4]
“`# array_valuesでやってること
> array_v
PHPerが学ぶPython① 変数・配列・タプル
hi!豚野郎です。
明けましておめでとうございます。Pythonの基礎の書物を1冊読んだので、解説していきます。
変数・配列・タプルの説明だけで記事1つ書けそうだったので、その説明からしていきます。※ 注意:内容はPHPか何かの言語を書いたことがある方向けなので、
説明を割愛している箇所は多々ありますので、ご了承ください。**バージョン:3.9.1**
# 1. 変数
※ 注意点は先頭1文字目に数字を使えないことです。
– NG
“`test.py
# コメント
1test = 1print(1test)
“`
“`
$ python test.py
File “パス/test.py”, line 2
1test = 1
^
SyntaxError: invalid syntax
“`
数値の代入
“`test.py
# コメント
test = 1print(test)
“`
“`
$ python test.py
1
“`
文字列の代入(シングルクォーテーションでも可)
“`t
雑学投稿系SNS Nijiki
みなさん、こんにちは。山田長政です。
最近、SNSを作ったので宣伝します。
Nijikiと言う名前の雑学を投稿するSNSを今回、製作しました。
使用したのは、データベース云々はDjango、Webサイトとかはphpです。
ちなみに、スマホで開くとデザインがバグるので注意してください。
https://nijiki.net
PHP 基本文法
:::note info
趣旨
作りたいシステムを思いついて少しずつ取り組んでいる所なのですが、
現状の力量ではかなり難しいことがわかった段階です。
心が折れないように、わかったことをここに残しつつ、
少しでも進めていこうという気持ちで書いています。
:::# 出力する
文字列 “Hello World!” を出力するには、前に`echo`をつけて全体を`` で囲むことで、ブラウザ上に表示できます。“`php:PHP
“`
“`:ブラウザでの表示結果
Hello World!
“`文字列は複数行記述もできます。その際、コード全体の見通しが良くなるよう改行も可能です。
ただし、ブラウザ上は改行されません。“`php:PHP
“`
“`:ブラウザでの表示結果
Hello World!Hello World!Hel