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

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

header(Location)へパラメーターIDを使用したい時

header(“Location: index.php?=id”.$REQUEST[‘id’]) ;としてやると使用できる。

この時()内はシングルクォーテーションではなくダブルクォーテーションでないと動作しないので注意!

元記事を表示

Laravelのログイン機能にSNS認証を追加する(socialite)

## socialiteでSNSログインを実装

Laravelで、SNSのアカウントを使ったログインの実装をした時のメモです。

### socialiteとは

[soscialite](https://laravel.com/docs/7.x/socialite)とは、Laravelで簡単にOAuth(SNS認証)を可能にするパッケージツールです。

はじめに、composerを使って`socialite`をインストールします。

“`
$ composer require laravel/socialite
“`
## コンフィグレーション

Socialiteを使用する前に、アプリケーションが使用するOAuthサービスの認証情報を設定します。

### services.phpの設定

認証情報を必要とする各プロバイダーの設定を行います。

“`php:config/services.php

return [

‘github’ => [
‘client_id’ => env(‘GITHUB_CLIENT_ID’),
‘cli

元記事を表示

Gutenberg で生成されてしまう空の

タグを the_content() 読み込み時に削除する方法

WordPressの Gutenberg エディターでは、新規ブロックが自動生成されて、空の `

` が保存されてしまうことがよくある。

この問題には、functions.php などに次のコードを追記することで対処できる。

“`PHP
add_filter( ‘the_content’, function ( $content ) {
$content = str_replace( ‘

‘, ”, $content );
return $content;
});
“`
これで、`the_content()` で、`

` が削除された状態の記事本文が読み込まれるようになる。

なお、`get_the_content()` は、フィルターが適応されていない状態の記事を取得するので、要注意。

## 関連ドキュメント

– [関数リファレンス/add filter – WordPress Codex 日本語版](https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%

元記事を表示

PHPで将棋のUSIプロトコルに挑戦

## はじめに

PHPで将棋のUSIプロトコルに挑戦します。[→JScript版はこちら](https://qiita.com/economist/items/83badfdde88333a56d7b)
将棋ソフトは各自用意してください。

## USIプロトコルの例

USIプロトコルの例です。これをPHPで書いていきます。

将棋ソフトと通信を開始し、初手76歩とした局面を1秒間検討し、評価値や読み筋を取得するのが目的です。
“>“で始まる行はコマンド送信、それ以外は受信となります。

~~~
>usi
id name NNUE-v1.0 64SSE2 (based on YaneuraOu 2018 Otafuku 4.82)
id author by yaneurao, extended by ynasu87
option name Threads type spin default 4 min 1 max 512
option name Hash type spin default 16 min 1 max 1048576
option name MultiPV t

元記事を表示

Laravelでメールを送信する

[参考:Laravelのmailableクラスでメール送信を行う[導入/入門編]
](https://www.ritolab.com/entry/38)

### mailableクラス
“`terminal
$ php artisan make:mail sampleMailClass.php
“`

を実行後、以下のように記述

“`laravel-project/app/Mail/sampleMailClass.php

元記事を表示

PHPのCallableについて完全に理解する

# はじめに

`Callable` という擬似型は `PHP 5.4` 系で導入されていたようなのですが、ある値が `Callable` かどうかがどのように決まるのかさっぱり理解できず、業務で使う機会もそんなになかったことから放置していました。

業務で使う機会が出てきたというわけでも全くもって全くないのですが、ふと考えてみたら完全に理解できた気がしてしまったので、ツッコミ覚悟で記事にまとめることにしました。

この記事ではどんな値を `is_callable()` に渡したら `true` を返されるのかを探っていきます。 `is_callable()` が `true` を返す値はそのまま `call_user_func()` , `call_user_func_array()` などに渡して呼び出すことが可能です。

`var_dump()` を含んだコードの動作確認は [paiza.IO](https://paiza.io/projects/new) で行っています。執筆時のPHPバージョンは `PHP 7.4.1` でした。

# この記事のスコープ外

「関数やクラスが

元記事を表示

ボタンを押した時に処理を実行させたい時

今回は投稿内容を編集し、編集完了ボタンを押したらdbの投稿内容を書き換える(更新する)というもの

if文で条件を指定してからデータベースへアクセスし書き換えるという流れ

prepare(‘UPDATE posts SET message=? WHERE id=?’);
$statement->execute(array($_SESSION[‘message’],$_SESSION[‘posts_id’]));
?>

HTML文(ボタンの部分のみ)

これで修正完了するボタンを押すとphpが処理される

元記事を表示

PHP LaravelをIISで稼働させる

PHP LaravelをIISで構築します。

OS:Windows10 Pro
Webサーバー:IIS10

IIS10でPHPを稼働させるには、「CGI」を有効にする必要があります。
「コントロールパネル」から「プログラムと機能」を選択します。
「Windowsの機能の有効化または無効化」を選択して表示されたウインドウから
「インターネットインフォメーションサービス」を選択して、
「World Wide Webサービス」-「アプリケーション開発機能」-「CGI」にチェックを入れて「OK」してください。

インストールが完了したら、IISマネージャーを立ち上げてください。

からNon Thread SafeのZIPファイルをダウンロードします。

ZIPを解凍したら、[php.ini-production]を[php.ini]にリネームしてコピーしてください。

php.iniファイルをエディタで開いて、以下の設定を追加・変更します。

fastcgi.impersonate = 1
fastcgi.loggin

元記事を表示

大阪府のコロナ追跡システムを考えてみる3

大阪府のコロナ追跡システムの開発費が80万円以内、14日間で納めるシステム開発続き。
初めての方は1からご覧ください。

#詳細設計(内部設計)
DFD(データフロー図)とデータベース設計書を作成する。

DFD
20753BFF-5B9F-428B-BB2B-A30F5D51651D.jpeg
事業者情報ばっかり。。。

##登録画面設計
Htmlを用いて事業者ごとに登録画面を作成する。

##データベース設計

###事業者管理テーブル
|名前|カラム名|データ型|制約|
| :– | :– | :– | :– |
|事業者ID|Store_id|char|Primary,Not NULL|
|事業者名|Store_name|varchar|Not NULL|
|登録日|Reg_date|date

元記事を表示

CircleCIについて

#前提
本日学んだことを書いていきます。

#本題

#CI(継続的インテグレーション)
変更されたソースコードがGitHubなどのリポジトリに提出(プッシュ)されるたびに自動でテストを行うことで、変更後のソースコードをリポジトリのメインライン(masterブランチなど)に統合(gitで言うところのマージ)可能な状態にする仕組み

#CD(継続的デリバリー)
メインラインのソースコードが変更されるたびに、自動で本番環境などにデプロイする仕組み

#RefreshDatabase
TestCaseクラスを継承したクラスでRefreshDatabaseトレイトを使用すると、データベースをリセットする

なお、トレイトは継承と似たPHPの機能で、汎用性の高いメソッドなどをトレイトとしてまとめておき、他の複数のクラスで共通して使う、という使い方をする

#テストのメソッド名
Laravelでは、テストにPHPUnitというテストフレームワークを使用する
PHPUnitでは、テストのメソッド名の先頭にtestを付ける必要がある
ここではindexメソッドのテストであるとわかるよう、testInd

元記事を表示

[PHP] ereg() から preg_match() への変更でチョットした留意点

PHP7ではereg()が廃止となりpreg_match()を利用することになりました。
古いコードの書き換えをされている方もいると思います。

ereg()をpreg_match()に変更し
マッチングパターンをPOSIXからPCREに書き換えると各所で紹介されていますね。

ちょっと見落としがちかなと思うのは戻り値の違いです。
自分は望む結果が得られずに?となりましたので記事に残しておきます。

ereg()もpreg_match()もint型の戻り値を返しますが

“`
ereg()
マッチした場合にはマッチした文字列の長さを返し、
マッチしなかった場合 またはエラーとなった場合は FALSE を返します。
““

““
preg_match()
マッチした場合に 1 を返します。 マッチしなかった場合は 0、エラーが発生した場合は FALSE を返します。
““

という違いがあります。
マッチング結果を使用して何か処理を行う場合、結果に違いが生じるかもしれません。

““

元記事を表示

LaravelでUnitテストだけ実行する

結論、以下のようにしてtestスイートを指定してテストが実行できます。

“`terminal
php vender/bin/phpunit –testsuite Unit
“`

# 説明
プロジェクトが大きくなってくるとテストも増えてきて、テストを実行するときに部分的に実行したくなると思います。

LaravelだとテストはデフォルトでUnitとFeatureの2つのテストの種類がありますが、このうち高速なUnitテストだけをより高頻度で実行したすることができたら便利ですよね。

Laravelには、デフォルトでphpunit.xmlにテストの設定が書かれていてUnitテストとFeatureテストはそれぞれ別々のtestスイートとして設定されています。

“`xml:phpunit.xml


./tests/Unit

元記事を表示

Laravel でいつも最初から仕込むようなファイルたちはパッケージにしてしまおう

# はじめに
以前、[Laravel の Validation を正しく拡張する](https://qiita.com/moobay9/items/f1cdd3c8f995fdcf0963) という記事を書きましたが、こういったバリデーションの拡張などは最初から仕込みで動いていて欲しいわけです。
なので `composer` でインストール後、コマンドを叩けばある程度の設定が最初から入ってしまう状態にしたい、という欲求が湧いてきます。
これに答えてくれるのが[パッケージ化](https://readouble.com/laravel/5.8/ja/packages.html)です。
FuelPHP を使ってた頃は作り方が簡単だったんですが、Laravel のパッケージは定型があまりないので自由度が高い分、ちとやり方がめんどくさいですが整理のためにも記録として残しておきます。

Laravel におけるパッケージとは簡単に言えば vendor ディレクトリ以下にインストールされるファイル群たちの構成要素を自分で一つ増やす感じの配置になりますね。

## 開発の準備

元記事を表示

Laravelで複数のSQL文を実行するときはDB::unpreparedを使う

DBのdumpのような大量のSQLをLaravelから実行するときは`DB::unprepared()`という関数を使うと、実行することができます。

生のSQL文を実行するときは`DB::statement()`をよく使いますが、複数のSQL文には対応していません。

以下はファイルに入っている複数のSQL文を読み込んで一括で実行するサンプルコードです。

“`php
$sql = file_get_contents(database_path(‘dump.sql’));
DB::unprepared($sql);
“`

元記事を表示

PHPMailerによるメール送信

#なぜ今更
あるEC2から異なるリージョンのEC2で起動しているメールサーバを使ってメールを送りたかった。sendmailをインストールしてmailコマンドでやってみたら以下のようなエラーが出た。

“`diff
connect to mailhost.domain.com[3.136.146.20]:25: Connection timed out
to=, relay=none, delay=30, delays=0.02/0.03/30/0, dsn=4.4.1, status=deferred (connect to mailhost.domain.com[3.136.146.20]:25: Connection timed out) B8B79CA81C: to=, relay=none, delay=30, delays=0.02/0.03/30/0, dsn=4.4.1, status=deferred (connect to mailhost.domain.com[3.136.146.20]:25:

元記事を表示

AmazonLinux2にPHP7.4をインストールする

#### 利用できる拡張パッケージを確認する

“`
#amazon-linux-extras

42 php7.4 available [ =stable ]
“`

#### PHP7.4を有効にする
“`
#amazon-linux-extras enable php7.4
“`
#### 確認
“`
#amazon-linux-extras

42 php7.4=latest enabled [ =stable ]
“`
#### PHP7.4インストール
“`
# yum clean metadata
# yum install php
“`

他、利用したいphpパッケージを都度インストールします。

元記事を表示

スクレイピングいろいろ

ウェブスクレイピングの手法をいくつかご紹介致します。
GAS、VBA、PHP、Python、それぞれを使って、Yahoo!Japanの主要ニュースを取得します。
結論からいうと、GAS + Spreadsheetのほうが気軽に使えてイチオシです。

##GAS + Spreadsheet
###良い点
Googleアカウントさえあれば、一切の環境を用意する必要がなく、GASのトリガーで定期的に実行できます。
###悪い点
大規模の実行にはパフォーマンスの懸念があります。
セキュリティ上、重要なデータの扱いはちょっと厳しいです。

###コード
“`gas.js
function yahoo() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘yahoo’);
//書き込むシート名を指定
var getUrl = ‘https://www.yahoo.co.jp/’;
//ターゲットページを指定
var content = UrlFetchApp.fetch(getUrl).ge

元記事を表示

うんざりするほど詰まった PHP → json → PHP の多次元配列データの受け渡し

# CSVをアップロードして、データベースの情報を追記して表示し、DLできるようにする機能を作っていたのですが、追記する情報の中に、シングルクォート(‘)を含んでいる文字列(例 I’m Fine!)があるとDLできずにとてもとても詰まったので、ここにメモしておきます。

スクリーンショット 2020-05-21 20.31.26.png

## 環境
PC: MacBook Air
Browser: Chrome
Version: Laravel Framework 5.8.16

## 参考文献
[[PHP]preg_replaceで複数の文字列置換](https://ktyr.net/?p=999)
[【PHP】複数文字列の置換(str_replace)](https://qiita.com/kazu56/i

元記事を表示

Laravel 7 バッチ処理でusersテーブルのメールアドレスにメールを送る

# 目的

– Authで実装した認証機能で使用するusersテーブルに登録されているメールアドレスに順々にメールを送信するバッチの作成方法をまとめる

# 実施環境

– ハードウェア環境(下記の二つの環境で確認)

| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.3) |
| ハードウェア | MacBook Pro (16-inch ,2019) |
| プロセッサ | 2.6 GHz 6コアIntel Core i7 |
| メモリ | 16 GB 2667 MHz DDR4 |
| グラフィックス | AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB |

– ソフトウェア環境

| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いて導入 |
| MySQLバージョン | 8.0.

元記事を表示

PHP デバイスサイズにより埋め込みサイトのwidthをコントロール

Get browser width using php
https://stackoverflow.com/questions/23239157/get-browser-width-using-php
サイト参照デバイスをJavaScriptにて取得しphp側に返す。

“`