PHP関連のことを調べてみた

PHP関連のことを調べてみた
目次

【Docker × PHP5.4】DockerでPHP環境を作った時のつまずき

## 概要
担当案件の中で、PHP5.4が動く環境を準備する必要があり、準備を進める中でいくつかエラーが発生しました。
調査の中で参考にさせていただいた内容もあったので、今後のためにメモとして記録しておきます。

## 参考記事
– [PHP 5.4環境をDockerで作る](https://qiita.com/blue32a/items/f47839f83317b54cea4d)
– [Dockerでapt-get upgrade](https://qiita.com/sowd0726/items/690e3bc94cada24f2a09)
– [docker build時にapt-get updateでPackages Not Found](https://qiita.com/teriyakisan/items/e5cf7d5228dc02500562)

調査の際、上記のサイトに大変お世話になりました。
ありがとうございます!

## Dockerfile

今回はdocker-compose.ymlを使用し、指定したフォルダ内に配置しているDockerfileをビルドしていま

元記事を表示

Excelの列番号(記号?)を取得する

PhpSpreadsheetを本格的に扱うようになって知ったTIPS。

データをシートに書き込むとき、まとめて書き込む(読み込むときも)なら`$worksheet -> fromArray($data, NULL, ‘A1’);`みたいにできるけど、n列、n+16列、n+32列…というセルの値にアクセスしたいときに「n+128列の列番号(記号)って何!?」となる。

このとき便利なのが
“`php
$cols = [];
$a = ‘A’;
for ($i = 1; $i <= 1000; $i++) { $cols[] = $a; $a++; } echo $cols[940]; //AJD ``` というように文字列をインクリメントすると、勝手に`A, B, C, ... Z, AA, AB, ... AY, AZ, BA, BB, ... ZY, ZZ, AAA, AAB, ...`という文字列を生成してくれる仕様。 逆に列記号からn列目を引きたいときは ```php $cols_r = array_flip($cols); echo $cols_r['A

元記事を表示

PHPの環境変数管理術 – phpdotenv

PHPで環境変数についてどのように管理していますか?
「環境変数を扱うならこれ!」っていうライブラリがありますのでご紹介します。

## 環境変数って?
アプリケーションが異なる環境(開発、テスト、本番など)で動作する際に、設定を柔軟に変更できるような仕組みです。
こういった設定はGit管理をする必要がないですよね。これにより、セキュリティが向上し、異なる環境でのアプリケーションの設定変更が容易になります。

例えば、環境ごとに接続するDatabaseの情報が異なることって結構多いですよね。
そんな時に、**PHP dotenv** がいい感じに管理してくれます。

## phpdotenvについて
簡単に…
**PHP dotenv**は、プロジェクトで環境変数を扱うためのライブラリです。
“.env“ファイルから環境変数をアプリケーションに読み込む機能を提供します。

https://github.com/vlucas/phpdotenv

## 使い方
### 1. インストール
“`bash
composer require vlucas/phpdotenv
“`

元記事を表示

$_ENV、$_COOKIE

## はじめに

ENVやCOOKIEについて整理する

## $_ENV

サーバー側で設定されている環境変数を取得する。

## $_COOKIE

クッキーを取得する。

クッキーを保存するのはsetcookie関数の役割。

“`php
setcookie(string $name, [string $value [, int $expires = =0 [, string $path
[, string $domain [, bool $secure = false [, bool $httponly = false]]]]]]): bool
“`

$name
クッキーの名前。

$value
クッキーの値。この値がクライアントのコンピュータに保存される。

$expires_or_options
クッキーの有効期限。

$oath
クッキーが有効なパス

$domain
クッキーが有効なドメイン

$secure
暗号化通信の環境でのみクッキーを送信する。

$httponly
HTTP経由でのみアクセスできるようにする設定。JS経由ではアクセスできなくなる。
XS

元記事を表示

RHEL9系でphp-memcachedが入らない

## 事象
RHEL9でphpのmemcachedモジュールを有効化しようとインストールを試みるも、上手くいかない。
依存解決でlibmemcachedというパッケージが必要だが、リポジトリ上に無い様子。

## 原因
RHEL9ではlibmemcachedがデフォルトで有効なリポジトリに存在せず、`CodeReady Linux Builder`というリポジトリを有効化しないといけないようだ。
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/9/html/package_manifest/codereadylinuxbuilder-repository

## 対応
リポジトリを有効化
“`
dnf config-manager –set-enabled codeready-builder-for-rhel-9-rhui-rpms
“`
確認
“`
dnf repolist
repo id repo

元記事を表示

PHPUnit 11 でアノテーションからアトリビュート (Attribute) に移行するメモ

2024年02月に [PHPUnit11](https://phpunit.de/announcements/phpunit-11.html) がリリースされました。

休日に何気なく自分のリポジトリの PHPUnit を 11 にバージョンアップしてみたら全てのテストが動作しなくなり、調べてみたら PHPUnit 11 では PHPDoc のアノテーションは非推奨で、次のバージョンでは利用できなくなるのでアトリビュート (Attribute) を使うことが推奨されている模様。

“`bash
Metadata found in doc-comment for method Tests\XxxxTest::xxxxxx().
Metadata in doc-comments is deprecated and will no longer be supported in PHPUnit 12.
Update your test code to use attributes instead.
“`

多分非推奨を無視するオプションとかがあるんでしょうけど、どうせ次のバージョンでア

元記事を表示

WSL2 Docker Laravel環境でPhpSpreadsheetを使うまでのメモ

# はじめに
WEBエンジニア2年目の初心者です。
仕事でlaravel内でPhpSpreadsheetを使うためにインストールしようとしたらエラーが出てインストールできない・・・
Dockerも使った経験が浅いので、いろいろ調べたため、自分用のメモ兼困っている人の手助けになれば幸いです。

# 1.Phpspreadsheetのインストールを試みる

以下のコマンドを打ってみると見事にエラーが出てさっそく困った

“`
composer require phpoffice/phpspreadsheet
“`
↓エラー内容
“`
Package phpoffice/phpspreadsheet has requirements incompatible with your PHP version, PHP extensions and Composer version:
– phpoffice/phpspreadsheet 2.0.0 requires ext-gd * but it is not present.

元記事を表示

$_SERVER

## はじめに

$_SERVERについて整理する。

### $_SERVER

リクエストヘッダー、またはサーバー固有の変数情報

### リクエストヘッダーを取得する

ヘッダー情報とサーバー変数とを区別するために、生のヘッダー名を次の規則で整形したものを格納する。

・ハイフン(-)はアンダースコア(_)に変換
・接頭辞として「HTTP」を付加

例えば、User-Agentヘッダーを取得するには、$_SERVER[‘HTTP_USER_AGENT’]のように記述する。

### レスポンスヘッダーを設定する

header関数を使うことでレスポンスヘッダーを設定できる。
ヘッダーを出力するのでheader関数の前に何か出力があった場合はエラーとなる。

“`php
header(string, $header [, bool $replace = true [, int $response_code]]) : void

$header :ヘッダー文字列
$replace :同名のヘッダーが出力済みである場合に置き換えるか
$response_code :HTTP応答ステ

元記事を表示

laravel breezeでマルチログインのタスク管理ツールを作る②_ユーザー一覧とタスク一覧、残タスク数一覧の作成

# 環境
laravel10

# これまで
[laravel breezeでマルチログインのタスク管理ツールを作る⓪_laravel Sailでdocker立上げ ※Windows版](https://qiita.com/forever—searcher/items/1321590cb6af4c4383d9)
[laravel breezeでマルチログインのタスク管理ツールを作る①_下準備(seederでダミーデータ作成まで)](
https://qiita.com/forever—searcher/items/34ef1827314c1756f9d0)

# 学びたいこと
– laravel breezeでの表示画面(view)の増やし方

# この章のゴール
ユーザー一覧
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1563301/91658759-2fc4-55b3-60dd-79c84155f387.png)
タスク一覧
![image.png](https://q

元記事を表示

【docker】mysqli_connect()に失敗しAccess deniedした時の対処

docker環境下でphpからtableを作成しようと、mysqliを使おうとしたら手こずった備忘録。

環境
・Macbook air 2020 M1
・Docker v25.0.2
・php v8.3.6
・Mysql v8.3
 

1.Call to undefined function mysqli_connect()はmysqliのインストールで解決

“`% docker-compose exec app php data/dbcreate.php
Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /var/www/html/data/dbcreate.php:15
“`

mysqli_connectが機能していないと。
なんと、php7.0以降はmysqliが入ってないので、mysqliをDLする必要がある。

phpのモジュールインストール状況を見ると
“`
root@465201bc8bff:/var/www/html# php -m | g

元記事を表示

Centos7でZabbixを建てる

# はじめに
現場に行くとなんだかんだ触るzabbixを作ってみようかと思った。
断っておくがこれは商用を想定したものではない。
あくまでZabbixの画面を比較的簡単に目にするためのもの。

# 前提
iptables,selinux停止済みのCentOS7サーバが作ってある前提。

# 前提リポジトリのインストール
今回インストールするzabbixは時代背景を鑑みて4.2を入れる予定。
zabbix4系列はphp5.4以上が必要だがremiリポジトリで簡単に7.2が手に入る。
なので今回はphp7.2を使う。
(別のバージョンでもいい)
そして一緒にepelリポジトリもインストールしておく。

“`ruby:前提リポジトリのインストール
yum -y install epel-release
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
rpm –import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
“`

# php7.2インスト

元記事を表示

Laravel Auditingのログがクエリビルダのイベントでは記録されない

# 概要
業務でLaravel Auditingを使用しており、監視対象のカラムが変更された際にレコードがInsertされない事象に対応したときの備忘録です。
間違いがあればご指摘をいただけると嬉しいです!

# Laravel Auditingとは
Laravel Auditingとは、DBにおいてレコードに変更が行われた際、自動でログを記録してくれるパッケージのこと。
どのカラムが誰によってどんな風に変更されたか監視することができます。
(問い合わせサポート業務とかであると助かるかも…)

# クエリビルダを使用した場合はテーブルにレコードが入らない
以下のドキュメントにもあるようにクエリビルダによるDBの更新は記録されません。
EloquentでModelを使って変更してあげる必要があります。
https://laravel-auditing.com/guide/community/troubleshooting.html
https://laravel-auditing.com/guide/community/why-laravel-auditing.html

# Eloqu

元記事を表示

$_POST、$_GET

## はじめに

スーパーグローバル変数について整理する。

### $_POST

POST形式のHTMLフォームから渡された情報

ユーザーから入力された値や外部サービスから取得した値を表示する場合には、HTMLエスケープが必要となる。
エスケープ処理を正しく行わないとXSSの脆弱性の原因になる。

“`php:Encode.php
function e(string $str, string $charset = ‘UTF-8’): string
{
return htmlspecialchars($str, ENT_QUOTES | ENT_HTML5, $charset, false);
}
“`

“`php:post.php





ポストデータ


こんにちは、 さん!

元記事を表示

PHPでファイルを操作する際にファイルの権限によって書き込み・読み取りができなることがある件

# 環境
– CentOS Linux release 7.9.2009(Core)
– Apache 2.4.6
– PHP 7.1.33
# 起こったこと
PHPでWebスクレイピング的なプログラムをWindowsからCentOSに転送してCentOS側で実行したとき、色々なセーブデータをファイルに保存するはずが保存されてませんでした。
自分はurlencode、urldecode関数が混沌としていたためそこらへんでエラーが起こっていたと思っていました。
# 原因
自分はWindowsでscpでCentOSに転送してからCentOSでまたドキュメントルートに転送するスクリプトを実行していたので無駄だったため、CentOSからWindowsにscpして、というスクリプトでやっていました。
その時のスクリプトはこちら。モザイクは[]で囲っています。
“`sh:apply.sh
echo -n “Host Address: ”
read hostaddr

hostip=”[ユーザー名]@192.168.0.$hostaddr”
hostdir=”:C:[Windows側のドキュメント

元記事を表示

(JSPsych不要)生PHPと生JavaScriptで書く心理実験刺激入門

# JSPsych?そんなもの知りません(でした)

生PHPと生JavaScriptを習得した方にとっては、ライブラリに頼らない方が早く心理実験刺激を作成できるのではないでしょうか?
また、JSPsychを使ってみたものの、痒いところに手が届かないと感じてた方もいらっしゃるかと思います。

そんな人のために、生PHPと生JavaScriptで作成した心理実験刺激の例を作成しました。
自由にご活用ください。

取り上げているのは、映像刺激に対する評価実験です。
後輩ちゃんが不要なファイルをあげたりあげなかったりしていますが、お気になさらず。

https://github.com/Hoboki/russell-evaluation

PHP7系が入っていれば動作しますが、今回は簡単にMacOSでのDockerを用いた環境構築について説明します。

1. Docker Desktopのインストール
https://docs.docker.com/get-docker/

1. コードの引用、コンテナ立ち上げ
Terminalで以下を実行
“`bash
c

元記事を表示

【docker】phpdotenvで.envが読み込めないのでディレクトリを変えた

目的
・passとか機密情報を.envファイルから読み込めるようにしたい。

環境
・Macbook air M1 2020 / sonoha 14.2.1
・Docker
・php:8

phpdotenvはcomposerでインストールするので
まずdocker hub公式からcomposerが使えるようにすべくDockerfileに下記を追記。
“`Dockerfile.
COPY –from=composer /usr/bin/composer /usr/bin/composer
“`

vlucas/phpdotenvをインストールするべく
“`
$ composer require vlucas/phpdotenv
“`

まずはphpdotenvが機能して.envの読み込みを確認する。
phpdotenvが機能して.envを読み込めるように

require __DIR__ . ‘/../vendor/autoload.php’;
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . ‘/..’);
$dotenv

元記事を表示

laravel breezeでマルチログインのタスク管理ツールを作る①_下準備(seederでダミーデータ作成まで)

# 前提
– dockerでのプロジェクトは作成済み
– laravel breezeはインストール済み
– laravel sailでのコンテナ立上げ済み

前の章で上記済み
https://qiita.com/forever—searcher/items/1321590cb6af4c4383d9

# やること
1. taskモデル、ファクトリー、テーブルの作成、
1. userと、userに紐づくtaskのダミーデータ作成

まで

# 手順
1. `./vender/bin/sail artisan make:model Task`:Taskモデルの作成
1. `./vender/bin/sail artisan make:migration create_tasks_table`:マイグレーションファイルの作成
1. `./vender/bin/sail artisan make:factory TaskFactory –model=Task`:Taskファクトリーの作成
1. userFactory.phpの編集:ダミーのパスワードだと入れないので、後でログインできる

元記事を表示

HTTPクライアントGuzzle

## はじめに

HTTPクライアントであるGuzzleについて整理する。

## HTTP通信の基本

指定したアドレスにアクセスして取得したファイルをテキスト表示する。

“`http_basic.php
require ‘../vendor/autoload.php’;

$cli = new GuzzleHttp\Client([
‘base_uri’ => ‘http://localhost:8000’,
]);

$res = $cli->request(‘GET’, ‘/sample.txt’);
print $res->getBody();
“`

### autoload.phpをインポートする

autoload.phpはライブラリを自動ロードするためのコード。
Composerでインストールしたライブラリを使う際はあらかじめautoload.phpをインポートしておく。

### GuzzleHttp\Clientオブジェクトを生成する

GuzzleHttp\ClientはGuzzleの中核とも言うべきクラス。
HTTP通信そのものを管理する。

元記事を表示

PHPSandboxで、laravelのmiddlewareの練習①_権限テーブル作成、ダミーデータでログインまで

# 内容
表題の通り。

# なぜ記事にした?
・laravelのmiddlewareを使った実装の練習をしたかった
・環境を作るのを省くため、phpsandboxでやりたかった
・ダミーデータでログインする方法が割と書いてない

# 参考
https://qiita.com/shunpeister/items/5ff1d71aedaf86712371
こちらの記事を、phpsandboxで実践します

# 前提知識

[phpsandboxのbash、sqliteの操作](https://qiita.com/forever—searcher/items/99abed6962299193ba55)

# 本編、手順
以下、手順です

## プロジェクトとrolesテーブルの作成

1. テンプレートから、laravel10 breeze(blade)のプロジェクト?(notebook)を作成
1. `php artisan make:migration create_roles_table`を実行:マイグレーション作成。ユーザーマイグレーションファイルは既にあるのがいいところ
1.

元記事を表示

多言語翻訳プラグインGTranslateの導入方法

# 初めに
業務でWordpressを使用することになり、最近本格的に学習を始めました。ショートコードの導入や、自作テーマを使用する際のウィジェットの追加など、地味に苦戦したので忘備録にします。

## 注意書き
初学者のため、誤りや拙い点があるかと思います。明らかな間違いがあるときにはコメントをいただけると嬉しいです。

## GTranslateとは?
Livecastが開発するWordpressで使用できる無料プラグインのこと。簡単操作で日本語を英語や中国語、韓国語に変換できる。

Translate WordPress with GTranslate

## 導入方法

### ブロックテーマでの導入方法
既存テーマを使用する場合は、外観→ウィジェットから簡単に追加できます。

1. Translate WordPress with GTranslateをプラグインの追加画面から検索し、インストール、有効化する
1. 設定を選択し、設定したい言語の種類やスタイリングを指定する
![スクリーンショット 2024-04-15 15.30.21.png](http

元記事を表示

OTHERカテゴリの最新記事