- 1. 構造体の作成(もう一度挑戦)⇒Uncaught TypeError: Cannot assign null to property がでる
- 2. LaravelでToDoアプリのAPIを実装してみよう②
- 3. LaravelでToDoアプリのAPIを実装してみよう①
- 4. Laravelでリレーション先のリレーションのデータを取得する時にHas Many Throughが便利っていう話
- 5. PHP デバッグ
- 6. PHPの基本
- 7. Unable to load the requested class: {class名} CodeIgniterのエラー解消
- 8. PDOでロールバックして帳消し
- 9. 一時的にしか使われないコードに有効期限を設定し、GithubActionsでチェック・通知する
- 10. Web系のプログラマーでもわかるP2Pアプリケーション
- 11. 【PHP】リフレクションを使えばクラスやメソッドの構造を取得することができる
- 12. PHPxさくらサーバー デプロイ攻略_サーバー側環境編
- 13. ElasticsearchのMUST(AND),SHOULD(OR),MUST_NOTについて
- 14. phpでのvar_dump()表示形式変更
- 15. ループメニュー1を解いていく5
- 16. ChatGpt Apiを用いてクイズWEBアプリを作った際のプロンプトの知見
- 17. PHPxさくらサーバー デプロイ攻略_開発環境編~.env情報の取得~※Windowsベース
- 18. ループメニュー1を解いていく4
- 19. 【PHP】取り込んだHTMLのaタグにDOMDocumentで任意の属性を追加する
- 20. blueSkyのプロフィールURLからRSSを抽出するコードを書きました。
構造体の作成(もう一度挑戦)⇒Uncaught TypeError: Cannot assign null to property がでる
今Paizaラーニングを解いていて、もはやCレベルには達しており、
pythonも扱えるようになってきたので、Cクラスの残りの部分はもうストップして
Bクラスの問題集に行こうと思います。https://paiza.jp/works/mondai/class_primer/class_primer__make
前回は、下記でやっていますが下手すぎたので
再度やります。https://qiita.com/Atsulabo/items/122181b1778afeca677f
まず構造体ってなんだ?というところから始めたので、
そこらへんは前回のを見て下さい。
ただ、PHPのコードは修正します。
“`php
LaravelでToDoアプリのAPIを実装してみよう②
# 前回の記事
https://qiita.com/kent0129/private/b991b2c0c32706fd337c
こちらの記事の続きになります。# ToDoの詳細取得機能の実装
### コントローラーの編集
データを1件取得するメソッドをTodoControllerに書いていきましょう。“`php:TodoController.php
/**
* ToDo詳細
*
* @param int $id
* @return JsonResponse
*/
public function show($id):JsonResponse
{
// $idが数値以外が送られてきた時にはエラー返す
if (!is_numeric($id) || $id <= 0) { return response()->json(
[
‘code’ => Response::HTTP_B
LaravelでToDoアプリのAPIを実装してみよう①
# 前書き
初学者向けにLaravelでAPIを作る方法を記事にさせていただきます。
今回はシンプルなToDoアプリのAPIを実装していきます。
記事ではLaravel10系を使用しています。# Laravelの環境構築
今回は手軽に環境構築を行いたいのでSailを使用しようと思います。
Docker Desktopは事前にインストールしておいてください。
以下のコマンドを実行してアプリケーションの作成を行ってください。
“`
curl -s “https://laravel.build/laravel-todo-api-sample” | bash
“`上手くいかない方は以下のQiitaの記事や公式ドキュメントをを参考にしみてください。
https://qiita.com/y_sone/items/2bf510e551cd14d22042
公式ドキュメント
https://readouble.com/laravel/10.x/ja/sail.html
https://readouble.com/laravel/10.x/ja/installation.html#d
Laravelでリレーション先のリレーションのデータを取得する時にHas Many Throughが便利っていう話
# 前書き
タイトルまんまですが、Laravelでリレーション先のリレーションのデータを取得する時にHas Many Throughが便利っていう話になります。
書き方とHas Many Throughを使わない場合との書き方の違い、簡単な活用方法等を書いていきます。#### サービス概要
今回はユーザーが記事などを投稿して記事にコメントをできるようなサービスを考えてみます。#### 環境
Laravel 10系# テーブル設計
#### users(ユーザー)テーブル
| 論理名 | 物理名 | データ型 | 制約 |
| —- | —- | —- | —- |
| ユーザーID | id | UNSIGNED BIGINT | PRIMARY KEY,
AUTOINCREMENT |
| ユーザー名 | name | VARCHAR(255) | NOT NULL |
| 作成日時 | created_at | TIMESTAMP | NOT NULL |
| 更新日時 | updated_at | TIMESTAMP | |#### po
PHP デバッグ
“`php
“y1”,
“x2” => “y2”,
“x3” => “y3”
);//バッファ出力開始
ob_start();
//配列をダンプ
var_dump($log);
//バッファの内容を変数に代入
$dump = ob_get_contents();
// バッファ終了
ob_end_clean();
error_log($dump,3,’./dump.txt’);error_log(var_export($log, true), 3, “./export.txt”);
error_log(print_r($log, true), 3, “./r.txt”);
“`
PHPの基本
PHPの基本文法
1.![スクリーンショット 2024-01-23 002202.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666066/b3a40589-b74c-5a15-4de5-d5784153c2d3.png)
2. 末尾にセミコロンが要る
3.出力には、echo
4. 関数は処理をまとめるもの
5. 関数内の処理の結果は返り値で、return 返り値
6. returnが出たら、処理が終了。Returnの後の処理は無視される
7. 条件式:if(){
処理;
}
8. 配列
次に配列の要素で繰り返して取り出す方法を説明します。これはすごくよく使うので、かなり重要です。
たとえば、配列の要素を順番に取り出してそれらを表示するということがあります。そういうときにforeach文というのをよく使います。
foreachは以下のように記述します。
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.
Unable to load the requested class: {class名} CodeIgniterのエラー解消
## エラー内容
ブラウザでサイトにアクセスしたところ、以下のエラーが表示された。
“`
An Error Was Encountered
Unable to load the requested class: {class名}
“`
このときCodeIgniterのエラーログは以下の内容のみ。
“`
ERROR – yyyy-MM-dd hh:mm:ss –> Unable to load the requested class: {class名}
“`
通常のエラーログと違ってスタックトレースがなくこの1行だけなので、やや戸惑った。
そのため発生個所の特定も必要になる。
## 原因と対処
**原因**:ファイル名・クラス名の大文字小文字のtypoが原因で、クラスのロードに失敗していた。
**対処**:ファイル名・クラス名の大文字小文字を確認する。ファイル名は大文字にする。## 環境
– CodeIgniter 3.1
– PHP 8.1.14
– EC2インスタンス(Amazon Linux 2)
– Apache 2.4.58備考:ローカルのDocker環境では
PDOでロールバックして帳消し
phpでロールバックをして帳消しします。
“`php
try{
$pdo = new PDO($dns,$user,$pass,[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);}catch(PDOException $e){
echo ‘接続失敗’ . $e->getMessage();
exit();
}$pdo->beginTransaction(); //トランザクションの開始
$pdo->query(
“UPDATE user SET age = age + 1 WHERE id = 1”
);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($result[0][“age”]);
“`
“`
26
“`
間違えたことに気づきます。処理前まで巻き戻しましょう。“`php
$pdo->rollback();
print_r($result[0][“age”]);
“`
“`
25
“`
rollbackメソ
一時的にしか使われないコードに有効期限を設定し、GithubActionsでチェック・通知する
本日 [レガシーソフトウェア改善ガイド](https://www.amazon.co.jp/dp/B01MSLAFPT/) の第4章で紹介されていた「期限切れのコード」を読み、心当たりしかなかったので早速実践として動くコードを書いてみる
# 期限切れのコードとは
広告キャンペーンで決まった期間だけバナーを表示するとか、A/Bテストを実施してみるとか。
そういう、役目が終わりもう使われないコードがリポジトリ内に残ったままだとコードリーディング時の認知負荷を上げてしまうため、使い終わったら即削除すべき。
なのですが**弊社は削除のためのタスクが発行されることもなくそのまま残してしまう傾向しかない**ため、消し忘れている場合はビルドが失敗するようにして、削除を促すようにする。
# やり方とサンプルコード
一時的にしか使われないコードには、決まったテンプレートを使って有効期限を付与する。サンプルコードでは [Expire] YYYY-mm-dd をテンプレートとする。
## PHP
2024年01月22日以降は使わないコード
“`php
// [Expire] 2024-0
Web系のプログラマーでもわかるP2Pアプリケーション
# はじめに
先月、映画『[Winny](https://www.telasa.jp/videos/217441)』を見ました
Winnyというのは[Peer to Peer](https://ja.wikipedia.org/wiki/Peer_to_Peer)(P2P)型のファイル共有アプリケーションとなっていますP2Pとは何か──
Wikipediaからの引用では以下のようになっています> P2Pに対置される用語としてクライアント・サーバー方式がある。クライアント・サーバー方式ではネットワークに接続されたコンピューターに対しクライアントとサーバーに立場・機能を分離しており、一般的には多数のクライアントに対してサーバーが一つである。クライアントはサーバーとだけ通信でき、あるクライアントが他のクライアントと通信するにはサーバーを介する必要がある。
>
> P2Pではネットワークに接続されたコンピューター同士が対等の立場、機能で直接通信するものである。クライアント・サーバー方式ではクライアント数が非常に多くなると、サーバーおよびその回線に負荷が集中するのに対
【PHP】リフレクションを使えばクラスやメソッドの構造を取得することができる
# 初めに
リフレクションという機能をご存じでしょうか?
私は名前は聞いたことあるけどよくわかっていませんでした。
改めて調べてみてすごい便利だなと感じたので、今回はリフレクションについてアウトプットします。# リフレクションとは
リフレクションとは、クラスやメソッドなどの構造をデータとして扱うことができる機能です。
この機能を使うと以下のような情報を取得することができます。
* クラスの属してる名前空間
* クラスに定義されているメソッドの一覧
* クラスが利用しているtraitの一覧
* クラスの継承元やインターフェースなどなど。
## 使い方
PHPには“`ReflectionClass“`というクラスがあり、以下のようにReflectionClassのインスタンスを作成することでクラスの情報を扱うことができるようになります。
“`php
// ReflectionClass型のインスタンスを作成
// 引数にはクラス名を指定
$reflectionClass = new \ReflectionClass(‘TargetClassName’);
“`“
PHPxさくらサーバー デプロイ攻略_サーバー側環境編
**↓前回**
https://qiita.com/dnote/items/5f22f43a9b4158caff97
—
## あらすじ
– [x] 開発環境側で.envファイルを使用した情報の読み取り
– [x] サーバーへのファイル移動(各自`www`直下へフォルダごとファイルを送信されたし)
– [ ] サーバー側で開発環境同等の実行環境を作る **(本稿)**:::note warn
CHK:アップロード忘れずに!
composer.json
:::https://qiita.com/dnote/items/5f22f43a9b4158caff97
ここではさくらのレンタルサーバー側の環境構築を行っていきます。
具体的には下記↓
– composer & phpdotenvのインストール
– .envファイルの作成が必要です。
(FTPで直接送信 or サーバーコントロールパネル上で作成する方法もあります。)を行います。やりたいことは一緒。でも方法は違います。
ここからはSSH接続を利用した、コマンドベースの作業となります。## S
ElasticsearchのMUST(AND),SHOULD(OR),MUST_NOTについて
「must_not [A,B,]」はSQLでいう「NOT (A AND B)」なのか「NOT (A OR B)」なのか…動作確認した。
(2023/10/19㈭にbid:5815のハンドボール掲示板の所属先カテゴリidを129→118に移動した際、発生したのを機に…。)tid=21,22,24,24,25の集合があるとき
must_not=>[tid=>22,tid=>24,]
↓
tid=21,23,25が抽出される。
つまり
「NOT (tid=22 OR tid=24)」
と書くのと同じ動作。
「NOT (tid=22 AND tid=24)」
ではない!must_not=>[tid=>22,!tid=>22,]
↓
NOT(tid=22 OR ! tid=22)
↓
何も抽出されない。◯NOT(tid=22 AND ! tid=22) ⇔ (NOT tid=22 OR tid=22)
↑
このように全抽出になるわけではない。注意するのは
must_not 「「性別=男性」、NOT「身長が170cm以上」(身長が170cm未満)、」
は
「男性かつ170cm未
phpでのvar_dump()表示形式変更
注意:「 xdebug.so 」を読み込むと処理に時間がかかるようになるので、読み込むのは開発用/ステージングサーバーのみに絞った方が無難です。
時間的に約倍。下手すると倍超えまで時間がかかるようになります。2023/07/04 AWS->OCIへのサーバー移行
※OCIサーバーでvar_dumpするとどのファイルの何行目かが分からないので。今回のケースでは
“`
[root@0206oci_webstaging php.d]# pwd
/etc/opt/remi/php56/php.d
[root@0206oci_webstaging php.d]# cat 20230704.ini
zend_extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
[root@0206oci_webstaging php.d]# service httpd restart
Redirecting to /bin/systemctl restart httpd.service
[root@
ループメニュー1を解いていく5
https://paiza.jp/works/mondai/loop_problems/loop_problems__kuku_step2
### Python
“`py
N = int(input())
for i in range(1,10):
if i < 9: print(i * N, end=" ") else: print(i * N) ``` ### PHP ```PHP
“`
https://paiza.jp/works/mondai/loop_problems/loop_problems__pow2### Python
“`py
N
ChatGpt Apiを用いてクイズWEBアプリを作った際のプロンプトの知見
# 初めに
ChatGPT APIを使った何か作ってみようと思い、AIに質問をして正解を当てるクイズWEBアプリを作ってみました。
![20200622.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713225/4abc99ce-d278-33c7-ef5d-6c55efc22a9f.gif)
↓WEBアプリPubliQはコチラ。
https://publiq.cloud/こちらのページではphp(laravel)で解説しますが、どの言語を使っている方にも分かるように、「プロンプトの使い方」に焦点を当てて書こうと思います。
アドバイス、ご助言頂けますと幸いです。
# クイズの概要
例えば:お題が「野菜」で正解が「ニンジン」の場合は「色はオレンジ?」「根菜?」等の質問をAIしながら答えを探すクイズにしてみました。
ちなみに某ラーメンyoutuberのクイズショート動画から着想を得ています。# ざ
PHPxさくらサーバー デプロイ攻略_開発環境編~.env情報の取得~※Windowsベース
## 本稿の目的
PHPで作成したアプリをノーヒントでデプロイするのはわからないことだらけですごく大変でした…
自分の行ったデプロイまでの手順を示し、みんなのPHPアプリを世に解き放つお手伝いがしたい!ということで、ここでは開発環境側の準備に関して解説します。
全体の流れはこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3562770/edcbfc4a-e30f-3558-d316-685c329e7d78.png)## .envファイルの準備
このようなデータベースへのアクセス設定がphpファイルに記載されているとする。
“`php:初期状態php
$db_name = “sample_db”; //データベース名
$db_id = “root”; //アカウント名
$db_pw = “”; //パスワード:MAMPは’root’
$db_host = “localhost”; //DB
ループメニュー1を解いていく4
https://paiza.jp/works/mondai/loop_problems/loop_problems__seq_reverse
### Python
“`py
N = int(input())
A = list(map(int,input().split()))
# reversed関数を使うなら
print((*reversed(A)),sep=”\n”)
# for文を使うなら
for i in range(N-1,-1,-1):
print(A[i])
“`### PHP
$Aはtrimしないと後ろに改行がくっついたままexplodeしてしまうので注意。“`PHP
=0; $i–){
print($A[$i] . “\n”);
}
//reverse関数を使うならこれでも。でもぶっちゃけ上の方が早い
$A =
【PHP】取り込んだHTMLのaタグにDOMDocumentで任意の属性を追加する
DOMDocumentを使い、取り込んだHTMLのaタグに`rel=”nofollow”`や`target=”_blank”`を付けたかったのですが、文字化けなどに苦戦したので残します。
## 想定対象者
PHPでHTMLのaタグにrel属性やtarget属性を付けたい人、またそれに似た操作をしたい人。今回の実装コードは以下のように``や`
`を含まないHTMLを取得し、中にあるaタグを処理するコードになっています。
``タグで囲まれているような**完全なHTMLを想定していない**ので、注意してください。
“`HTML
“`
## 環境
– PHP8.2.8
## 実装
“`PHP
/**
* @param $html
* @return false|string
*/
function add
blueSkyのプロフィールURLからRSSを抽出するコードを書きました。
### blueSkyのプロフィールURLからRSSを抽出するコードです。
blueSkyがRSS対応という記事を見たので対応してみました。
php7系とphp8系なら恐らく動作すると思います。
動作環境はPHP8.2になります。“`php