- 0.1. PHP ファイルの内容をブラウザに表示し、意図的に文字化けさせたい場合
- 0.2. Laravel(PHPのフレームワークの1つ)CSS罠 ※CSSは当たっていても反映されないときがある件
- 0.3. 変数のスコープ JavaScriptとPHPの違い
- 0.4. 【PHP】マイナーフレームワーク「Flow」を試してみる~DB接続&データ登録編~
- 0.5. LaravelのEloquentでorderByを使うとメソッドチェーンの補完が効かなくなるわけについて備忘録
- 0.6. phpenv install で発生したエラーと解消方法
- 0.7. 【個人開発】マイクラの建築物配布サービスを作ったメモ
- 0.8. phpでのMQTT開発ガイド
- 0.9. PHP v8.3.0 のリリースと変更点
- 0.10. Laravelでの日付処理: Call to a member function format() on string エラーの解決法
- 0.11. Laravel9 Eloquent 便利そうなリレーションまとめ
- 0.12. Macで brew を利用してPHP複数バージョンを切り替える方法
- 0.13. Guzzleへの移行: PHP開発者が直接cURL関数を使うべきでない理由
- 0.14. 【Mac/VSCODE】PHP intelephenseを使うために四苦八苦したメモ
- 0.15. TruthyとFalthy JavaScriptとPHPの違い
- 0.16. Neither the property “_token” nor one of the methods “_token()”, “get_token()”/”is_token()”/”has_token()” or “__call()” exist and have public access in class “Symfony\Component\Form\FormView”
- 1. CSRF保護が有効になっているのが原因
PHP ファイルの内容をブラウザに表示し、意図的に文字化けさせたい場合
# PHP ファイルをあえて文字化けさせたかったのだが・・・
` の charset:Shift_JIS
* PHP ファイルの文字コード:UTF-8
* PHP ファイル内の `上の条件で、PHP ファイルを表示して文字化けを起こそうとした。しかし、結果は **文字化けせず**。「?」となったが、**原因は単純だった**。
![article4-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3601609/6379344d-9326-d514-90e8-57252e82752a.png)
### ブラウザの表示
![article4-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3601609/03e62ce4-fcf9-346d-21e8-8972c3eae71f.png)### 使用環境
Windows + Apache + PHP
ブラウザ:Google Chrome# 文字化け
Laravel(PHPのフレームワークの1つ)CSS罠 ※CSSは当たっていても反映されないときがある件
昨年度前職で体調を崩したことをきっかけに、紆余曲折を経てなんやかんや、プログラミングを学び始め、数学がそこそこ得意だったこともあって(?)とりあえず、半年強は学習を継続できている、駆け出しエンジニア(できればデータサイエンティスト)か「第一の読者」になりたい離職中・転職活動中の32歳の未だに少年ジャンプ・マガジン・小学館を読んでるおっさんです。以下間違いあれば遠慮なくご指摘下さい m ( _ _ )m
(※今は、とあるプログラミングスクールの学習カリキュラムを修了し、某コミ二ティの現役エンジニアの方々に諸々教えてもらっています。ちなみにそこの代表の方は、勤労感謝の日が誕生らしいです。勤労に感謝m(_ _)m)
Laravelは個人的に一番CSSが沼でした。
私は、Progateと↓の本から、HTML&CSSから、プログラミングを始めたのですが、その後、上記の某プログラミングスクールで、PHP、Laravelを中心にプログラミングの学習カリキュラムを受けました。そのときに感じたというか、個人的に沼にはまり溺れたLaravelでCSSで当てるときの注意点をいくつか挙げま
変数のスコープ JavaScriptとPHPの違い
## JavaScript(letとconst)
1. {}でエリアが形成される
1. 内のエリアで、外のエリアで宣言された変数を扱うことはできる
1. 外のエリアで、内のエリアで宣言された変数を扱うことはできない
1. 外の複数のエリアで同名の変数が宣言されているとき、最も近いものが扱われる
#### 3. 内のエリアで、外のエリアで宣言された変数を扱うことはできる
“`test.js
const a = ‘aaa’
{
console.log(a) // aaa
}
“`
#### 2. 外のエリアで、内のエリアで宣言された変数を扱うことはできない
“`test.js
{
const b = ‘bbb’
}
console.log(b) // ReferenceError: b is not defined
“`
##### 4. 外の複数のエリアで同名の変数が宣言されているとき、最も近いものが扱われる
“`test.js
const a = ‘a1’, b = ‘b1’
{
const a = ‘a2’
console.log(a, b)
【PHP】マイナーフレームワーク「Flow」を試してみる~DB接続&データ登録編~
# 初めに
前回は[こちら](https://qiita.com/nnhkrnk/items/2b9f647d6130a098345f)の記事でマイナフレームワークFlowを使った簡単なAPI作成を行いました。
今回はMySQLにデータを登録するAPIを作成していきます。# FlowにおけるDB接続処理
Flowはdoctrineと呼ばれるORMを内包しています。
今回はこのライブラリを用いてTBL作成やDB接続を行っていきます。https://www.doctrine-project.org/
## doctrineでできること
doctrineはORM形式でDB操作を行います。
具体的には以下のような特徴を持ちます。
* SELECTなどのDMLを記載する必要がなく、doctrineで用意されているメソッドを利用してDB操作を行う。
* 事前のテーブル作成が不要。1つのTBL対応するデータクラスを作成し、doctrine のmigrateコマンドを実行することでTBL作成を行う。# DB接続試してみた
ということで、DB接続を行うAPIを作成していきましょう。
今回は
LaravelのEloquentでorderByを使うとメソッドチェーンの補完が効かなくなるわけについて備忘録
以下のようなページングを想定した一覧情報を返すAPIコントローラ処理を書いていた時のこと
“`php:ArticleController.php
private const PER_PAGE = 30;public function index(IndexRequest $request): AnonymousResourceCollection
{
$query = Article::query();
// withとかwhereとかいろいろ省略
$articles = $query->paginate(self::PER_PAGE);return ArticleResource::collection($articles);
}
“`一覧について「作成日の降順で取得」という仕様が抜けてたので以下のように修正しました
“`diff_php:ArticleController.php
public function index(IndexRequest $reque
phpenv install で発生したエラーと解消方法
# はじめに
– 普段、PHPを書くことが多いのですがプロダクトによってPHPのバージョンが異なるので簡単にバージョンを切り替えられるようにphpenvのセットアップを行いました
– `phpenv install`でPHPをインストール時、`エラー → 解消 → エラー → 解消 → …`をひたすら繰り返しかなり疲弊しました…(特に7.x系)。ので、インストール成功までに実施したことをマシン交換時などに困らないようここに書き留めておきます## 環境
– macOS Monterey 12.7
– Apple M1
– zsh 5.8.1 (x86_64-apple-darwin21.0)
– anyenv経由でphpenvインストール済み## PHP7.3.33インストール時に発生したエラーと解決方法
– 環境変数のオプション指定について
– `~/.anyenv/envs/phpenv/plugins/php-build/share/php-build`配下にある`default_configure_options`というファイルに記述する方法もあるみたいな
【個人開発】マイクラの建築物配布サービスを作ったメモ
## きっかけ
今年9月から無職になったので、以前からあたためていたサービスをつくってやろうと思い立ちました。## つくったもの
https://poscra.com/マイクラ統合版のPC版では(統合版とはって感じですが)、ストラクチャーブロックによって作成した建築を外部ファイルとしてエクスポートできます。
また建築物の3Dモデルのエクスポートもでき、3Dviwerなどでぐりぐり観察することもできます。
それらをつかってマイクラ建築のカタログみたいなものをつくりたいと考えました。## 技術スタック
### アプリケーションフレームワーク
当初はNextJSを使おうと思っていました。
しかし、まちがったイメージかもしれませんがNextJSはクラウドサービスの使用前提な印象で、
– ファイルアップロード
– ログイン認証などを使いたい+構成はスリムにしたい(一つのサーバで完結)+ファイル操作など慣れているPHPでやりたい
等で結局『Laravel』を使用することにしました。### フロント周り
デザインはLaravelに最初からついてくる『TailwindCSS』とど
phpでのMQTT開発ガイド
![MQTTをPHPで使う方法](https://assets.emqx.com/images/c8bd6eeb524d0999ff879b95dbd10ba0.png?imageMogr2/thumbnail/1520×684)
英語ブログ:https://www.emqx.com/en/blog/how-to-use-mqtt-in-php
[PHP](https://www.php.net/)は、広く使われているオープンソースの多目的スクリプト言語で、HTMLに埋め込むことができ、特にWeb開発に適しています。
この記事では、PHPプロジェクトで`php-mqtt/client`クライアントライブラリを使って、[MQTTクライアント](https://www.emqx.com/en/blog/mqtt-client-tools)と[MQTTブローカー](https://www.emqx.io/)間の接続、サブスクライブ、サブスクライブ解除、メッセージの受信と送信の機能を実装する方法について主に紹介します。
## MQTTクライアントライブラリの選択
この記事では、Com
PHP v8.3.0 のリリースと変更点
# PHP v8.3.0 リリース
PHP v8.3.0 がリリースされました。 :tada:
https://www.php.net/releases/8.3/en.php
# 新機能や変更点
Qiita に投稿されている PHP 8.3 の新機能や変更点についての記事です。
https://qiita.com/rana_kualu/items/91111443105a75a55e2f
https://qiita.com/HaruKado777/items/54e74936406262b2b39c
https://qiita.com/HaruKado777/items/bd26322cf467ecf0dccd
# 詳細
詳細は以下をご覧ください。
https://www.php.net/ChangeLog-8.php#PHP_8_3
上記のページを機械翻訳したものを掲載しておきます。
> PHP 8.3.0、2023年11月23日リリースの変更点は以下の通りです:
>
> – Bcmath拡張で数値から末尾のゼロを取り除くバグを修正。
> – CLIに`p
Laravelでの日付処理: Call to a member function format() on string エラーの解決法
最近、Laravelのviewファイルで Call to a member function format() on string というエラーに直面しました。原因は、文字列として認識されているプロパティから format() メソッドを呼び出そうとしたためでした。
解決方法は複数存在するようですが、モデルで日付フィールドを明示的に指定する方法が一番簡単に思えたので採用しました。(Laravelでは、日付や時刻を扱う際にCarbonインスタンスの使用が一般的とのこと)
例として、以下のコードではBorrowモデルに$castsプロパティを追加し、borrowed_atフィールドをCarbonインスタンスとして扱うようにLaravelに指示しています。(型変換=キャスト)
“`Borrow.php
class Borrow extends Model
{
// …protected $casts = [
‘borrowed_at’ => ‘datetime’,
];// …
}
“`
この変更により、$borr
Laravel9 Eloquent 便利そうなリレーションまとめ
Laravel9の便利そうなクエリビルダをまとめました。
https://readouble.com/laravel/9.x/ja/eloquent-relationships.html
## has
リレーション先にレコードがあるレコードのみ取得
“`php
// commentが少なくとも1つ以上あるすべてのpostを取得
$posts = Post::has(‘comments’)->get();
“`
## whereRelation
リレーション先のテーブルでwhereをすることができます。
複数の条件を指定したい場合は`whereHas()`を使用します。
“`php
// users → companies.name === $name のユーザーのみ取得
$users = User::whereRelation(‘company’, ‘name’, $name)->get();
“`
## orWhereRelation
`orWhere`のRelation版です。
“`php
// users → companies.name === $name or
Macで brew を利用してPHP複数バージョンを切り替える方法
`brew` を使用して複数の PHP バージョンをインストールし、切り替える方法は、`brew` の `php` タップを使用することで簡単に行えます。以下に手順を示します。
### 1. Homebrew のアップデートとアップグレード:
まず、Homebrewを最新の状態にアップデートし、アップグレードします。
“`bash
brew update
brew upgrade
“`### 2. PHP 7.4 のインストール:
次に、PHP 7.4をインストールします。
“`bash
brew install php@7.4
“`### 3. PHP 8.1 のインストール:
同様に、PHP 8.1もインストールします。
“`bash
brew install php@8.1
“`### 4. バージョンの切り替え:
#### a. PHP 7.4 を利用する場合:
“`bash
brew unlink php
brew link –force –overwrite php@7.4
“`#### b. PHP 8.1 を利用する
Guzzleへの移行: PHP開発者が直接cURL関数を使うべきでない理由
## 導入
長い歴史を持つ[cURL関数](https://www.php.net/manual/ja/ref.curl.php#ref.curl)ですが、近年では[Guzzle](https://docs.guzzlephp.org/en/stable/)というHTTPクライアントライブラリが主流になっている気がします。
なので使えるならGuzzle使ったほうがいいんじゃないかな〜って話を書きたいと思います。※ 外部へリクエストを送信する方法として`file_get_contents`,`file`などの関数も存在しますがこれらも使わないようにすると幸せになれます。
## cURL関数の欠点
cURL関数はHTTPリクエストを行うためのPHPの標準的な手段で、cURL拡張さえ入っていれば外部のライブラリを必要とすることなく動きます。
ただ設計自体がかなり前にされたものなので、ユニットテストや複雑な構文など色々と問題になってきます。
問題を洗い出してみましょう。### 1. 複雑な構文と設定
cURL関数は多くのオプションと設定を抱えており、これらを正確に設定することは
【Mac/VSCODE】PHP intelephenseを使うために四苦八苦したメモ
## 概要
Mac OS 11とかの古めのMacでPHPにコード整形用にPHP intelephense (※1)を入れようとするも、
Macに入っているPHPのバージョンが古いと整形時にエラーが出てしまうため、いろいろ処理までに対応したぞというメモです。
既存のいろんな情報を寄せ集めての対応でしたが、この流れがどこかの誰かの助けになればと思い記録。(※1 VScodeの拡張機能。割とメジャーですてき)
(※2 自分は7.3でした。)## エラー詳細内容
すみません、忘れました。。初っ端から。。
具体的には忘れてしまいましたが、あんたのphpバージョンだと使えねーからエラーやで!
アップデートせえ!みたいなのがvs codeで出てたとおもいます。
結果、紆余曲折な旅に出ました。## phpのバージョンが古いならアップデートしよう!
→ この辺の手順で行いました。
https://www.stub-create.com/blog/php/mamp-brew.htmlが、mac osのバージョンが少し古くなってきているので落とせず。
ここもエラーは残してないので忘れた!
TruthyとFalthy JavaScriptとPHPの違い
## Truthyとは
動的型付け言語において、真偽値型に変換されたらTrueになる値のこと## JSとPHPで異なる例
#### ‘0’(文字列の0)
JSではtrue、PHPではfalse
“`test.js
‘0’ == true // true
“`
“`test.php
‘0’ == true // false
“`
#### [](空配列)
JSではtrue、PHPではfalse
“`test.js
[] == true // true
“`
“`test.php
[] == true // false
“`
ちなみに、JSでは{}(空オブジェクト)もtrue
“`test.js
{} == true // true
“`
#### 公式
https://developer.mozilla.org/ja/docs/Glossary/Truthyhttps://developer.mozilla.org/ja/docs/Glossary/Falsy
https://www.php.net/manual/ja/types.comparisons.p
Neither the property “_token” nor one of the methods “_token()”, “get_token()”/”is_token()”/”has_token()” or “__call()” exist and have public access in class “Symfony\Component\Form\FormView”
CSRF保護が有効になっているのが原因
symfony 2.8 で作成されたウェブサイトを symfony 6 台で再構築している時に表題のエラーが表示されました。
Symfony では CSRF (クロスサイト リクエスト フォージェリ)からの保護がデフォルトで有効になっているようです。通常のウェブサイトの運営であれば有効な方が良いとは思いますが、
今回は、ひとまず開発を先に進めるため旧サイトの設定(CSRF保護は無効)に合わせ、有効化についてはクライアントと相談する事にします。①CSRF 保護有効/無効のパッケージをインストール
“`
composer require symfony/security-csrf
“`②config/packages/framework.yaml の framework以下に csrf_protection: ~ を追加します(CSFR保護の無効化)。
“`
framework:
csrf_protection: ~
“`
公式ドキュメント通りなのですが、エラーメッセージで検索してすぐに分からなか
amazon comprehendをPHPで動かす
## はじめに
個人開発しているwebアプリで機械学習による自然言語処理を使った機能を実装するため、phpから[amazon comprehend](https://docs.aws.amazon.com/ja_jp/comprehend/)を使えるようにしましたが、なかなか苦戦したのでやり方を残しておきます。## 対象者
– amazon comprehendを外部からweb apiのように使いたい人## 結論
phpから感情分析が行えるようになりました
“`php:example.php
‘ap-northeast-1’,
‘version’ => ‘latest’
]);$result = $client->detectSentiment([
‘LanguageCode’ => ‘ja’, // REQU
LAMPスタックの基本ガイド
## はじめに
LAMPは、Linux、Apache、MySQL、PHP(またはPerl、Python)の頭文字を取ったもので、ウェブアプリケーションを構築するためのポピュラーな技術スタックです。この記事では、初学者向けにLAMPスタックの基本的な概念と各コンポーネントの役割について説明します。## LAMPとは?
Linux (オペレーティング システム): LAMPの基盤となるOS。安定性とセキュリティが特徴です。Apache (Webサーバー): ウェブサーバーとしての役割を果たし、クライアントからのリクエストを処理して静的および動的なコンテンツを提供します。
MySQL (データベース管理システム): データベースの作成、読み書き、更新、削除などのデータ管理を担当します。
PHP (スクリプト言語): 動的なウェブページを作成するためのスクリプト言語。データベースとの連携が得意。
## LAMPの特徴
#### オープンソース
LAMPコンポーネントはすべてオープンソースであり、無料で利用できます。これは特に初学者にとって負担のない環境を提供します。####
PHP 定数について
# 対象読者
[こちらの記事と同様](https://qiita.com/bpg_ts/items/1a25f6bd3d4656fb0bda#%E5%AF%BE%E8%B1%A1%E8%AA%AD%E8%80%85 “対象読者”)# 定数とは
### 定数
「データを入れるための箱」、「名前を付けることができる」という点は、変数と役割は一緒。**変数との大きな違いは、「再代入が不可能」であること**。### 定数を使う場合、使わない場合の比較
一度定数を定義すると、プログラム中で使い回せる。また、メンテナンス性が向上するのも便利な点だ。以下に、定数を使わない場合と使う場合のコードの比較を示す。実行結果は同じ。
##### 定数を使わない場合
“`php:定数を使わない場合
‘;
print (200 * 1.1).’
‘;
print (300 * 1.1).’
‘;/* 実行結果
110
220
330
*/
?>
【PHP】マイナーフレームワーク「Flow」を試してみる~API作成編~
# 初めに
前回は[こちら](https://qiita.com/nnhkrnk/items/003a21f31bc8d0546c08)の記事でFlowの環境構築を実施しました。
今回はJson形式のレスポンスを返す簡単なAPIを作成してみたいと思います。# さっそく作ってみた
プロジェクト構成は以下です(今回の話で出てこないものは割愛しました)。
“`Neos.Welcome“`の下にTestControllerを新しく作成していきます。“`
Quickstart
└ Packages/
├ Application/
| └ Neos.Welcome/
| ├ Classes/
| | └ Controller/
| | ├ StandardController.php
| | └ TestController(★)
|