PHP関連のことを調べてみた2021年10月25日

PHP関連のことを調べてみた2021年10月25日
目次

file_get_contents(): SSL operation failed に対処した

APIで月次データを取得しているPHPプログラムがエラーを吐くようになりました。

“`:ログ
file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed {“exception”:”[object] (ErrorException(code: 0): file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed at /var/www/html/xxx.php:35)
“`

エラーは`file_get_contents()`でAPIを叩いている箇所で起こっています。

元記事を表示

備忘録~ラジオボタンで入力値を残すには~

###ラジオボタンで入力値を残すには
“`

>

“`
valueの後にcheckedを入れることによって初期状態でチェックをいれておくことができる。
それと三項演算子を組み合わせる。

・三項演算子
(比較条件)?’TRUEの場合に返す値’:’FALSEの場合に返す値’

“`
($review[‘status’] === ‘未読’)?’checked’:”
“`
入力された値が未読ならばchecked、そうでなければnull
↓          ↓           ↓
これで未読のラジオボタンにチェックを入れると、次遷移しても初期状態でチェックが入るようになる。
未読のラジオボタンにチェックがは

元記事を表示

PHP8をインストールする(ソースからビルドする)for RockyLinux8.4

##はじめに
PHPは、様々なライブラリがあり大変便利ですが、コンパイル時にはそのライブラリを含めてビルドする必要があります。
PHP8とよく使うであろうライブラリ含めたコンパイルの一式の作業メモです。
処理部分をまとめていますので、必要に応じてコピペすればほぼ無操作で、PHP8が稼働する環境が作れます。

##あらかじめApacheのインストールが必要です
Apacheのインストールに関しては以下を参考にしてあらかじめインストールが必要です。
[Apache2.4をインストールする(ソースからコンパイル) for RockeyLinux 8.4 (systemd対応)](http://qiita.com/shadowhat/items/163ee5fdd56c51100e9e)

##以下のライブラリの事前インストールが必要です。
コンパイルオプションを適宜変更していただければ構いませんが、投稿で以下のライブラリが事前にインストールされている前提になっています。
インストール手順はリンクを参考にしてください。
[OpenSSL1.0](http://qiita.com/shadowh

元記事を表示

【Laravel】PHP環境からWebAPI(Laravel)へPOSTする

## はじめに
PHP製のアプリケーションAからアプリケーションB(PHP7.3・Laravel6.3)のWebAPIに対してPOSTリクエストを送信することを想定します。
異なるアプリケーションからWebAPIを叩く方法を初めて実装したので、実施した内容を整理しようと思います。

## 環境
– PHP
– V 5.6
– V 7.3
– Laravel(6.4)

## クライアント側の実装
クライアント側(リクエスト送信側)ではPHP5.6を使用したアプリケーションです。
こちら側で、Laravel製のアプリケーション(PHP7.3 / Laravel6.4)のWebAPIを叩くメソッドを実装します。
今回、WebAPIを叩くために、PHPの標準機能である「curl」をしようします。

“`php:request.php
$base_url = ‘https://xxx.xxx.xxx.xxx’; // アプリケーションBのドメイン
$destination = ‘api/hoge’; // アプリケーションBのAPIのパ

元記事を表示

ワードプレス Jetpack パブリサイズ共有 SNS連携 デフォルトをオフに

#ワードプレス Jetpackプラグイン
##パブリサイズ共有
SNS(Facebook, Twitter)と連携して共有する機能
デフォルト値は、オン(共有)となっている。
このデフォルト値をオフにする方法。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2087247/5445ad91-05e7-a1ad-59fc-99f309603339.png)

次のフィルター関数を追加すれば、デフォルト値の変更が可能。

add_filter( ‘publicize_checkbox_default’, ‘__return_false’ );

テーマのfunctions.phpに追加したり、プラグイン化して追加することが可能ですが、今回は次のプラグインを使用してみた。

###Code Snippets

Code Snippets

元記事を表示

【Heroku】アカウントの登録〜デプロイまで

作成したウェブアプリを公開するため、Herokuにアップすることになったので手順を以下に記載します。

①アカウントの登録

https://signup.heroku.com/jp
から新規登録。画面に従って登録を進める。

②mysqlのアドオンを利用できるようにしたいのでクレジットカードも登録

Manage Account⇨ Billingへと進んでクレジットの登録

③Heroku CLIの登録

Get Started⇨PHPの順に進んで「チュートリアルを始める」をクリック
![スクリーンショット 2021-10-24 5.53.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661879/4ec64476-6cf1-c55e-34a8-9c6305c7b826.png)

Heroku CLIをインストーラーからダウンロードするか、以下コマンドラインから登録

“`heroku.bash
$ brew install heroku/brew/heroku

元記事を表示

【エラー解決】Trying to access array offset on value of type null

#はじめに#
 Laravelでちょっとハマったので一応備忘録として。

#Trying to access array offset on value of type null#
Laravelでview composerに値を渡そうとしたときにぶつかりました。

“`AppServiceProvider.php
view()->composer(‘*’, function($view){
$user = \Auth::user();
$post_model = new Post();
$post = $post_model->get_post($user[‘id’]);
$view->with(‘user’,$user)->with(‘post’,$post);
});
“`

我らがGoogle先生によると、
「null型の値で配列オフセットにアクセスしようとしています」
だそうです。
どうやらまだユーザー情報がない状態でget_postメソッドの引数に\$user[‘id’]を渡しているのが原因のようです。
それでは、あらかじめ配列

元記事を表示

自分の身の回りであったことを仲間に伝えたい人に向いています。

https://github.com/JFLABO/tsv/blob/main/djinjson.php

元記事を表示

これはこんな感じでメモするとJSONオブジェクトを生成できるシステム

https://github.com/JFLABO/tsv/blob/main/data/test.txt

元記事を表示

エックスサーバーの「メール転送(エイリアス)確認ツール」を作ってみました

## 制作のきっかけ
エックスサーバーのメール転送機能でメンバー同報メールを運用していますが、
このメールの転送先が誰だったかな?とわからなくなった時に、
わざわざエックスサーバーの管理ログインから確認するのが面倒であったため。
※そもそもその運用では利用者に簡単に使ってくださいとは開放できないですしね。
※エックスサーバーに転送メールメンバーを返信してくれるAPIなどは無いですよね?
・・・もしありますよ?ということでしたら是非お教えください。。
## エックスサーバーのメール転送設定はどこにあるか?
エックスサーバーへFTPで接続して眺めてみるのと、[エックスサーバー公式のCron設定](https://www.xserver.ne.jp/manual/man_program_cron.php)にサーバ上のローカル位置が記載されているので、それらを参考にしつつ、メール転送の設定は「.alias」ファイルに記載されることが分かりました。
“`/home/[エックスサーバID]/[エックスサーバFQDN]/mail/[メールアカウント]/.alias“`
## さっそく制作
テスト

元記事を表示

【初学者奮闘録】画像の保存/表示をする方法について(Laravel)

#はじめに
この記事は、独学開始から約3ヶ月の実務未経験者が作成したものです。
よって、スキルは非常に未熟なため、決して本記事の内容を鵜呑みにされないよう、ご注意ください。
(未熟な私が記事投稿を行なっている背景については、本文の最後にお伝えします。)

#本日の課題
自作のWebアプリ内で、【画像保存】と【画像表示】するための方法について、解説します。

###対象者
Laravelのインストールを完了している方
自作のアプリに、画像の保存/表示を実装したい方

###環境
PHP 8.0.11
Laravel Framework 8.64.0

###記事を読む前に頭に入れておいてほしいこと
【画像保存】は、DB内には保管せず、public(/storage)ディレクトリに保存していきます。
DBも使用いたしますが、それはあくまでも【パスを通すための文字列を保存する】ためです。
上記の内容を何となく頭に入れて、下記を読み進めてください。
(publicディレクトリは、appディレクトリやresourcesディレクトリ・routesディレクトリと同列に配置されています。)
(stor

元記事を表示

【Laravel】Redisのレプリケーション

## はじめに
Laravelで作ったアプリケーションについて、Webサーバ1台構成から、
負荷分散のためにロードバランサーを導入し、Webサーバ2台構成へ変更しました。

元々WebサーバのキャッシュクライアントでRedisを導入していたのですが、
Webサーバの増設に伴い、追加するWebサーバにもRedisを導入する必要が生じます。

また、Redisに格納されているキャッシュデータはWebサーバ毎に差分が出てはいけないため、
それぞれのWebサーバのRedis同士で同期が取れている必要があります。

今回は、元々あるWebサーバのRedisを新しく追加したWebサーバのRedisへレプリケーションする方法について
紹介します。

便宜上、元々のWebサーバをWeb1号機、追加するWebサーバをWeb2号機としています。
また、RedisのレプリケーションについてはWeb1号機をMaster、Web2号機をSlaveとするMaster-Slave構成にしています。

システム構成の変更は下記の図のようになります。

![20210916_1.png](https://qiita-i

元記事を表示

「WP Offload Media Lite」で開発時と本番時でドメインが異なると挙動がおかしくなる

## WP Offload Media Liteとは
WordPressの画像やビデオ、ドキュメント類をAmazon S3にアップロードして、Amazon CloudFrontなどで配信させることができるWordpressのプラグイン

WP Offload Media Lite for Amazon S3, DigitalOcean Spaces, and Google Cloud Storage

## 問題
ウェブサイトをリニューアルする際などに本番のドメインは使えないためサブドメインなどを作って、開発する要件があった。
開発環境のWordpressで画像つきの記事を登録し、本番環境に移行すると画像が表示されないという現象が起こった。

![スクリーンショット 2021-10-22 14.45.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542793/99f8d29e-b259-d6dd-ae03-35f151cc6138.png)

本来であれば、このプラグインを使用するとS3に画像がアップロードされ、画像のパスは下記のように出力さ

元記事を表示

AWS-MFA認証のアカウントでAws\S3\S3Clientを利用するには

MFA認証が必要なAWSアカウントに対してWEB用SDKのS3Clientでアクセスする方法です。
AWSリソース間でのアクセスはRoleでの権限設定が推奨されていますが、例えばローカル開発環境からテストでS3にアクセスするとき、AWS_SESSION_TOKENの設定が必要になります。

対策はaws_session_tokenを配列に指定してオブジェクトを生成するだけです。

“`php
$s3 = new S3Client([
‘aws_access_key’ => env(‘AWS_ACCESS_KEY’),
‘aws_secret_key’ => env(‘AWS_SECRET_ACCESS_KEY’),
‘aws_session_token’ => env(‘AWS_SESSION_TOKEN’),
‘region’ => env(‘AWS_DEFAULT_REGION’),
‘version’ => ‘2006-03-01’
]);
“`
session token

元記事を表示

Build your own PHP framework

![1619573470292.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1709868/ff70fa25-16b9-0166-dd9d-e79b5609a989.jpeg)
![1619573470292.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1709868/79bddbee-a242-d6ce-ce88-061a474420f4.jpeg)

Atom Framework: [https://github.com/cuongdinhngo/atom](https://github.com/cuongdinhngo/atom)

Ezycrazy Project is powered by Atom framework: [https://github.com/cuongdinhngo/ezycrazy](https://github.com/cuongdinhngo/ezycrazy)

# 1.F

元記事を表示

Execute SQL(1), which is created by SQL(2), which is created by script, with mysql command in that script.

改めてやめようと思った出来事でした。
とあるバッチ処理をメンテナンスしていて、もうやめてくれ、と思った事案です。

予め断っておくと、他にやりようがあるのはわかっています。
でも出会ってしまったんだもの。
あと説明のためにあえて他の手段を取ってないというのもあります。

要件としてはinformation_schemaを使って、SQLでSQLを作るというものです。
サンプルとしてWordPressのデータベースを使います。

賛否はあると思いますが、自分もこういうスクリプト書くことがあるので、責めることができません。
いい方法があれば、いいのですが。

順を追って説明します。

# スクリプトで作られた、SQLを作るSQLを、スクリプト内でCLI実行する

## 第1段階:SQLでSQLを作る

“`sql
SELECT
CONCAT(‘SELECT `’, COLUMN_NAME, ‘` AS \”, COLUMN_NAME, ‘\’ FROM \`wordpress\`;’) AS COLUMN_NAME
FROM
`information_schema`.`

元記事を表示

【Laravel】 キャッシュクライアントにRedisを使用する

## はじめに
Laravelで実装したアプリケーションでデータのキャッシュ化を取り入れるため、
Redisを採用しました。
キャッシュクライアントとしては、様々な選択肢(memcachedやMongoDBなどのNoSQL)がありますが、[公式](https://readouble.com/laravel/6.x/ja/redis.html)にも記載があり、導入がしやすそうだったので、Redisを採用しました。

## Redisについて
[AWS公式のRedisの説明](https://aws.amazon.com/jp/redis/)にもある通り、Redisはインメモリ上のkey-valueデータストアです。
メモリ内にデータを格納するため、RDBと比較し、高速にデータの読み書きをすることができるのが特徴です。
RDBよりもパフォーマンスに特化したデータストアをNoSQL呼びますが、Redisもその中に含まれます。

## 環境
– Laravel 6.5
– Redis 6.2.3

## Laravelへの導入
環境構築の方法については、[公式](https://rea

元記事を表示

Laravelのログレベルをカスタマイズする

### やりたいこと
**Laravelの標準で用意されているログレベルに、独自に作成したログレベルを追加したい**

Laravelで標準で使用可能なログライブラリについては公式サイトを参照。
https://readouble.com/laravel/8.x/ja/logging.html

ドキュメントを読めばわかりますが、Laravelでは以下の8つのログレベルが標準で用意されています。
**emergency、alert、critical、error、warning、notice、info、debug**
素直にこれら8つのログレベルをうまく使って開発すれば困ることはほぼないですが、まれにログレベルを独自で増やしたいとか、既存のログレベルを別の名前のログレベルに置き換えたといった要望が出る開発案件があります。
Laravelのログ出力は公式サイトを参考にすれば柔軟にカスタマイズできますが、ログレベルを増やしたり既存のログレベルを置き換える方法については載っていないので、その時の作業の備忘録です。

### 手順
1. MonologのLoggerを拡張したLoggerクラスを

元記事を表示

【DB移行】 Oracle→PostgreSQL移行によるカラムの型変更

## はじめに
PHP(Laravel)で実装したアプリケーションにおいて、OracleからPostgreSQLのデータベース移行案件に携わりました。
SQLの文法が異なるのは勿論ですが、データベースの移行時に思わぬところでカラムの型が変わってしまう箇所がありました。
ソースコードにできるだけ影響がないようにするために、PostgreSQLのカラムの型を適切に変更する必要があります。

## 環境
– Laravel 6.5
– Oracle 11g
– PostgreSQL 13.3

## char型のカラムをboolean型へ変更する
元々boolean型だったカラムが、移行によりchar型に変わってしまったケースです。
データが入っているテーブルでは、単純にデータ型を変えるだけではうまくcastができずにエラーが出てしまいます。
また、カラムによっては、default制約やnot null制約がついている場合もあり、そういったカラムについてはあらかじめ制約を外しておかないと、カラムのデータのキャスト時にエラーが発生します。

### 制約を外す
対象

元記事を表示

PHP strcmp関数のオレオレ補足

比較できるのはそのまま文字列に変換可能ものだけ。
オブジェクトとか配列を比較対象にすると怒られちゃいます(Fatal error)。
数値を比較対象にすると文字列にキャストしてから比較される。(String関数なので)
(なんかまだある気がする。。。)

####返り値
左辺が小さいと負数
同じだと0
左辺が大きいと整数

ようするに
返り値 = 左辺 – 右辺

使うとしたらこんな感じかなと(PHP8以上)

“`php:strcmp_sample.php
$a = 555555555;
$b = “55555555555555555555555555555555555555”;

$value = strcmp($a, $b);

if ($value !== 0) $value /= abs($value);

echo match ($value) {
-1 => ‘左辺がちっちゃいです。’,
0 => ‘ぴったんこ’,
1 => ‘左辺がおっきいです。’,
default => “なんかおかしいぞっ!!”
};
“`

[strcmp(PHPマニュアル)](ht

元記事を表示

OTHERカテゴリの最新記事