PHP関連のことを調べてみた2020年12月31日

PHP関連のことを調べてみた2020年12月31日

?PHP?だけで動くwebパラパラアニメを表現してみた…!!

※PHPアドベントカレンダー大遅刻で申し訳ありません。。。>< ## PHPでアニメーション表現できないのかな..? PHPではサーバーサイドの言語だからアニメーションは無理、どうにかしてjavascriptのようにアニメーションが表現できないか、 ましては、php-cliでコマンドライン上でもなく**ブラウザ上で表現**できないか、完全に誰得なのかわからないものに挑戦してみました。。汗 で完成したものがこれ.. [**▶完成したデモはこちら**](https://matsudapress.com/lab/sandbox/php/red.php?id=0) ※だいぶカクカクですが:upside_down: javascriptやCSS、HTMLもつかっていません。 gif画像など組み合わせたり、遅延時間を調整すればかなり無理矢理だけどアニメーションっぽいことできそう。 キーボード入力情報をうまく連携させれば、無理やり動きのあるゲームっぽいのも可? ## アニメーションっぽく表現するために色々やった試行錯誤 #### 検証① sleepを使って遅延でアニメーションで

元記事を表示

PaizaスキルチェックAランクにボコボコにされた話

お疲れ様です!TaYです:open_hands:

今日はタイトルにもある通りPaizaスキルチェックのAランクに挑戦したのでそのお話です。

結果はもう出てますが

__ボコボコにされました。。。:tired_face:__

Aランク問題に挑戦した経緯

スキルチェックをやったことがある人ならわかると思うんですが、問題を終えると結果画面(レーティングとかが表示される画面)に移りますよね?

そこでスキルチェック問題一覧へを押すと現在のランクより1つ高いランクの問題ページに移る仕様なんですよ。

ここで脳死でやっていた僕はCランクのつもりで挑戦したら圧倒的に難易度が違う問題がでてきて

__あっ、やらかしたなこれ:rolling_eyes:__

となったわけです。

スキルチェック問題はスタートするともう後戻りができないため、とにかくやるしかありませんでした。

現在僕はBランクの問題をなんとか解けるレベルだったので、100点クリアは無理でも時間内にクリアはできるかな〜と思っていましたが、、、

元記事を表示

WordPessのテンプレートファイル

#WordPressのテンプレートファイル
**テンプレートファイル**とは?
WordPressのルールに沿って書かれた**PHPファイル**のことである。

##主なテンプレートファイル

| **テンプレートファイル名** | **概要** |
|:— |:— |
| front-page.php | Webサイトのトップページを表示
| single.php | 投稿の記事ページを表示 |
| page.php | 固定ページを表示 |
| category.php | カテゴリーページを表示 |
| search.php | 検索結果ページを表示 |
| archive.php | 記事一覧を表示 |
| 404.php | 404エラーページを表示 |

カスタム投稿タイプが「cat」の場合
single-cat.phpがテンプレートファイル名となる

元記事を表示

PHP初心者っぽい書き方の掲示板型メモ帳をリファクタリングしてDDDっぽくする

# はじめに

これから新しくPHPで何かを作る場合、どういう構造が良いだろうか。
確認と使い勝手を見るために小さなサンプルアプリを作りリファクタリングで少しずつ変更していくことで違いを体感する。

# まずベタ書きで作る

DB定義

“`sql:db/tables.sql
create table article(
article_id integer primary key autoincrement,
title text not null,
body text not null,
created_at timestamp not null default current_timestamp,
updated_at timestamp
);

create table tag(
article_id integer not null,
tag text not null,
primary key(article_id, tag)
);
“`

最初は全て一つのファイルに書くこととする。

“`php:public/index.php

元記事を表示

CSVインポート(Ajax)

#はじめに
非同期通信を用いてCSVファイルのインポート機能にバリデーションチェックまでを含めた手順を記事にしています

## 開発環境
– Laravel 8.0
– php 7.3
– goodby/csv: 1.3

# UML

![UML.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566243/f94f99d7-6e55-5919-134d-452c8fa7c9c0.png)

## Goodby/CSVのインストール
>Goodby/CSVとはCSVをインポート/エクスポートするためのPHPライブラリ

まずはターミナル・またはコマンドプロンプトでプロジェクト直下に下記コマンドを打ち込んでください。

composer require goodby/csv

上記コマンド後にcomposer.jsonにgoodby/csvが入ってることを確認

“`ruby:composer.json
“goodby/csv”: “^1.3”,
“`

## Mo

元記事を表示

[PHP]DatetimeImmutableのコンストラクタはタイムゾーン判定において文字列を優先する

この前ハマったので。
結論を先に言うと、`new DateTimeImmutable($time, $timezone);`では`$timezone`よりも、文字列の`$time`のタイムゾーンを優先して判定するということらしいです。

# 想定通りに動作したケース

“`PHP:new_jst_datetime_immutable.php

元記事を表示

HTTPのPOSTメソッドの「Content-Type」について備忘録

HTTPでのやり取りを実装する中でContent-Typeについて調べたので、備忘録として残しておきます。

## Content-Typeとは

> Content-Type エンティティヘッダーは、リソースのメディア種別を示すために使用します。
> 要求においては (POST または PUT などで)、クライアントがサーバーにどのような種類のデータが実際に送られたかを伝えます。

[Content-Type – HTTP | MDN](https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Content-Type)

構文例:
`Content-Type: application/json;charset=utf8`
`Content-Type: application/x-www-form-urlencoded`
`Content-Type: text/html; charset=UTF-8`

実際のリクエストはこんな感じになる。

“`
POST /test HTTP/1.1
Host: xxx.xx.xx.x
Con

元記事を表示

DBのデータを連想配列で取得し、そのデータをoptionタグに使う

ポイントは
・$result->fetch_assoc()により、連想配列としてデータを取得
・optionタグを記述する箇所は、whileの中

“`php

// DB接続の記述は省略


“`

元記事を表示

Github ActionsでPHPバージョンを指定する方法

## 既存Actionsの定義
GithubのActionsを使用し始めてあまり経ってないのでいつも以下のようにシステムOSを最新をして使っていました。

“`

jobs:
build:
name: Testing
runs-on: ubuntu-latest

“`
でも、Composerを利用しているLaravelを使用するとphpのバージョンでVendorのインストール次第ができなくなることがありました。

最初はphpをインストールし直す方法を考えましたが、速度的にも手間が掛かります。

## 改善されたActionsの定義
ところでActionsのモジュールが色々出ているもんで、使えやすいものがありました。

https://github.com/shivammathur/setup-php

上記のものを利用すると簡単に問題が解決されました。

“`

jobs:
build:
name: Testing
runs-on: ubuntu-latest

steps:
– uses:

元記事を表示

Laravelでsession(カート機能実装)についてまとめてみた

#0.はじめに
####この記事について

#####この記事は**「Requestインスタンス」**を用いたセッションに関する記事です。

Laravelを用いた共同開発講座に参加させていただきました。
その中で一際難しく感じたセッションを用いたカート機能の実装についてまとめたいと思います。
同じように悩む誰かの一助になれば幸いです。

転職前の若造の乱筆ですがよろしくお願いいたします。
間違い等あれば喜んで訂正させていただきます。

####簡単に自己紹介
・医療職5年目
・完全独学6ヶ月後、共同開発講座に参加
・転職まであと○○(?)

ではさっそく参ります。
#1.セッションとは

####セッションて何?
**【セッション = データを保存しておく仕組み】**
です。

よくある”session”の説明   >>>  「アクセスの開始から終了までの一連の通信」   
実際の”session”のイメージ  >>>   「カギ」とか「合言葉」みたいな

という感じに、よくある説明と実際の掴みどころが少し違うような気がします。
よくある説明の通り、実現したいことは「アクセスの開

元記事を表示

【Laravel】エラーが出ないのにDBに値が保存できない(原因は割り当て許可かも)

## 困りごと
PHP歴3ヶ月、Laravel歴1ヶ月の初学者です。LaravelのDBに値が保存できずにハマってしまったので、同じような方が減ることを祈って投稿します。「データの入力→DB保存→DB呼び出し→データの表示」をしようとした際、下図の赤枠のように値が一項目だけ表示されず、エラーも吐き出されないという事象が発生しました。
![example.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969534/6e38ad07-4b2e-1713-5c67-3b7156dfe12d.png)
(この事象に何度かハマったことが何度かあり、その度に少し悲しくなります…)

## 開発環境
PHP 7.2.34 / Laravel 6.20.5 / phpMyAdmin 4.9.3

## 結論
Eloquentモデルを使ってcreateする際は、Modelクラスに割り当ての許可が必要。
許可の方法はホワイトリスト方式(`$fillable`) or ブラックリスト方式(`$guarded`) 。

##

元記事を表示

PHPでも動的サイトをスクレイピングしたい夜

# はじめに

これはジーズアカデミーAdvent Calendar 2020の記事です!

# 序章 -俺はスクレイピングやるぜ、PHPで。-

だいたいスクレイピングって言うと、相場は`python`って決まってます。
けど、普段PHPを触っているボクは、PHPでスクレイピングしたいんです。

で、PHPでスクレイピングって言うとだいたい`phpQuery`というものが言及されがちです。
確かに、jQueryみたいに操作できるのでかんたんです。
けど、これ**動的サイトにはうまく利用できない**んですね。

だから、他の方法が必要になってきます。

## 今回の対象。
某海外の買い物サイト(一応名前は伏せます。)
以下の様に
1. 検索
2. 一覧表示(一部だけ)
3. 下にスクロールするとスクロールした分だけ情報を取得する
という動きです。
![scraping.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307585/61756928-98bd-b4f9-1fa7-450348f9edbe.g

元記事を表示

Twitter、Google、メールでのログインを実装しよう。

これらの技術を使えば、簡単に実装できます。

## 自前で実装(Twitter,Google)

PHPでTwitterログインを実装しよう
https://dotinstall.com/lessons/tw_connect_php_v3#!lessons

GoogleでログインするWebサービスを作ろう
https://dotinstall.com/lessons/google_connect_php_v2

## BaaS/MBaaS環境を使う。

Firebase
https://firebase.google.com/?hl=ja

## Ruby on Railsを使う

【Rails】ログイン機能を実装する
https://qiita.com/d0ne1s/items/7c4d2be3f53e34a9dec7

## シンプルなPHPでのログイン実装

phpで作る簡素なログイン機能
https://qiita.com/qwertyuiopngsdfg/items/597da67387723a5aedad

PHP5.6でログイン機能を実装しよう
https://doti

元記事を表示

forループで集計処理していた箇所をsqlで改善した

## 改善前

laravelプロダクトの過去の誰かの実装箇所で、レコード数が多くなると劇的に遅くなる箇所あったので、以下発掘したその原因のコード。

(分かりやすさのため、コードの一部改変とコメント追加)

“`php:
// カラム1~10の各値から、$minimum以上の個数を持つものを集計して抽出
$count_array = array_fill(0, 11, array());
$array = $query->get();
foreach ($array as $item) {
for ($i = 0; $i <= 10; ++$i) { if ($item["col{$i}"]) { if (!array_key_exists($item["col{$i}"], $count_array[$i])){ // col{$i}が未出ならカウントを1に初期化 $count_array[$i][$item["col{$i}"]] = 1;

元記事を表示

【GAS】GASにcurlでPOSTしてjsonを送ろうとしたらエラーが出たのでメモ

どうも。
今日はGASにPOSTでjson送ろうとしたらエラーが出てそれにはまってしまったのでメモ。

ソース

“`main.php
$url = “GASのりんく”;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(‘Content-Type: application/json’));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, ‘POST’);
curl_setopt($ch, CURLOPT_POSTFIELDS, $senddata_json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, ‘GASのリンク’);
$result = curl_exec($ch);
var_dump($resu

元記事を表示

【PHP】「mb_strposが使えない」を解決

##背景
php導入後、mb_strpos関数でエラーが出たので備忘録として記載します。

##環境
CentOS Linux release 8.2.2004 (Core)
PHP 7.2.24 (cli) (built: Oct 22 2019 08:28:36) ( NTS )

##エラー情報
コンソール内でmb_strpos関数を利用後、定義されていないとエラー

“`php
php > echo mb_strpos(“ontama”, “a”);
php > mb_strpos PHP Warning: Uncaught Error: Call to undefined function mb_strpos() in php shell code:1 Stack trace:
“`

##原因
Centosの場合デフォルトはmb_strposは利用できないらしく、パッケージをインストールする必要がある模様
マルチバイト文字列関連の関数を使うときに必要なphp-mbstringをインストール

“`bash
[root@localhost etc]# yum ins

元記事を表示

if、else、elsif(elseif)!

#はじめに
駆け出しのプログラミング初心者。
条件分岐(じょうけんぶんき)について、まとめたので投稿しますわ。

##じょうけんぶんきって????
ある条件を指定して、その条件に合っていればコードを実行し、
違ったら別のコードを実行するというような、条件によって実行される処理を分岐させるヤツ?

##if
条件分岐文の代表格。
「もしこの変数が1以上であれば」のような条件を付けて、処理を分岐させる。

★Rubyの場合

“`ruby
number = 2
if number > 1 && number < 10 puts '条件分岐' end ``` ★PHPの場合 ```php 1 && $number < 10){ echo $text ; } ?>
“`
##else
if文の条件式がfalseで実行されない場合に実行させる処理を記述することができる。
if文が実行されるとelse文は実行されず、if文が実行されないとelse文が実行されない。
ちな、else

元記事を表示

【サルが書く】PHP8のunion typesとmixedについて考える

わきゃ!

GIGアドベントカレンダー23日目になります(遅れてすみません!)
GIGメンバーの投稿はこちら? から見てみてね!
https://qiita.com/organizations/gig-inc

PHP8がついにリリースされましたね!

そこで気になった新機能であるUnionTypesとmixed型についてまとめてみました。

# 1. UnionTypes

PHP8以前はプロパティ、パラメーター、および戻り値の型に対して単一の型しか宣言できませんでした。
またPHP7.1以降のバージョンではnull許容型があります。
PHP8以前は限定的なUnionTypesしかできませんでした。
ちなみにnull許容で書く場合は型の前に?をつけることでできます。 `例) ?string`

PHP8以前ではPHPDocを使用してのUnionTypesはありました。

“`php
class Test {

/**
* @var int|float
*/
private $test;

/**
* @param int|float

元記事を表示

PHPのページ遷移で

タグを1つにまとめる方法

お疲れ様です!TaYです:open_hands:

今PHPでECサイトを製作中で、商品の一覧ページから編集、削除、追加などをできるボタンを設置しています。

![スクリーンショット 2020-12-29 15.24.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/957298/932bfa9d-1b1e-9f08-7896-7b7a4c7d7585.png)
↑こんな感じ

通常ボタンを使う場合はボタン1つにつきformタグ1個が定番ですが、このように何個もボタンを追加するとその都度formタグをかかなければなりません:sweat:

“`php:sample_1.php
‘;
echo ‘

‘;
echo ‘‘;

元記事を表示

LaravelとVue.jsを使った見積作成アプリ その2

前回の復習

前回は見積一覧ページと見積編集ページのコントローラーを作成しました。今回はVue.jsを使用し見積編集ページのテンプレートを作成します。

Vue.jsの導入

以下のサイトからnodeをインストールします。

https://nodejs.org/ja/download/

その後ライブラリを使ってnpmをインストールします。

“`
$ npm install
“`

これから、resoueces/js/app.jsの以下の部分を編集することで内容を追加していきます。

“`app.js
const app = new Vue({
el: ‘#app’
});
“`

ターミナルで以下のコマンドを実行することでコンパイルが可能

元記事を表示

OTHERカテゴリの最新記事