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

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

【PHP】Trying to get property ‘methods’ of non-object in 〜 のエラー解決方法

##はじめに
エラーログで`Trying to get property ‘methods’ of non-object in 〜`って出てきたことはありませんか?
存在しない変数のプロパティやnullの値を参照した時にこのエラー発生するもので、私たまに出てくるんですが大概の場合はすぐ解決できます。
今回は実務でこのエラーが出てきて(配属されてすぐなので人のコードの修正でした…)その修正でした。

##issetを用いてエラーを解決
`Trying to get property ‘methods’ of non-object in 〜`のエラーなのですが、存在しない変数のプロパティやnullの値を参照した時にこのエラー発生するの、issetやisnullなどの関数を使うとチェック出来ます。
今回はissetで解決したのですが、前の部分で実装していた`foreachループ`が効いていて後続の処理でエラーが起きていました。
なので今回の対象の部分に

“`php:
isset($hoge)
“`

と実装すると解決します。

##おわりに
ちゃんと実装できているかの確認は画面の動

元記事を表示

PHPのBoolean型で利用する、true, falseという単語は「定数」

# TRUE, FALSEとはなんなのか
Boolean型の変数において格納する true, false というキーワード。
TRUE, True, true のように様々に書くことができます。私は true, false 派です。
馴染み深いものですが、よくよく考えるとこれは何なんでしょうか。

> boolean リテラルを指定するには、定数 TRUE または FALSE を指定してください。 両方とも大文字小文字に依存しません。
https://www.php.net/manual/ja/language.types.boolean.php

というわけで、定数でした。

# 大文字小文字を気にせず使えるのは、定数だから

true, false は大文字小文字を気にせず使えます。

“`php
$flag = TRUE;
$flag = True;
$flag = true;
“`

これは、`define()` で定義された定数についてPHPが大文字小文字を区別しないことから、このような挙動になっていると推測されます。
参考:[Q. PHPは大文字小文字を区別するか?#定

元記事を表示

PHPの言語仕様 (命令文とセミコロン)

# 環境

“`
$ php7.2 –version
PHP 7.2.24-0ubuntu0.18.04.6 (cli)
“`
記事中のコードについては上記環境で確認を行っています

# 命令文の区切り文字としてセミコロン (;) を使用する

動作する

“`
PHP Parse error: syntax error, unexpected end of file in ~/aaa.php on line 3

# 閉じ括弧後のセミコロンは省略できる

動作する

“`

“`

動作

元記事を表示

LaravelでAPI単位で接続先DBを切り替える

## TL; DR
Laravelでは、接続先のDBのホストの[read/write接続](https://readouble.com/laravel/5.5/ja/database.html#read-and-write-connections)が自動的に設定されすが、OracleDatabaseへの接続を[yajra/OCI8](https://github.com/yajra/laravel-oci8)を用いると、このread/write接続が行えません。

そのため、[Middleware](https://readouble.com/laravel/5.7/ja/middleware.html)にて、エンドポイント単位で接続先のDBを切り替えます。

## 環境
– Windows 10
– PHP 7.2
– Laravel 5.5
– Oci8 5
– Oracle database

## Middleware作成
今回は、read接続先指定用とwrite接続先指定用のMiddlewareを作成します。
作成手順は、以下の要領です。

“`
/var/www/html

元記事を表示

yps並走記録 Task3  SQL:テーブル作成(復習)バッチ作成(復習)~php.ini設定~GitHubにファイルをアップロード~WordPress5.4.2セットアップ

早くも3週目になりました、yps
今回はなるべくリアルタイムで課題をやりながらログを取っていきたいと思います。

##まずはSQL周りの復習

###MySQLのエンコード設定を直します

エンコード設定をutf8mb4に戻す(mysql cliから日本語扱えるようにutf8にしてた)
`sudo vi /etc/my.cnf`

最終行に以下を追記

“`
[client]
default-character-set=utf8mb4
“`

編集を保存し、mysqlを再起動
`sudo systemctl restart mysql`

###練習で使うデータをダウンロード
`cd /tmp`
`sudo yum install wget`
`wget http://tech.pjin.jp/wp-content/uploads/2016/04/worldcup2014.zip`
`unzip http://worldcup2014.zip`

データの確認
`ls -la worldcup2014.sql`

###データベース作成
MySQLにログインして…
`mysql –

元記事を表示

PHPで書いたレガシーコードをテスト可能にする

## はじめに

久々にPHPの酷いコードにテストを足したのでまとめるよ。

## 患者さん事例

PHPって地の文ベタ書きで全然かけてしまう。
なので雑に書いたコードが適当なフォルダに突っ込まれていて、それをApatchが直接参照していたりするわけだ。
拡張されまくったり炎上したりで結果的にとんでもなく酷いコードが出来上がる。
そう、こんな感じに。

“`php:index.php
“;
if (/* なんかややこしい判定 */) {
echo “へんなとこでボディを返したり”;
if (/* if文の深淵で */){ exit; } // なんてされてたら目も当てられない
}
else{
header(“クレイジーなと

元記事を表示

PHPだけで簡単なおみくじを作ってみた

#概要
非常に簡単な機能です。

まず、初期画面に「おみくじを引く」ボタンがあり、
初期画面.png
ボタンを押すと、7つあるくじのうちの一つがランダムに引かれ、結果が表示されます。
結果画面.png
結果の詳細をクリックすると、くじに応じたコメントが表示されます。
詳細画面.pngPHP 7.3からPHP 7.2へのダウングレード

## はじめに

VPS上に構築しているシステムで以下のようなwarningが出た

“`
“continue” targeting switch is equivalent to “break”. Did you mean to use “continue 2”?
“`

sshでバージョン表示させるといつのまにかバージョンが上がっていた

“`
$ php -v
PHP 7.3.19 (cli) (built: Jun 9 2020 08:06:30) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.19, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.19, Copyright (c) 1999-2018, by Zend Technologies
“`

PHPドキュメントを見に行くとphp7.3ではcontinue文が非推奨との事
https://www.php.net/manual/ja/migr

元記事を表示

PHPでAWS CLIを用いてS3に画像をアップする

EC2環境上でPHPのexec関数とAWS CLIを用いてS3に画像をアップしようと思ったら、嵌ったので備忘録メモです。

まず、事前にEC2上で

“`
$ aws configure
“`
を叩いて、アクセスキー ID、シークレットアクセスキー、AWSリージョン、出力形式を入力した後に、PHPファイルに

“`php5
exec(‘aws s3 sync ./upload s3://{バケット名}/img –acl public-read –delete’, $out);
“`
を挿入し、実行してみましたが$outに結果が返らず、S3にもアップされませんでした。
そこで、PHPのファイル上に事前に次の形式でアクセスキー ID、シークレットアクセスキー、AWSリージョンを記述したあとにexec関数を記述すると動作しました。

“`php5

$region = ‘ap-northeast-1’;
$key = ‘****’;
$secret = ‘**********************’;
putenv(‘AWS_DEFAULT_REGION=’ . $re

元記事を表示

LaravelでRedisを操作する

# 前提条件
[eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)](https://qiita.com/toontoon/items/76fa7f8845b20776077c)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています

[LaravelでDIを使う](https://qiita.com/toontoon/items/ebf53e4053be6f663730)
本記事は上記で作成したフォルダとファイルを使用します

# PhpRedisのインストール
PhpRedisを介してRedisを操作します
下記リンクで環境構築した人はインストールされているはずです
[LAMP+Redis環境を超短手数で構築する](https://qiita.com/toontoon/items/0ade09a5fb3f70fd0c0d)
インストールしていない人は下記リンクに従ってインストールしてください
[phpredis インストール](https

元記事を表示

【PHP】CSVを作成し、ZIPに圧縮してダウンロード

#はじめに
前回の記事[【PHP】Excelで文字化けしないCSVファイル作成](https://qiita.com/Tommy0221/items/83478c0bb2b97b21a913)の続き?というより最終的にやりたかったことを備忘録として記事にします。

**非同期通信で、DBからテーブルごとのCSVを作成し、ZIPに圧縮してダウンロードさせる!!!**

ZIPに圧縮まではすんなりできたのですが(前回記事は多少躓きましたが…)、ダウンロードしたZIPファイルが開けない/解凍できない現象に悩まされました。

非同期をjQueryでやっていたんですが上手くいかず、XMLHttpRequestに変えたら成功しました。
何がダメだったんだろう。。。

#コード
ルーティングとかは省きます。

“`javascript:クライアント側 JS
var request = new XMLHttpRequest();
request.open(‘GET’, ‘/getZip’, true);
request.responseType = “blob”;
request.onload =

元記事を表示

[PHP]strtotime(“- 1 month”)はアカン[31日はテストが落ちる日]

# これはなに?

PHPでstrtotime(“- 1 month”)とかstrtotime(“+ 1 month”)とか書いちゃだめだよって話です。

# 今日は何の日でしょう?

今日は、弊社の自動テストが落ちた日です。
昨日は落ちなかったのに、いったいなぜ今日落ちてしまったのでしょう。

# なぜ落ちた?

それは今日が`31日`だからです。

テストコードに現在時刻を使ったコードがありました。
ただし、現在時刻から+1ヶ月したり-1ヶ月したりして、相対的な日付でテストをしているので、
普段は時刻が変わることによる問題は起こっていませんでした。

しかし、今日初めて問題が発覚しました。
現在時刻から前月の月を取得する計算が31日だけおかしかったのです。

## 前月の計算の仕方(NGケース)

“`php
strtotime(“- 1 month”)
“`

一見良さそうです。今から マイナス1ヶ月後の日付が取れそうです。

7/1なら6/1

7/20なら6/20

**7/31なら7/1**

“`
( ゚д゚) ・・・
 
(つд⊂)ゴシゴシ
 
(;゚д゚)

元記事を表示

【PHP Redis】Redisが動かない時

Redisの動作を確認しましょう

“`sh
$ sudo chmod +x /etc/init.d/redis
$ sudo service redis status
$ sudo service redis restart
“`

元記事を表示

PHP 「?:」 の正体を知ってすっきりした話

# 目的

– 先輩方が開発に携わったLaravelアプリのソースコードをみていたら自分の知らない処理が出てきて驚いた話をまとめる

# 初見のコード

– 自分が初めて見たコードを下記に記載する。

“`php
変数 = 比較対象A === 比較対象B ?文字列1:文字列2;
“`

# 簡単な解説

– 処理内容を下記に簡単に記載する。
1. 比較対象Aと比較対象Bを比較する。
1. データ型も含めて比較し、一致しているのかしていないのかを確認する。
1. 一致していた(true)の場合、文字列1が変数に格納される。
1. 一致していない(false)の場合、文字列2が変数に格納される。
– この`?`と`:`を用いた記載(`?:`)は条件演算子と呼ばれる物である。
– 下記に処理を記載する。

“`php
条件式 ?式1:式2;
“`
– 上記の様な処理の場合、条件式が真(true)の時に式1を実行し、偽(false)の時に式2を実行する。

# 具体例

– 下記の様なコードを実行した時の結

元記事を表示

elasticsearch-php で全件取得

elasticsearch-php で特定のindexから全件取得する方法です。

### 方法1
index だけを指定すると全件取得になるようです。
sort 設定をしたいので body に入れています。

“`php
use Elasticsearch\ClientBuilder;

class ElasticSearch
{
public function getAll()
{
$client = ClientBuilder::create()
->setHosts([ENV(‘ELASTICSEARCH_HOST’, ‘elasticsearch’) . ‘:’ . ENV(‘ELASTICSEARCH_PORT’, ‘9200’)])
->build();

$searchResults = $client->search([
‘index’ => ‘index_name’,
‘body’ => [

元記事を表示

【PhpStorm】ファイルのすべての関数にPHPDocを生成する

### コマンド

Alt + Insert でGenerate ウィンドウを開き、一番下のPHPDoc Blocksを選択
generate.PNG

PHPDocを生成したい関数を指定して、OKを押すと自動でPHPDocを生成してくれる

### 補足
Generate ウィンドウは他にgetter setterやコンストラクタも生成してくれるので便利

元記事を表示

PHP: CouchDB のデータを削除 (Delete)

“`php:couch_delete.php
#! /usr/bin/php

元記事を表示

PHP: CouchDB のデータを更新 (Update)

“`php:couch_update.php
#! /usr/bin/php

元記事を表示

PHP: CouchDB のデータを読む (Read)

“`php:couch_read.php
#! /usr/bin/php
‘application/json’));

// var_dump($request->s

元記事を表示

PHP: CouchDB のデータを作成 (Create)

“`php:couch_create.php
#! /usr/bin/php
‘application/json’);
$url_base = ‘http://localhost:5984/nagano’;

$result = Requests::delete($url_base);

$result = Requests

元記事を表示

OTHERカテゴリの最新記事