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

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

【PHP】Phan の “PhanUnreferencedUseNormal Possibly zero references to use statement for classlike/namespace” エラー時注意点

> Phan で静的コード解析すると「`PhanUnreferencedUseNormal Possibly zero references to use statement for classlike/namespace MyClass`」エラーが出る。Symfony の Component 利用時にも出る。

“`text:Phanのエラー
PhanUnreferencedUseNormal Possibly zero references to use statement for classlike/namespace MyClass (\MyVendor\MyPackage\MyNameSpace\MyClass)
“`

[「phan PhanUnreferencedUseNormal Possibly zero references to use statement for classlike/namespace」でググって](https://www.google.com/search?q=phan+PhanUnreferencedUseNormal+Possibly+

元記事を表示

PHP calコマンドっぽいカレンダーを1行で

とりあえず、直にcalコマンドを実行する方向は無しで頑張ってみました。

~~~php:cal.php
setDate($argv[2] ?? $d->format(‘Y’), $argv[1] ?? $d->format(‘m’), 1)->format(‘F Y’), 20, ‘ ‘, 2). “\nSu Mo Tu We Th Fr Sa\n”. preg_replace(‘/(.{1,21})/’, “$1\n”, str_repeat(‘ ‘, $d->format(‘w’)). sprintf(str_repeat(‘%2d ‘, count($r = range(1, $d->format(‘t’)))), …$r));
~~~

~~~plain
$ php cal.php
July 2020
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20

元記事を表示

PHPのtry ~ catchで、Fatalエラーをcatchしたい場合は、ExceptionでなくThrowableを利用する

# 環境
PHP 7.4.0 CLI

`Throwable`は、PHP5系では利用できないとのこと

# 発生した問題
稼働しているアプリのログにたまにFatalエラーが記録されている。
原因を探るため、Fatalエラーが発生した場合に`try~catch`でデバッグ用の処理を実行し、怪しい変数を`var_dump()`してエラーログに吐きたい。
`try~catch`でエラーハンドリングするようにしたが、以前同じFatalエラーが出力され、エラーハンドリングできていないようにみえる。

# 解決策
`\Exception`ではなく、`\Throwable`を利用する。
https://stackoverflow.com/questions/12928487/php-try-catch-and-fatal-error
https://www.php.net/manual/en/class.throwable.php

# エラーは基本的に握りつぶさず、修正すべき
Exception、Fatalエラーを全部補足できる`\Throwable`は便利だと感じましたが、

> Error は

元記事を表示

Laravel tinker データベースの接続できるか疎通確認する

“`
$ php artisan tinker
“`

## データベースに接続できるか確認する

簡単なのはSELECT文が通るか実行して確認します。」

“`shell-session
>>> DB::select(‘select 1’);
=> [
{#3046
+”1″: 1,
},
]
“`

このような結果が返れば、少なくともデータベースに接続できています。

## データベースに接続できない場合

データベース接続設定内容を確認します。

“`shell-session
$ php artisan tinker
>>> config(‘database.default’)
=> “mysql”

>>> config(‘database.connections.mysql’)
=> [
“driver” => “mysql”,
“url” => null,
“host” => “db”,
“port” => “3306”,
“database” => “laravel_lo

元記事を表示

CakePHP4 のエンティティでテーブルを使う

# 環境
– CentOS 6
– PHP 7.2
– CakePHP 4.1.0

# やりたかったこと
エンティティの中でテーブルオブジェクトを扱いたかっただけなんですけどね…。CakePHP3 系で使っていた TableRegistory が非推奨のようで、PhpStorm で打ち消し線を引かれてて (´・ω・`) となったので、ちゃんと推奨されたの使いたいな、と思っただけです。ほぼ自分用メモ。

# 結論

Cake\ORM\Locator\LocatorAwareTrait を使うそうです。

ちなみに、Docs には
>Deprecated:
>4.1.0 Use \Cake\ORM\Locator\LocatorAwareTrait::getTableLocator() or \Cake\Datasource\FactoryLocator::get(‘Table’) to get the table locator instance instead.

とありました。
どっちでもいいんですな。

今回は Cake\ORM\Locator\LocatorAwareTrait

元記事を表示

なぜ、admin/profile/createに辿り着けないのか

#なぜ、admin/profile/createに辿り着けないのか

#本題
こんにちは!今回はある問題にぶつかりました。。。

Laravel にて admin/profile/create にいきたいのだが、
なぜか、アクセスすると
404 not foundと表示されます。
Routing の記述ミスなのかとか、Action のミスなのか色々考えたのですが、
とりあえずは
web.php ファイルを
見てみるのが良いとネットに書いてありましたので見に行ってみました。

“`php
Route::get(‘/’, function () {
return view(‘welcome’);
});

Route::group([‘prefix’ => ‘admin’], function() {
Route::get(‘news/create’, ‘Admin\NewsController@add’)->middleware(‘auth’);
Route::get(‘admin/profile/create’, ‘Admin\NewsController@a

元記事を表示

PHP覚書

この記事はずっと下書きのまま放置していましたが、下書き整理のためそのまま投稿しています。

#設定確認
ちょっと確認するぐらいなら `php -i | grep` で。

#動作確認
ちょっと確認するぐらいなら `php -r “echo ‘hoge’, PHP_EOL”;` とかで。
`PHP_EOL` は環境に合わせた改行コードの定数。その他→[定義済みの定数](http://php.net/manual/ja/reserved.constants.php)
1行でやりづらいなら `php -a` で。ファイルの実行は `php hoge.php`。ファイルを作成する際は ` var_dump(in_array(1, [1, 2, 3]));
php shell code:1:
bool(true)

php > var_dump(

元記事を表示

laravel7でユーザー認証

##概要
laravel7でユーザー認証の実装のまとめ

##バージョン
– mac Catalina 10.15.5
– PHP: 7.4.6
– laravel: 7.20.0

##前提
– larevelでプロジェクトを立ち上げていること。
– データベースとの接続ができていること。

##実装手順

認証に必要なテーブルを作成する。

“`
$ php artisan migrate
“`

composerを使ってlarevel/uiをインストールする。

“`
$ composer require laravel/ui
“`

artisanコマンドでを実行する。

“`
$ php artisan ui vue –auth

Vue scaffolding installed successfully.
Please run “npm install && npm run dev” to compile your fresh scaffolding.
Authentication scaffolding generated successfully.
“`

元記事を表示

PHP で Twitter API OAuth 認証する【作成中】

とりあえず、TwitterOAuthというライブラリを使用して、そのまんまで認証できました。内容理解出来たら少しづつ追記します
[PHP で Twitter API OAuth 認証 「ログイン」](https://wepicks.net/twitter-restapi-login/)

TwitterOAuthについては下記
[TwitterOAuth](https://twitteroauth.com/)

下記の記事で理解を深めています
[Twitter REST APIの使い方](https://syncer.jp/Web/API/Twitter/REST_API/)

[OAuth 2.0 の仕組みと認証方法](https://murashun.jp/blog/20150920-01.html)

元記事を表示

【PHP】よく使う比較分、デバッグコード 等

最近、PHPのコードも書く事が増えてきて、
脳内ではやりたい事は決まってるんだけど、PHPだとどう書くんだったっけ?みたいなのを列挙。
見ればすぐに、思い出す系のやつです。

## 定数定義
`define(“SYSTEM_NAME”,”hogehogeシステム”);`

## 変数定義
`$i = 0;`
`$val = “moji”;`
`$flag = false;`
`$data = SYSTEM_NAME;`

## 数値比較
これは、他の言語と変わらない。
`if($i > 0){
}`

## 文字比較
`if(strcmp(“もじA”,”もじB”) == 0){
//一致した場合
}`

##文字連結
他の言語だと「+」とか「&」
`$buff = $buff.$key.”,”.$name.”end”;`

##文字分割
他の言語だと「split」とか
カンマごとに分割する例
`$params = explode(“,”, $row);`

##連想配列
`$result = array();
$result[“key”] = “value”;

元記事を表示

【Laravel】モデルを扱う -写真投稿-

# 内容
「写真を投稿する機能を作る」ということを題材にモデルの扱い方を説明してみます。
おしながきは以下の通りです。

– テーブルの作成
– モデルの作成
– コントローラーの作成

# 前提

– Laravel7
– マイグレーション済み(usersテーブル作成済み)
– public/storageからstorage/app/public/へシンボリックリンクを張っておき、picturesディレクトリを作っておく

# テーブルの作成
まずは、モデルで扱うテーブルをデータベースに用意します。

“`zsh
% php artisan make:migration create-pictures-table
“`

ファイル名からpicturesというテーブルを用意してくれますが、明示的に–tabelオプションで指定できます。

“`zsh
% php artisan make:migration create-pictures-table –table=pictures
“`

作成されたファイルを編集します。
今回はidとtimestamps以外に、外部キーのu

元記事を表示

WordPressのテーマエディタでハマった話

#経緯

WordPressでテーマエディタを使ってるとこんなエラーが出る事があると思う。
ng.png
>「致命的なエラーをチェックするためにサイトと通信できないため、PHP の変更は取り消されました。SFTP を使うなど、他の手段で PHP ファイルの変更をアップロードする必要があります。」

エラーは/wp-admin/includes/file.phpで発生していて、プラグインが悪い説や、テーマが悪い説などある。しかしプラグインを全部外しても、テーマを公式にしても解決しない。file.phpのエラーが出ている部分を**コメントアウトすると直る**という解決法が多いけど、何か違う気がする。httpだとエラーは出ないけど、httpsだとエラーが出る気がするから、ssl証明書が関係してる?
#原因
file.ph

元記事を表示

htmlのoptionを否定先読みで加工

今までなんとなく使ってた否定先読みが理解できた気がしたので整理

最近何故か、htmlのoptionを特定のvalue以外除去、という処理を依頼される
既にoptionがハードコードされた状態からの処理になるのでpreg_replaceで検討

例えば、以下のようなoptionについて、いくつかのパターンを見ていく

“`
$subject = <<

元記事を表示

MAMPのPHPで環境変数を利用する

【背景】公開するサーバー環境で.htaccessを利用するため、ローカル開発環境として利用しているMAMPでも使えるようにする。
【やること】公開する環境ではSETENVを使用したいのでMAMPでもこれを.htaccessに設定し、PHPで正しく値を取得できる環境を構築する

.htaccessを有効にする方法は下記を参照
[MAMP環境で.htaccessファイルを有効にする方法](https://qiita.com/musica_gatto/items/5dc8d8c8a57b261488c2)

【具体的に】
(1).htaccessを下記のように記述/MAMP/htdocs/に保存
設置場所は[MAMP環境で最低限必要な設定(Apache・PHP周り)](https://marycore.jp/prog/mamp/configuration-for-mamp/)を参考にしました

“`
SetEnv DB_USERNAME ‘testtest’
SetEnv DB_PASSWORD ‘cccccccc’
“`
(2).htaccessを有効にする
[MAMP環境

元記事を表示

Laravel クエリビルダでjoin句を使用する

# 目的

– クエリビルダを使ったテーブル結合の方法をまとめる

# 実施環境

– ハードウェア環境

| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |

– ソフトウェア環境

| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https://qiita.com/miriwo/items/adaaaeecae69

元記事を表示

自動で EC2 Autoscaling の起動設定をAttachするスクリプトを php で作った

# 背景

インスタンスの更新を行うたびに、手動で起動設定を作り直していた。

1. 最新の EC2 から AMI を作る
2. AMI から 起動設定を作る
3. Autoscaling Group に Attach
4. 不要になった起動設定を削除
5. 不要になった AMI を削除

毎回この単純作業。
地味に時間がかかるのと、一つミスすると、スケールアウト時にちゃんと動かないとかトラブルになる。(開発環境でちょっとトラブルになりかけた)

ミスになりそうな単純作業は自動化しちゃえと。

# なぜ PHP で書いた?

10年ぐらい慣れ親しんだ言語なので! それだけ。

# 前提

– php 7.0 以上がローカルで動くこと
– aws-cli インストール済み
– jq コマンドインストール済み
– 東京リージョンで使う前提

# そのソースコードを公開

[gist](https://gist.github.com/oz-urabe/208289a6de7f76ccf7c3709b5b83e760) に置いてます

“`
$ git clone https://gist.

元記事を表示

phpにおけるオブジェクト指向まとめ

#はじめに
この記事はphpにおけるオブジェクト指向を簡単にまとめたものです。
オブジェクト指向ってなんぞや?
phpで開発を行っているがメソッドとかクラスとはよう分らんって人向けの記事で、新卒2年目のペーペーエンジニアが書いています。

#そもそもオブジェクト指向って?

>オブジェクト指向とは、コンピュータプログラムの設計や実装についての考え方の一つで、互いに密接に関連するデータと手続き(処理手順)をオブジェクト(object)と呼ばれる一つのまとまりとして定義し、様々なオブジェクトを組み合わせて関連性や相互作用を記述していくことによりシステム全体を構築していく手法。

上記説明で分からない場合は、
「各処理を分割、共通化し管理する。そして複数の処理を組み合わせてシステムを構築しよう」
と考えてください。たぶん合ってます。たぶん。。

念のため上記をphpで説明するとこんな感じ。

まずはオブジェクト指向ではない書き方。

“`

元記事を表示

【PHP】独習PHP 復習

書籍のアウトプットとして

#大文字小文字を区別しない
“`php5
PRINT ‘hello’;
pRint ‘hello’;
“`
この2つは問題なく動作する。

そういえば区別しないんだっけ、という感じ。
#演算子(オペレータ)と被演算子(オペランド)

“`
┌────┬───┬─被演算子(オペランド)
$x = 5 + 4
└───┴演算子(オペレータ)
“`
#値による代入と参照による代入
##変数の正体
値を格納するのはメモリの役割
メモリには場所を示すアドレスが振られている。
そのアドレスをいちいち入力するのはタイプミスの元となるから人がわかりやすいように名前をつけておく─────────これが変数の正体
##値による代入
`=`を使うのは基本的に値による代入
これはメモリ上の値を別のメモリにコピーすること
##参照による代入
メモリ上のアドレスそのものを引き渡す代入
元の変数と代入した変数は同じアドレスを見ている。
どちらかを変更したら、もう片方にも影響する。
参照による代入は`=&`を使う
複合代入演算子`&=

元記事を表示

レンタルサーバーでSETENVを設定しPHPで利用する【作成中】

レンタルサーバー上の.htaccess にが記述されている。意味は下記参照。
[MIMEタイプの追加(AddType)](https://www.adminweb.jp/apache/docroot/index4.html)
SETENVとは直接関連しないのでこのあとにSETENVを記述する

記述のしかたは下記を参考に実施する
[PHP .htaccess内に追加(SetEnv)した環境変数で開発環境/本番環境など動作環境を切り替える方法](https://analyzegear.co.jp/blog/464)

あんまり関係なさそうだが一応参考記事
[Apache の環境変数](https://key2.jp/manual/ja/env.html)

元記事を表示

Laminas 環境設定メモ

## Laminas
zendが新しくなったらしいので
早く日本語訳の本出てください。

– mac
– VirtualBox
– centos8
– Laminas

つまずいた所メモ

↓とりあえずやる。
https://docs.laminas.dev/tutorials/getting-started/skeleton-application/

なんか、500になる。
ネットワーク設定が悪いのかなっと思い、
.httpd.confと.htaccessをいじる。
(httpd.confでdocumentrootとか分けられたんだね・・・分け方が分からずVirtualBoxで分けてた)

できない。_:(´ཀ`」 ∠):

public/index.phpの上のほーにexit入れてみる。
表示できた。(°▽°)

もももも、もしかして、コードがおかしい?
public/index.phpにexitをひたすら入れる。

RuntimeExceptionのとこでエラー
分からん。

プロジェクトを作り直してみた。なんかエラー出ててた。
RuntimeException.phpが

元記事を表示

OTHERカテゴリの最新記事