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

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

PHPバージョンを切り替える

phpのバージョンを更新したくて、homebrewでphpをインストールして、今まで使っていた7.3から8に切り替える。

シンボリックリンクの張り替え
※ここら辺は色々やったのでどのコマンドで反映されたかわからない

“`bash
$ brew unlink php@7.3 && brew link –force php
$ brew unlink php && brew link php
“`

.bash_profileからphp@7.3のパスを削除(コメントアウト)

“`bash
# export PATH=”/usr/local/opt/php@7.3/bin:$PATH”
# export PATH=”/usr/local/opt/php@7.3/sbin:$PATH”
“`

.bash_profileを反映

“`bash
$ source ~/.bash_profile
“`

まだパスにphp@7.3が残っているので、最終的に使ってるターミナル(iterm)を再起動する。

“`bash
$ php -v
PHP 8.0.0 (cli) (buil

元記事を表示

PHPのmemory_limitのデフォルト値を変更する

次のようなメモリ制限のエラーが出た時の対処法。デフォルトでは128Mになっているので、-1(上限なし)に変更する。

“`terminal
PHP Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 4096 bytes)
“`

現在のメモリ上限を確認する。

“`terminal
$ php -r “echo ini_get(‘memory_limit’).PHP_EOL;”

128M
“`

php.iniファイルの場所を確認する。

“`terminal
$ php –ini
Configuration File (php.ini) Path: /usr/local/etc/php/7.3
Loaded Configuration File: /usr/local/etc/php/7.3/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.3/conf.d
Addit

元記事を表示

DrushコマンドでDrupalをインストールして起動する

## ComposerでDrupalをダウンロード

composerでdrupalプロジェクトを作成し、プロジェクトルートに移動します。

“`terminal
$ composer create-project drupal/recommended-project drupal-demo
$ cd drupal-demo
“`

デフォルトではDrushは入っていないので、別途composerでダウンロードします。

“`terminal
$ composer require drush/drush
“`

## インストール

DrushでDrupalのインストールを行います。

例では `$ ./vendor/bin/drush` で作成したDrupalプロジェクトのDrushを指定していますが、Drush Launcherをインストールしている方は `$ drush` コマンドで実行できます。

“`terminal
$ ./vendor/bin/drush site:install standard –db-url=sqlite://sites/defaul

元記事を表示

ざっくりのWEBの知識メモ

ざっくりとWEBの知識を書いて行きます・

1. hrefでパスは指定するときは**絶対パス**を使うべき!!
>>URLはサーバーにあげたときにドメイン、ポートが変わる、外部サイトへのアクセスには使える
>>相対パスはhtmlファイルの場所変更に対応できない

元記事を表示

Twitterのトレンドを取得し、記事を自動生成するアプリケーションを作ってみた。

## 概要
ツイッターを見ていてもその時々のトレンドは自分で見に行かないと分からないですよね。
自分が見ているフィードにツイートが流れてきて、そこに貼ってあるリンク先の記事を読めば今のトレンドの内容が分かるとちょっと楽しいかなと思って、ツイッターの現在のトレンドを取得して、自動的に記事が投稿されるメディアを個人開発で作成してみました。(現在はサーバー閉じています。)
こちらで生成される記事を見れば人気のツイートやトレンドに関連するニュース記事へのリンクが集まっているので、トレンドの内容を正確に素早く知ることができます。

今回は作成したバッチの内容をざっくりと話していこうと思います。

## 処理の流れ
ブログ部分は一から実装するのが面倒だったため、ワードプレスを導入し、そこに今回phpで自作した記事作成バッチを配置して記事の自動生成を行いました。

バッチの処理の流れは以下のようになっています。

“`
①twitterAPIを利用して、現在の上位5件とトレンドワードを取得
②同じくTwitterAPIを経由して、上記のトレンドが含まれているツイートで特に人気の高い(いいね数の多い

元記事を表示

LaradockでLaravel開発環境構築

## はじめに
Laradockで Laravel Frameworkをインストール
– Composer、Git、Dockerのインストールについては扱っていません。

## プロジェクト作成
“`shell
composer create-project laravel/laravel ${プロジェクト名}
“`

上の過程を通じてLaravelをインストールします。

## Laradockインストール
“`shell
git clone https://github.com/laradock/laradock.git
“`

## envファイルをコピー
“`~/laradock
cp env-example .env
“`

.envファイルにはPORTやLaradock設定に関連するほとんどの内容があります。

## ngnixとmysqlを実行
“`shell
docker-compose up -d nginx mysql
“`

初めて実行した場合、イメージをインストールするため時間がかかります。

## コンテイナー確認

“`shell
dock

元記事を表示

Dockerを使ってLaravelの開発環境を構築する

# 環境
Windows 10
Docker version 20.10.7

# プロジェクトを作成
プロジェクト用ディレクトリを作成&移動

“`bash:wsl
mkdir laravel
cd laravel
“`

プロジェクト作成用のDockerfileを作成

“`bash:wsl
mkdir -p docker/composer
touch docker/composer/Dockerfile
“`

“`Dockerfile:Dockerfile
FROM php:7.4-fpm
WORKDIR /application
RUN apt-get update && apt-get install -y \
git \
zip \
unzip \
&& curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/composer
“`
イメージをビルド

“`

元記事を表示

【PHPUnit】@runInSeparateProcess付けるとテストが失敗する?

## はじめに

この記事は自分への戒めのために書きます。
結末は、**普段から出力されているWarningに慣れたらダメだよ。**です。

Warningであっても早期に解消するように心がけましょう。

## 学んだこと

– 個別のプロセスで起動したテストは、標準出力があると失敗することがある。
– Warningだからといって放置してはいけない。

## 環境

– PHP 7.2系
– CakePHP 3.5系
– PHPUnit 6.5系

## 何が起きた?

– `@runInSeparateProcess`をつけるとテストが失敗してしまう。。。
他の`@runTestsInSeparateProcesses`や`@runClassInSeparateProcess`でも同じ結果。。。
– コンソールに出力されるのは親プロセスの起動時にも出力されるものと全く同じWarning。。。

↓こんな感じの

“`
PHP Warning: PHP Startup: …
“`

今思えばこれが原因ではないか?っと気づきそうではあるのですが、

– よく出力されるメッ

元記事を表示

【Laravel】SQLの条件式をメソッドのように分ける(クエリスコープ)

# はじめに

PHP及びLaravelにて、DBから値を取得する際に複数のWHERE句を1つのメソッドのようにまとめる方法を以下に記載する。

# 結論

以下ルールに則ることでメソッドと同じように利用が可能。
* 先頭にscopeを付与する
* 呼び出す際にはscopeを除外する

“`PHP
/ **
* 20歳以上の男性の名前を取得する
*/
public function getAdultMaleName()
{
return $this->
select(‘userName’,)
->isAdultMale()
->get();
}

private function scopeIsAdultMale($query)
{
return $query
->where(‘age’, ‘>=’, 20)
->where(‘gender’, ‘=’, 1);
}

“`

元記事を表示

2021年版 InstagramグラフAPIを利用してインスタグラムの投稿を取得するための手順とPHPのサンプル

## 概要

WEBサイトにInstagramの投稿を表示するための手順。所要時間30分。

* Facebook
* Facebookページを作成する
* Facebookページの設定からInstagramをリンクする
* Instagramアカウントに「Instagramビジネスツールの追加」と「リンクの確認」をする
* FACEBOOK for Developers
* アプリを作成する
* アプリにInstagramグラフAPIを追加する
* アプリIDとシークレットの確認する
* ユーザーアクセストークンの取得をする
* PHPのサンプルプログラム

> ** NOTE **
> FacebookアカウントとInstagramアカウントは作成済みの前提
>

## Facebook

### Facebookページを作成する

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1765459/b778d8d7-d63b-6e22-8b6b-8624fce761a

元記事を表示

GKE環境でPHPを動かす時にxdebugの設定(remote_connect_back)でハマった話

# 事象

– GKE環境を構築
– PHP + Apacheのコンテナ(pod)を作成
– Serviceをポート転送(port forwarding)しての動作確認は正常に動く
– Ingressに設定したLB経由だと動かない(タイムアウトする)
– ログには特に何も出ない
– LBとPHPの間に、プロキシのservice(今回はnginx)を挟んだ場合は動く

# 原因

php.iniのxDebugの設定が原因でした。

具体的には

“`
xdebug.remote_connect_back=1
“`

これが原因でした。

https://qiita.com/castaneai/items/d5fdf577a348012ed8af#%E5%BF%9C%E7%94%A8%E7%B7%A8%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%82%92%E3%81%A4%E3%81%AA%E3%81%90%E3%81%AB%E3%81%AF

> 1 にするとPHPにアクセスした側の IP

元記事を表示

Sendgridでメールを一斉送信したかった

環境:Laravel8,sendgrid

sendgridとはクラウドメール配信サービスです。

今日はこのサービスを利用してメール配信をしたいと思いました。
そしたらめちゃくちゃ苦労したので備忘録として書きます。

試行錯誤した過程も書いてあるので結論だけみたい人は GuzzleでAPIをたたこう まで飛ばしてください。

###やりたいこと
メールを一斉に個別送信したい。
一斉に個別送信とは、宛先を個人にしたいが送信は一括でやりたいということです。

普通に一斉送信すると宛先を全員指定して受信側でも全員の宛先を見れてしまうので個別におくりたいです。

ユーザー登録からAPIキーの発行までは調べれば簡単に出来るので省略します。

##はじまり
sendgridではweb APIを利用することでメールを遅れるそうです。

公式ドキュメントを見てましょう。

https://sendgrid.kke.co.jp/docs/Tutorials/A_Transaction_Mail/send_transaction_mail.html

[上記URLより引用]

cURL
c

元記事を表示

PHP 自動販売機ロジック

Every Qiita #13
のんびり独学初学者の毎日投稿チャレンジ 13日目
今回は・・・
自動販売機ロジックを考えたときの備忘録です。

###処理内容
お釣りを貨幣毎に何枚必要かを計算し出力します。不足の場合不足金を出力します。

“`php5
$purchase = 10000; // 支払い金額
$product = 9000; // 購入金額
function calculation($purchase, $product){
$money = [10000,5000,1000,500,100,50,10,5,1];
$change = $purchase-$product;
$result = [];
if ($change < 0) { return $change *= -1; } foreach ($money as $value) { if($change <= 0){ $result[$value] = 0; }else{ $page = floor($change/$value);

元記事を表示

【Laravel】DBから取得したCollection型の空判定

# はじめに

PHP、Laravel初学者である私だが、他の方のコードをレビューする機会があった。
そこで、Collection型と配列で空のチェックが異なることを知ったため、ここに記載する。

# 結論

Collection型と配列の空を判定する方法は以下の通り。

### ■ Collectionの空チェック

“`PHP
$collection = collect([]);
$collection->isEmpty(); // true
“`

### ■ 配列の空チェック

“`PHP
$array = [];
empty($array); // true
“`

# 詳細

Collection型は、LaravelにあるObject型の一種であり、配列のラッパーである。例えば、DBから値を複数取得した結果(クエリビルダ等を用いた際)の型がCollectionである。また、Collection型にはメソッドが存在しており、今回は、Collectionが持っているメソッドを用いて空かどうかを判定している。

### ■ 備考

因みに、今回は`isEmpty()

元記事を表示

php validation class

“`php

value = $value;
$this->error = ”;
}

}

/**
*
*/
class ValidFluent
{

public $isValid = TRUE;
public $isGroupValid = TRUE;
public $validObjs; //array of validFluentObj
private $currentObj; //pointer to current validFluentObj , set by ->name()
//default error messages
private static $error_requir

元記事を表示

PHPで処理の進捗状況を表示し、処理終了時に自動でダウンロードする処理のサンプル

## 概要

時間のかかる処理(ファイル出力やバッチ処理など)の処理状況を随時送信し使用者のストレスを軽減する。また、デバッグが簡単。

## 処理概要

1. PHPでHTMLの<head>をブラウザに送信
1. ブラウザでHTMLの<head>に記述されたスクロール処理を永久ループ開始
1. PHPの処理状況をブラウザに随時送信
1. ブラウザ側で<body>内の行が増え自動的に最新状況へスクロール
1. PHPの出力が終了するとブラウザでDOMContentLoadedが呼ばれる
1. DOMContentLoaded内にてスクロール処理の停止(フラグ)
1. DOMContentLoaded内にてダウンロード用の<a>タグをクリック
1. ファイルのダウンロードリクエストを行う
1. ブラウザのファイル保存ダイアログが表示される

## サンプルプログラムのキャプチャ

元記事を表示

PHPunitを使用しテストを行う際のエラー

##課題
phpunitを使いテストを行う際に下記のエラーが発生。

/usr/bin/php declares an invalid value for PHP_VERSION.
This breaks fundamental functionality such as version_compare().
Please use a different PHP interpreter.

##考えたこと

エラー文にて

“`
invalid value for PHP_VERSION.
“`

PHPのバージョンが無効な値
→phpのバージョンが原因ではないかと推測。

phpのバージョンを確認

“`
php -v

WARNING: PHP is not recommended
PHP is included in macOS for compatibility with legacy software.
Future versions of macOS will not include PHP.
PHP 7.3.24-(to be removed i

元記事を表示

PHP ローカルスコープ内で変数名を使い回すのはなるべくやめようと先輩から教わった

# 目的

– 先輩から教わったことをメモ的にまとめる

# ご注意

– 本ソースは他のエンジニアの方が書いてくださったものです。
– ソースの設計思想はいくつか存在し、正解はいくつもあります。
– 本記事は筆者個人の意見であり、登場人物である先輩の考えも実際とは異なる可能性があります。
– 例として記載するソースは元のものからかなり修正をしております。

# 情報

– 下記の様なソースが記載されていた。

“`php
public function foo()
{
$adminUserInfos = $this->userService->getAllAdminUserInfo();
foreach($adminUserInfos as $adminUserInfo) {
$user_id = $adminUserInfo->id;
$user_name = $adminUserInfo->name;
$this->mailService->sendM

元記事を表示

TwitterAPI研究

##APIとは

APIとは、ソフトウェアやアプリケーションなどの一部を外部に向けて公開することにより、第三者が開発したソフトウェア機能を共有できるものです。

上記だとまだ難しいと思うので、下記サイトをご覧ください。APIとはなにかを例を交えて、イメージしやすいようにまとめてあり、とてもわかりやすいです。
__※参考__
https://wa3.i-3-i.info/word12428.html

##Twitter APIとは

ツイートやタイムラインの取得、リツイートやいいねといったTwitterサービスを、公式のウェブサイトを経由せずに直接利用できるサービスです。

例えば、ツイートやリツイート、タイムラインの取得などウェブサイトにログインしてから行うと思います。しかし、TwitterAPIを用いることで、ウェブサイトを経由しなくても、ツイートなどを取得することができます。

ここで「Twitterアプリを使っているからウェブサイトは経由しない」という方がほとんどだと思います。しかし、そのアプリこそがAPIの活用例の一つなのです。

##Twitter APIの機能

Twit

元記事を表示

PHPで連続アクセスの制限(同一のIPアドレスから等)総当り対策、F5アタック対策、DoS攻撃対策?

## 概要
* 同一の識別文字列(例:IPアドレス)から10秒間に10回あれば60秒アクセス制限をする。
* 同一の識別文字列(例:IPアドレス)から60秒間に30回あれば300秒アクセス制限をする。
* DoS攻撃対策、総当り対策、F5アタック対策としてコピペするだけで動作する。(はず。私の環境が環境がXAMPPなので?)
* 適切な関数名を募集しています。

> ** NOTE **
> DoS攻撃などを防ぐには、denyhostsやfail2banなどのミドルウェアやApacheとNginx等WEBサーバーでアクセス制限をしましょう。
> 本記事はミドルウェアレベルで設定ができない場合のアプリケーションレベルでの制限を目的としています。
>
> 同一の識別文字列という事で、同じログインユーザーを使用し別々の場所(IP)から同時に過度なアクセスがあった時に、ログインユーザーに一時的な利用制限をするなどを想定しています。
> …というとユーザーマスタに項目を持たせた方が適切ですよね?という話が出てくるかもしれませんが、その通りだと思います。ただ、ユーザーコードに限定しているわけでも

元記事を表示

OTHERカテゴリの最新記事