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

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

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; } } } for($i = 0; $i <= count($a) - 1 ; $i++){ 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
“`

####

元記事を表示

<設計>ユーザ新規登録機能

概要

トークアプリ開発の設計を説明します。

対象機能

– ユーザ新規登録機能

基本設計

– トークアプリを使用するには、ユーザ新規登録を必要とする。

詳細設計

– ユーザ新規登録には次のパラメータを設定する。

<Router>
– ユーザ新規登録ボタンを押した時の画面遷移先を設定
![qiita投稿用.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3292958/c22ccb09-c6b6-b26d-77f9-77b5f305945f.jpeg)

routes/web.php

// ユーザ新規登録
Route::get(‘signup’, ‘Auth\RegisterController@showRegistrationForm’)->name(‘signup’);
Route::post(‘signup’, ‘Auth\RegisterController@register’)->name(‘signup.post’);

元記事を表示

<設計>posts(投稿)テーブルのマイグレーションとシーダー作成

概要

トークアプリ開発の設計を説明します。

対象機能

– posts(投稿)テーブルのマイグレーションとシーダー作成

基本設計

– Adminerに作成するDBテーブルのうち、posts(投稿)テーブルについて、
マイグレーション実行とシーダー作成を行う。

– マイグレーションファイルを新規作成する。

– Postモデルを作成する。

– postsテーブルにはユーザの投稿内容を格納する。

– 投稿内容は文字列で140文字とする。バリデーションチェックのため、テスト用の投稿内容を160文字とする。

– 投稿内容の文字数制限はバリデーションファイルに記載する。

– postsテーブルのテスト用投稿数は、テスト用ユーザ10人が1人1投稿行うものとし、10通りの投稿内容を用意する。

詳細設計

– マイグレーション実行
1. postsマイグレーションファイルの新規作成
$ docker exec -it laravel_app bash
#ls
#cd laravelapp ; pwd
#php artisan m

元記事を表示

【紹介】プログラミング学習で参考になったこと

プログラミング学習で参考になったことを紹介します。

【C言語】

– 書籍

1. 「苦しんで覚えるC言語」
タイトルとは裏腹に解説が丁寧です。
文章はその道何十年のC言語が大好きなベテランエンジニアに教わっているような感覚があります。
コードの意味や「〇〇とは何か説明せよ」というような問題を通して、
考えながら学習していけるため、少しずつ自信になっていく本です。
私は、半分くらいまで読んで、下記のStudyーCアプリに移行しました。

2. 「明解 C言語」
体系的に順番に学んでいきたい人におすすめです。
説明はクセがなくて読みやすい印象です。
「明解 〇〇」シリーズは、情報系の大学でも教科書として使用されることがあるそうです。

– iphone向け学習アプリ
Study-C

情報系大学の学生によって作成されたC言語のための学習アプリです。
コンパイラや統合開発環境を用意する必要がなく、手軽に学習を始められます。
解説→パズルの穴埋め問題の順番で進んでいきます。
大学ではこんなことを授業でやるんだろうな、と思わせてくれた内容でした。
C言語に全く触れたことがない人でも、

元記事を表示

【PHP/Laravel】プログラミング初学者によるアプリケーション開発

概要

フルリモートでチーム共同開発を行いました。
今回作ったものはトークアプリです。

成果物

・ゲーアニ Music Board
https://geanimusicboard.fly.dev/

・Github
https://github.com/yukihiroLaravel

担当開発

■posts(投稿)テーブルのマイグレーションとシーダー作成
https://github.com/yukihiroLaravel/joint_develop/commits/feature/fukushi/posts_migration_seeder
■ユーザ新規登録機能
https://github.com/yukihiroLaravel/joint_develop/commits/feature/fukushi/user_register_login
■ユーザ編集画面・更新
https://github.com/yukihiroLaravel/joint_develop/commits/feature/fukushi/user_edit_update

元記事を表示

PHPチャットアプリのセキュリティ強化:XSSとCSRF攻撃への対策

## 目次

– [記事の内容](#記事の内容)
– [本編](#本編)
– [XSS攻撃による攻撃](#xss攻撃による攻撃)
– [CSRF攻撃による攻撃](#csrf攻撃による攻撃)
– [終わりに](#終わりに)

## 記事の内容
以前執筆した記事[ゼロから始めるPHP:チャットアプリ開発入門](https://qiita.com/fwzis/items/5fa0e33da3484b5fde70)で、生のPHPを用いたシンプルなチャットアプリを作成しました。ただ、そのチャットアプリはセキュリティ面において完全に安全ではありませんでした。なので勉強用として、今回の記事ではこのチャットアプリを更にセキュリティ上安全なものに改良することを目指します。
しかしながら、私自身もセキュリティに関してとても詳しいわけではないので、記事の内容に完璧な保証をすることはできません。もし改善の余地がある部分や間違いがある場合は、どんな小さな情報でも構いませんのでコメントにてお知らせください。

## 本編
今後内容を追記していく可能性があるが、今回はXSS攻撃とCSRF攻撃の例とその解決策

元記事を表示

ルーティングのnamespaceとは??

Ruby on Railsを使ってアプリケーションを開発していると、namespaceという単語を耳にすることが多くあります。ここでは、特にルーティングのコンテキストでのnamespaceについて説明します。

# namespaceとは何か?
`namespace`とは、ルーティングを一定の範囲(名前空間)でグループ化するための方法です。これにより、同じコントローラー名やアクション名を異なる範囲で使い分けることができます。

##### `namespace`の基本的な使用法
例えば、管理者向けのページを作成する際には、namespaceを用いてadminという名前空間を作成します。
“`ruby :routes.rb
namespace :admin do
resources :users
end
“`

上記のようにルーティングを設定すると、`Admin::UsersController`が作成され、その中にあるアクションへのルーティングが設定されます。また、ビューも`app/views/admin/users`ディレクトリの下に作成します。

#### namespac

元記事を表示

PHPの将来性

# 目次
1. [PHPとは](#PHPとは)
1. [PHPフレームワークのフリーランス求人・案件数](#PHPフレームワークのフリーランス求人・案件数)
1. [PHPエンジニアの平均年収・年収相場](#PHPエンジニアの平均年収・年収相場)

# PHPとは
1. [概要](#概要)
1. [フレームワーク](#フレームワーク)

### 概要
Webページに動きをつけるために開発された、Web開発に特化したプログラミング言語
「**動的型付け言語**」に分類される
**動的型付け言語**:同じURLでも閲覧者や時間帯などによって、表示される内容が変わるもの

### フレームワーク
**▼Laravel**
2011年に登場したフレームワークであり、PHPフレームワークの中で最高評価を受けている

##### メリット
プログラムの拡張性や自由度が高い

##### デメリット
自由度が高すぎてコードが煩雑化しやすい

元記事を表示

【Laravel/Dusk】waitForを使って無駄なテスト実行時間を短縮する

# はじめに
**①ボタンをクリック**
**②GETリクエスト**
**③レスポンスが返ってきてメッセージ表示**

`Dusk`を使ってテストを書いていると、上記のような流れをテストすることはよくあると思います。
このような一連の流れを確認するにはどのように実装するのが良いでしょうか?

例えば①で``をクリックして③で`検索結果が0件です。`というメッセージを確認するテストだとして、下記のように実装してみます。

“`php
// パターン1
$browser->click(‘@search-button’);
$browser->assertSee(‘検索結果は0件です。’);
“`
`click()`で検索ボタンクリックを行い、`assertSee()`でメッセージを確認するシンプルな内容で、テストも問題なく動くかと思います。

しかし、実行環境などによって②のGETリクエストの結果がすぐに返って来なかった場合(スペックが良くない、遅いPCの環境で実行をした場合など)、`assertSee()

元記事を表示

OTHERカテゴリの最新記事