PHP関連のことを調べてみた2023年08月04日

PHP関連のことを調べてみた2023年08月04日

Twitter API:動かなくなったTwitter botを復活させる

# はじめに
Twitter APIを使用してTwitter botを作成していたのですが、APIの仕様変更により、2023年6月頃のツイートを最後に実行されなくなってしまいました。
bot復活までの対処についてまとめます。

botは次のような仕組みで実装していました。
1. GAS(Google Apps Script)をトリガーにPHPのスクリプトをキック
1. PHPからTwitterOAuthというライブラリを使用してTwitter APIを操作
1. ツイートのポストやファボ、ツイートを取得する

サーバー環境は次のとおりです。
* 開発環境:VirtualBoxのCentOS7.5(Vagrant:bento/centos-7.5)
* 本番環境:[さくらのレンタルサーバ – ライトプラン](https://rs.sakura.ad.jp/lite.html)

改修前のアプリのバージョンです。
* PHP:7系
* TwitterOAuth:0.7.2(おそらく)
* Twitter API:v1.1

改修後のアプリのバージョンです。
* PHP:8系
* Twitt

元記事を表示

【Laravel】Seederを使って初期データを設定する

## はじめに
Laravelには、データベースに初期データを追加するための便利な機能である`Seeder`が組み込まれており、データベースの初期状態を簡単に設定することができます。

## Seederとは
`Seeder`は、Laravelのデータベース初期化機能の一部であり、データベースに初期データを追加するためのクラスです。Seederを使用することで、開発環境やテスト環境のデータベースを簡単に初期化し、必要な初期データを追加することができます。

## Seederを作成する
Laravelでは、artisanコマンドを使用してSeederを作成することができます。以下のコマンドを実行すると、新しいSeederクラスが生成されます。

“`
php artisan make:seeder UsersTableSeeder
“`
上記の例では、UsersTableSeederという名前の`Seederクラス`が作成されます。Seederクラスは`database/seeders`ディレクトリに作成されます。

作成されたUsersTableSeeder.phpファイルの初期

元記事を表示

LaravelのwhenLoaded()がすごい

LaravelのAPIResourceで便利な関数を見つけたのでご紹介します。
APIの設計によってはModelごとにResourceを作ってあげるだけで完結しそうです!

## Modelの作成
`m_users`テーブルと`m_roles`テーブルがあるとします。
いつも通りModelにリレーションを定義します。

`MUser.php`
“`php
public function mRole()
{
return $this->belongsTo(MRole::class);
}
“`

## Resourceの作成
今回の主役Resourceです。
この`whenLoaded()`を使用した場合、`with()`で取得してある場合のみ、プロパティがレスポンスに含まれるようになります。
次で実際に使用してみます。

`UserResource.php`
“`php
public function toArray($request)
{
return [
‘id’ => $this

元記事を表示

【Laravel】定数を扱うなら専用のクラスを使おう

## はじめに
laravelで定数を扱う方法は多々ありますが、この記事ではクラスを使用した方法を解説します。

## マジックナンバーについて
まず、開発をする上で注意すべきことに“マジックナンバー“というものがあります。

マジックナンバーというのは、“それが何を示しているかがわからない文字列や数値“のことです。

> プログラムにおけるマジックナンバー(英: magic number、魔法の数字)とは、何らかの識別子もしくは定数として用いられる、プログラムのソースコード中に書かれた具体的な数値である。そのプログラムを書いた時点では製作者は数値の意図を把握しているが、他のプログラマーまたは製作者本人がマジックナンバーの意図を忘れたときに閲覧すると「この数字の意味はわからないが、とにかくプログラムは正しく動く。まるで魔法の数字だ」という皮肉を含む。

https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B8%E3%83%83%E3%82%AF%E3%83%8A%E3%83%B3%E3%83%90%E3%83%BC_(%E3%83%97%

元記事を表示

Javascriptの非同期処理でjQueryのajax使ってみた

# 辿り着くまでに

今日は仕事でWebアプリの保守してました、疲れた、、
admin画面を作成していたのだが、
検索ボタンを押した時に入力フォームをhideしたいということで、
苦戦しておりました。

Javascriptを書いても、一瞬hideされてすぐ戻るんだ、、、
悲しい、、、

ということで調べまくっていたところ、
ajaxとやらがいいらしい?
非同期処理とやらがいいらしい?

ということでjQueryのajaxを使用してみっか!

# 非同期処理とは

ボタンポチ!=関数起動!
が同期処理。

ボタンポチ!=第1関数起動!     ・・・数年後。第2関数起動!
これが非同期処理なのだ。

というのは冗談で、
・・・詳しく書いてるサイトがありましたのでリンク貼っています。
https://qiita.com/yunity29/items/7ccc84d47e139340ecbc

代表的なのはGoogleMapとか。
リロードしなくても、ボタン押さなくても、地図がガシガシ更新されてます。
非同期処理なかったら1ミリ動かしたらリロードしなあかん。しぬ。

# ajaxについて

元記事を表示

laravel メモ1

configのクリア

laravel_sample> php artisan config:clear

INFO Configuration cache cleared successfully.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478286/fdca86a3-4257-c645-95e7-cda10b3c3beb.png)

マイグレーション

laravel_sample>php artisan migrate

INFO Preparing database.

Creating migration table …………………………………………………………. 87ms DONE
INFO Running migrations.

2014_10_

元記事を表示

PHPの学びをまとめる

PHPを学び始めたので、まずはオンライン講座で学習したことをまとめます。
講座では、Wordpressでブログを作りながらPHPを学ぶという流れでした。

※まだ未完成ですが、中々完成しないのでとりあえず投稿だけしておきます。随時更新予定です。

目次

  • カリキュラムで学んだこと一覧
  • SLスタジオで学習して補充した知識
  • 課題

カリキュラムで学んだこと一覧

あとで参照した時に索引のように使えるように、参考サイトと一緒に一覧にします。

  • Mac:ターミナル、Windows:コマンドプロンプトについて
  • Mac:ターミナル、Windows:コマンドプロンプトの基本的なコマンド
  • Mac:ターミナル、Windows:コマンドプロンプトでPHPファイルを実行する
  • PHPの記述方法<
元記事を表示

【PHP】【javascript】三項演算子の入れ子

# コード
“`PHP

元記事を表示

phpで応用情報のバブルソートをコード化した

# 概要
応用情報の問題を解いている時にバブルソートの問題を見つけたので、それをプログラムで書いてみました。

# バブルソートとは?
隣り合う数字を比較し、昇順の場合は左側の数字が大きければ順番を入れ替えます。降順の場合は右側の数字が大きければ順番を入れ替えます。

応用情報問題 https://www.ap-siken.com/s/kakomon/04_aki/q6.html

# 完成コード

“`php
= $i + 1 ; $j–){

if($a[$j] < $a[$j - 1]){ $w = $a[$j]; $a[$j] = $a[$j - 1]; $a[$j - 1] = $w; } } echo $a[$i]; } ?>

“`

配列はarrayでも上記のような書き方でも可です。

応用情報では大文字のAですが、

元記事を表示

PHP:SSH接続できないレンタルサーバーでコマンドを実行する

# はじめに
自分が使用しているレンタルサーバーは「さくらのレンタルサーバのライトプラン」で、SSH接続ができない仕様となっています。
なんとかコマンド実行できないか調べたところ、PHPのexec関数を使えば可能だったので、手順についてまとめます。

![さくらのレンタルサーバプラン比較](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230850/06202a47-bb4d-2df6-c6ac-238948f8e3fc.png)
出典:[プラン比較 – レンタルサーバーはさくらインターネット](https://rs.sakura.ad.jp/plans.html)

# 環境
PHPがはいっていることが前提となります。
* サーバー:[さくらのレンタルサーバ – ライトプラン](https://rs.sakura.ad.jp/lite.html)
* PHPのバージョン:8.1.20

# 手順
1. phpファイルを作成し、次のようなスクリプトを記述する(`$command`変数に実行したいコマンドを記述する

元記事を表示

ISO 8601形式のDateTimeの扱いには気をつけよう

## 概要

これは、私の体験談ですがFlutterでクライアントサイドの開発をしている際、APIのレスポンスで来る日付と、アプリ内部で持っている現在日時を比較するというロジックに関する不具合報告が上がってきました。
それについて調査していたところ、*ISO 8601*形式のDateTimeがAPIから返却されるのに対し、何も考えずただDateTime型にパースしていました。

その結果、よからぬ挙動を起こしていたため備忘録として残したいと思います。

## DateTimeの種類(抜粋)
データーベースのシステムや、FirebaseなどのNoSQLサービスなどにも依存すると思いますが、DateTimeはいろいろな形式があります。

:::note warn
この記事でのサンプルは、JST(日本標準時)の補正をかけた時間を用います
:::

#### ISO 8601
ISO8601が今回の問題の日付フォーマットですが、以下のような種類があります
– 完全形式: `2023-08-01T00:00:00+09:00`
– 短縮形式: `20230801T000000+0900`

元記事を表示

CSSの優先度には気をつけようの話

### Laravel-adminでadmin画面を作成中・・・
ということで、本日はHTMLでフロントを作成していました。
色変えたり、文字を揃えたり、gridを調節したり、、、。

Laravel-adminを使用しており、
admin画面はBootstrapがガンガンついています。

デフォでも綺麗につくれるのですが、
微妙なカスタマイズを行う必要がありまして、、、

### BootstrapがかかっているところにCSSが追加できない!!
Bootstrapがかかっているところにはstyle属性をつけてもCSSがつかないんですね、、、
知らなかった、、、
悩むこと1時間ほど、、、、、

## CSSには優先度とやらがあるらしい!
ということを知ったのでした。
参考 http://creator.aainc.co.jp/archives/4947

importantつけたらimportantになるのね、CSSちゃんかしこい。

優先順位について理解する余力がなかったので、
解決策として、Bootstrap.cssを直接編集する荒技(?)を取りました。
コメントアウト残しといたか

元記事を表示

【Laravel】環境変数の扱い方

## 環境
Laravel v9.52.10 (PHP v8.2.6)

## はじめに
環境変数を参照する時は、“env()“からではなく、“config()“経由で参照する。

## 環境変数の定義
laravelでは、“.env“というファイルに環境変数を定義していきます。

.envファイル自体はプロジェクトルート直下にあります。

“`env
APP_NAME=Laravel
APP_ENV=local
APP_KEY=********
APP_DEBUG=true
APP_URL=http://localhost
“`
大体このような形式になっていると思います。

環境変数名は、上記のような“スネークケース“で記述します。

## 環境変数を使用する

まずは、環境変数を自分で定義していきます。

“`env
TEST_NAME=miura
“`
このように定義することで、この環境変数の値をプロジェクトの中で使用することができるようになります。

次に、先ほど定義した環境変数をプログラムで使用します。

“`php
$name = env(‘TES

元記事を表示

PHPにて変数の文字列が10ケタ且つ値が0または1であるかを確認する方法

本記事では、PHPで変数の文字列が10桁且つ値が0または1であるかを確認する方法について記載します。
## コードの例

以下に、指定した要件を満たす簡単なPHPコードの例を示します。

“`php

“`

このコードでは、`preg_match`関数を使用しています。
`preg_match`は、指定した正規表現パターンが対象の文字列に一致するかどうかを確認する関数です。

ここでは`”/^[01]{10}$/”`という正規表現を使用しています。
これは、0または1の文字がちょうど10回

元記事を表示

PHPMyAdminにログインできない場合の対処法

いつも通りXAMPPを使用してPHPMyAdminを使用としたら、以下のように表示された。
解決するのに少し時間がかかったのでメモ書き。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323019/67c0c1c7-cf16-45e0-f484-d085d93c15a8.png)

## どこが原因か探る
・MySQLはログインできるか確認する。
<確認方法>
①XAMPPのコントロールパネルでShellを開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323019/bb21046a-f68b-833d-dfe6-dc75f827afa1.png)
②Shellに以下のコマンドを入力する。
“`
mysql -u root -p
“`
③パスワードを聞かれたら、パスワードを入力してEnterを押す。
④ログインできない場合は以下を試す。

・MySQLにパスワードありでログイ

元記事を表示

Go言語で完全コンストラクタパターンを実装する

## はじめに
これまではPHPをメインで扱っていたのですが、最近はGo言語を使用しています。そこで、Go言語ではどのように値オブジェクト&完全コンストラクタパターン(Complete Constructor Pattern)を実装するのか解説していきます。

## 対象の読者
– Go言語に興味を持っている方
– オブジェクト指向設計(デザインパターン)に興味がある方
– コードの品質向上を目指す方
– PHPからGoへの移行を検討している方

## 完全コンストラクタパターンの基本
### 完全コンストラクタパターンとは?
インスタンスを生成した時点で完全な状態となるような初期化ロジックを、コンストラクタに実装するパターンのことです。

完全コンストラクタパターンを用いることで、オブジェクトが不正な状態で存在することがなくなります。これにより、呼び出し側でオブジェクトが正常かどうかチェックする必要がなくなり、ロジックの重複や修正漏れを防ぎ、保守性の向上が見込めます。

### 注意点 : 生成したインスタンスを不変に保つ
せっかく完全コンストラクタでオブジェクトを完全な状態にしても

元記事を表示

PHPでのシングルアロー演算子(->)を完全に理解した

# オブジェクトから指定したキーの値を取得したい!

ということで、
そんな機会がありました。

“`
@foreach ($shopArticles as $shopArticle)

id: {{ $shopArticle->id }}

name: {{ $shopArticle->name }}

comment: {{ $shopArticle->comment }}

shop_id: {{ $shopArticle->shop_id }}

@endforeach
“`

こんな感じで値を取得しました。

“`
@foreach ($shopArticles as $shopArticle)

id: {{ $id }}

name: {{ $name }}

comment: {{ $comment }}

shop_id: {{ $shop_id }}

@endforeach
“`

初め

元記事を表示

abraham/twitteroauthでAPI v2用のtokenを得る

意外と探してもなかったので備忘録。

“`php
CLIENT_ID = ‘xxxxxxxxxxxx’
CLIENT_SECRET = ‘xxxxxxxxxxxx’
“`
とOauth2用の`CLIENT ID`と`CLIENT SECRET`がある中で、

“`php
//リダイレクトのときについてくるcodeを取得する
$code = $_GET[‘code’];

$twitter = new TwitterOAuth(CLIENT_ID,CLIENT_SECRET);
$token = $twitter->oauth2(‘2/oauth2/token’,[
‘code’ => $code,
‘redirect_uri’ => REDIRECT_URI,
‘grant_type’ => ‘authorization_code’,
‘code_verifier’ => $verifier
]);
var_dump($token)
“`
とする。

エンドポイントのURLが`oauth2/token`ではなく`2/oauth2/token`にな

元記事を表示

TwitterOAuth で Twitter API v2 に対応してみた

地元サッカークラブのサポーターをしているのですが、マイナーなクラブだけにクラブ HP のリリースやニュースなどが Twitter 公式アカウントでツイートされないことが多く、それなら bot を作って情報発信のサポートもしようということで、非公式ながら運用開始してはや7年目のシーズンになります。
クラブ公式 HP のリリース更新をトリガーにタイトルとページリンク、画像があれば画像も含めて bot ツイートするだけです。

先日 Twitter API v1.1 のサポートが終了し、とうとう bot ツイートできなくなってしまいました。2分毎に動く自動起動バッチから大量のエラーメールが…

#### エラー履歴
|日付|経緯|対応|
|:–:|:–|:–|
|2023/05/23|Twitter API が SUSPENDED になり bot ツイートでエラーとなる|「プランが未選択」のため「Free」を選択したところ解決 ※[参考](https://sk13g.com/twitter-api-suspended/)|
|2023/07/19|TwitterAPI v1.1 サ

元記事を表示

Javaしか知らない10年目プログラマが転職を機にPHPを学び始めた話 #2

前回はこちら

https://qiita.com/naoto24kawa/items/c5b8134c74e8abffef83

# 本記事について

## 対象読者

* これからPHPを学ぼうとしている方
* ある程度プログラミング経験がある方
* 転職による環境の変化に不安を抱いている方

## 本記事作成の経緯

アルバイトから数えて10年ほどJavaとSpringbootで受託開発を行っていましたが、
初めての転職を機にPHPとLaravelを使った自社サービス開発の環境へ飛び込んで得た、
知見と感想を共有させてください。

# PHP入門

数値リテラルは他言語と同様なので省きます

## 型変換について

Javaユーザーからすると、`string`から`int`への変換にクセがあると感じました

### 文字列から数値

まず、キャストの方法は主に2つ

“`php
/* 一般的なキャストを利用する */
echo (int) “10”;
// -> 10

/* 変換の関数を利用する */
echo intval(“20”);
// -> 20
“`

####

元記事を表示

OTHERカテゴリの最新記事