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

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

Guzzleでリクエスト先から返されたエラーメッセージをtruncateさせずに取得する

Guzzleでリクエスト先からエラーが返された際、そのメッセージがtruncateされてしまい、不都合な場合があります。今回は、このメッセージをtruncateされない状態で取得してみます。

“`
PHP Fatal error: Uncaught GuzzleHttp\Exception\ServerException: Server error: `POST https://hoge.local/upload` resulted in a `500 Internal Server Error` response:
{“error”:{“code”:500,”message”:”\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u62 (truncated…)
in /hoge/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:113
“`

## 対応方法

次のコードのように、

元記事を表示

PHP の RAII は幻想じゃなくなった

だいぶ前にこんな記事を書いていましたけど、

– [PHP の RAII なんて幻想](https://qiita.com/ngyuki/items/576d66110495d5f1d4ee)

どうやら PHP 7.4 では `zend.exception_ignore_args` なるオプションが増えたらしく幻想ではなくなったようです。

– https://3v4l.org/i0gXq

PHP 7.3 以前では `SplFileObject` のインスタンスが `bar` で発生した例外に掴まれて `main` まで飛んでいくので `foo` のスコープを抜けてもファイルは閉じられませんでした。

しかし PHP 7.4 で `zend.exception_ignore_args` を有効にしておけば例外によって関数の引数が掴まれることがないので、`bar` で発生した例外に `SplFileObject` のインスタンスが掴まれることはなく、`foo` のスコープを抜ければファイルは閉じられます。

以前社内で、例外がログられるときにスタックトレースの引数にセンシティブな情報

元記事を表示

LaravelでスクレイピングしたデータをSeederに逆生成してみた話

# やりたい事
– 某サイトからスクレイピングしてきたデータをDBに保存。
※某サイトからは許可を得ている。
– ローカルの開発環境でもある程度、テストデータとして、Seederは用意しておきたい。
– PHPUnitを実行する時にテストデータを作っておきたい。

# 導入方法
スクリーンショット 2019-12-24 0.19.32.png

## 1.fabpot/goutteをインストール
“`
$ composer require fabpot/goutte
“`
## 2.スクレイピングするバッチを作成
“`php

元記事を表示

PHPカンファレンス中央ヨーロッパ2019が中止になっていた

PHPのカンファレンスについて、大きなものは[PHP公式に](https://www.php.net/conferences/index.php)掲載されます。
[PHPカンファレンス日本2019](https://phpcon.php.gr.jp/2019/)ももちろん[載っています](https://www.php.net/archive/2019.php#2019-08-08-3)。

なんとなくそのへんを見ていたら、[php Central Europe 2019](https://2019.phpce.eu/en/)というカンファレンスが紹介されていました。
2019年10月4日~6日と3日間にわたって行われる予定の大きなカンファレンスだったのですが、公式を見てのとおり中止になりました。
原因はというと最近流行りの多様性なんちゃらです。

登壇予定者のうち幾人かが『登壇者に白人男性しかいない』ことを理由に登壇をキャンセルし、結果としてイベント自体のキャンセルにまで繋がったようです。

# Larry Garfield

[Skipping PHP.CE this year]

元記事を表示

EloquentのJOINで結合テーブルに論理削除を効かせる

EloquentでModelに論理削除(SoftDeletes)を設定しておくと、デフォルトで`deleted_at is null`をWHERE条件に入れてSQLを発行してくれます。

しかし、テーブル結合(JOIN)をした場合、結合したテーブルに対して論理削除の抽出条件が効きません。

“`php
$users = User::join(‘deptments’, ‘users.deptment_id’, ‘=’, ‘deptments.id’)->get();
“`

“`sql
select
*
from
`users`
inner join `deptments`
on `users`.`deptment_id` = `deptments`.`id`
where
`users`.`deleted_at` is null
“`

それならとwhereを設定してみるも、これだとLEFT JOINの場合に結合しなかったusersテーブルのレコードが抽出されなくなってしまいます。

“`php
$users = User::join(‘dept

元記事を表示

GitHub ActionsでmasterにpushしたときにPHP-CS-Fixerを動かしてcommit&pushする

GitHubのmasterにpushしたらPHP-CS-Fixer動けば楽だなぁと思い、GitHub Actionsで実装
やり方は色々ありそうだが、自分がやったのは

“`
composer require –dev friendsofphp/php-cs-fixer
“`
でcomposerでインストールされるようにする

“`yaml:.github/php-cs-fixer.yml
name: PHP-CS-Fixer

on:
push:
branches:
– master

jobs:
php-cs-fixer:
runs-on: ubuntu-latest

steps:
– uses: actions/checkout@master
– name: Install Dependencies
run: composer install -q –no-ansi –no-interaction –no-scripts –no-suggest –no-progress –prefer-

元記事を表示

[GCP] Cloud Run + PHP なチュートリアルこなしたよ

簡易 Cloud Run
-> Cloud Functions みたい関数がコンテナ実行できるようになってフレキシブルになったよ
-> App Engine standard に対する flexible environment みたいな

– コンテナだから
– Cloud Build でビルドできる
– 好きなライブラリを持って実装できる
– 環境に依存しない
– Container Registry で脆弱性診断できる
– サーバーレスなので
– スケーラブル
– インフラ気にせんでいい

参考になる記事 -> [[Google Cloud] GKE と Cloud Run の使い分け](https://cloud.google.com/blog/ja/products/containers-kubernetes/when-to-use-google-kubernetes-engine-vs-cloud-run-for-containers)

まぁ, 両方使いたいよね

話はそれたがチュートリアルはこれ
https://c

元記事を表示

【Laravel】Requestによるバリデーションは効かせつつ、他は共通エラー

Requestによるバリデーションチェックによるエラー表示は機能させつつ、
他のエラー発生時は共通エラー画面に遷移させる方法です。

## 環境
– PHP:バージョン7.3.7
– Laravel:バージョン5.8
– OS:Windows10

## はじめにやったこと
エラーが発生したら、とりあえずエラー画面に遷移させればいいんだよね、
というわけで、デフォルトの記述をコメントアウトし、以下のように変更。
※リダイレクト先は、\routes\web.php で制御しています。

“`php:\app\Exceptions\Handler.php

public function render($request, Exception $e)
{
return redirect(‘/’);
/*
以下はデフォルトの記述
return parent::render($request, $e);
*/

}
“`

## 問題発生
ところが、問題発生。
Requestを使った

元記事を表示

MySQLにLinuxコマンドからエクスポート、インポートする方法

よく忘れるのでメモ用。

# 特定のデータベースの中身を全てエクスポート

以下のコマンドをクリック。

“`
mysqldump -u root -p testdb > dump.sql
“`

以上の例では、
rootユーザー、testdbというデータベース名になります。
tesdbの中身を「dump.sql」というファイル名で出力します。

以上のコマンドを打った後、パスワードが求められます。

# 特定にデータベースsqlファイルをインポート

以下のコマンドをクリック。

“`
mysql -u root -p testdb < dump.sql ``` 以上の例では、 rootユーザー、testdbというデータベース名になります。 dump.sqlのファイルを、testdbにインポートします。 以上のコマンドを打った後、パスワードが求められます。 以上

元記事を表示

XAMPPでさえ躓いたときに

## XAMPPをまだ使っています。

Dockerコンテナ管理(kubernetesでの管理が目標)を勉強中の私はまだまだPHPの環境を
**XAMPP**でやっています。

そこでよく出くわすエラーをまとめました。

– 環境:Windows10
– [使用したXAMPP V7.2.5の直リンク](https://www.afterdawn.com/software/network/servers/xampp_for_windows_portable.cfm)

## ApacheもMySQLも起動できない

XAMPPのControl PanelでApacheもMySQLも起動できないときがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280363/653969bd-c9b6-9d1f-8394-538bfb9259e5.png)

そんな時は
【xamppのルートディレクトリ】\setup_xampp.bat
を実行するとxampp-control.iniが作られて

元記事を表示

[PHP]foreachで配列の中の要素をまとめてキャストする

# たとえば…

こういう配列があったとしましょう。

“`php5
“0”, “failure_count”=>”1”);
$results[] = array(“success_count”=>”1”, “failure_count”=>”0”);
“`

“`
array(2) {
[0]=>
array(2) {
[“success_count”]=>
string(1) “0”
[“failure_count”]=>
string(1) “1”
}
[1]=>
array(2) {
[“success_count”]=>
string(1) “1”
[“failure_count”]=>
string(1) “0”
}
}
“`

# 全ての要素をintにしたい…!

クエリを叩いたりなんかして、全部の結果がint型も含めて全部Stringは困る…って場面があ

元記事を表示

PHP Debug Bar on Slim3

“`
composer require maximebf/debugbar
composer require kriswallsmith/assetic
“`
“` dependencies.php

// PHP Debug Bar
$container[‘debugBar’] = function($c) {
$debugbar = new StandardDebugBar();
$debugbar->addCollector(new DebugBar\Bridge\MonologCollector($c[‘logger’]));
$renderer = $debugbar->getJavascriptRenderer();
$renderer->setIncludeVendors(false);
return $debugbar;
};

“`
“` routes.php

use Slim\App;
use Slim\Http\Request;
us

元記事を表示

pdo_oci “Unable to load dynamic library”

# 環境情報
– Windows Server 2012 R2
– IIS
– PHP7.4
– Oracle Client 12g

# Unable to load dynamic library
php.iniのextensionで、pdo_ociを有効にしても、認識されない。

# やったこと
ORACLE_HOMEに設定されているディレクトリに対して、IISユーザのアクセス権限を付与してやる。
(レジストリエディタで確認)

元記事を表示

trim()について

なぜtrimで全角スペースを削れると思ったのか:thinking:

“`php
$str = “ sample ”;
trim($str); // 「 sample 」 のまま
“`

全角スペースを削るには色々手段がありますが、preg_replaceを使いたいと思います。

“`php
$str = “ sample ”;
preg_replace(‘/[  ]/u’, ”, $str); // 「sample」
“`
「/(正規表現)/u」でUTF-8を明示的に指定するとなお安全。

元記事を表示

レンタルサーバーでLaravelを動かす際の環境構築手順とTips

# はじめに

この記事は**[Laravel Advent Calendar 2019](https://qiita.com/advent-calendar/2019/laravel)**の**23日目の記事**です
過去に培ったレンサバ**([さくらサーバ](https://www.sakura.ne.jp/)、[バリューサーバ](https://www.value-server.com/))**でLaravelを動かすためのアレコレを書いていきます

.
.
.

という予定だったんですが、**さくらサーバーでの環境構築手順メモしか手元に残ってなかったのでほぼさくらサーバーでの環境構築手順になります**(主語でかで申し訳ないです)

# AWSとかわからんからレンサバでLaravelを動かす

というのはまあ**半分冗談**で、大体が**コストになる**とか、**先方指定**とかで最終的に**レンタルサーバーにしてください**って言われるので、世間的にもそうなのかな?と思いつつ記事書いていきます。
このTipsが誰かの役に立てれば我幸です。

**情報の鮮度的に19年9月ごろま

元記事を表示

PHPStanで素のPHPをテンプレートとして使うとき、htmlspecialcharsをチェックする

前に[テンプレートエンジンでも型チェックしたい](https://qiita.com/nishimura/items/bfabfb137abe42e62c39)ということを書いたが、まだ一点不満があった。

そもそもテンプレートエンジンを使う唯一にして最大のメリットは、`htmlspecialchars`を漏れなく実行することにある。
PHP自体がテンプレートエンジンと言われていても、別途テンプレートエンジンのライブラリを使うのは

“`php

“`

というような出力を書いてしまってXSSが発生するということを防ぐのが目的である。
他の機能は、例えばBladeなら

“`php
@if ($flg)
OK
@endif

@foreach ($data as $key => $row)

{{ $row->id }}: {{ $row->name }}

@endforeach


OK

元記事を表示

[WordPress]PHPCodeSniffer(phpcs)でWPコーディング規約をチェック&自動整形できるようにする

ちゃんとしようと思い、WordPressコーディング規約をちゃんと学び始めました。
でも自分で間違いを探し出すのはとっても大変だとうなだれてたら、構文エラーをチェックでき、自動整形もしてくれる方法を知ったので忘れないうちにまとめておきます。
野性味のあるまなちゃんも貼っておきます。
mojikyo45_640-2.gif
かわいい。
#WordPressコーディング規約(WordPress Coding Standard)とは
WordPressには、コーディング規約がある。
コーディング規約はCSS、HTML、JavaScript、PHPと言語ごとに存在する。

– [CSS コーディング規約 \- WordPress Codex 日本語版](https://wpdocs.osdn.jp/CSS_%E3%82%

元記事を表示

モバイル環境でNetwork Errorでハマった。「EC2にDocker Caddy Laravel, S3にVuejsの構成」

指摘などウェルカムです。
クロスオリジン(CORS)に関連するエラーなんだと思うけどPCでは動くが、携帯 IOS Iphone7(古い)からのブラウザ(最新)ではsafariもchromeも動かないって現象で結構ハマった。

# 環境

大体の構成
route53から分岐
-> CloudFront+S3にvuejs
-> ALBからEC2(Ubuntu)にDocker Caddy Laravel

# 解決策

サーバー側のクロスオリジンの設定をちゃんと設定する。

Access-Control-Allow-Origin
Access-Control-Allow-Headers
をざっくり設定して * としていた。
これが原因だった。
ちゃんとフロントs3側のホスト名を指定したら動いた。
この記事で必須と書いてあるので、ん?と思って設定したら動いた。

“`php
:OK.php

元記事を表示

Laravel6系 に Vuetify を入れてみる

こんにばんわ! @ktoshi です。
今回は私が困ったときに縋りつく Laravel についてお話します。
ちなみに私はインフラエンジニアです。メインは。

# 目的
Laravel6 に Vuetify を導入したい。
Laravel6 より Vue.js などが標準ライブラリから外れたため、Laravel5 以前の記事ではそのまま導入ができなくなりました。
毎度導入しているときに複数の記事を見ながら、導入しているので備忘録もかねて。

# Vuetify とは
[公式HP](https://vuetifyjs.com/)
Vue.js のコンポーネント集です。
ボタンやテーブルなどを描画する際のコンポーネントがあつまっているので、
モダンなデザインを容易に作ることができます。

# 環境
OS: Windows 10 Pro
PHP: 7.3.10

# Composer インストール
Laravel で使用するパッケージ管理に利用します。
みなさんご存じですよね。多くは語りません。
[Composerインストール手順(Windows)](https://qiita.com/mi

元記事を表示

CakePHP3をPHP7.2で動かすときは気をつけろ

# PHP7.2は曲者!?

以下の記事でも書いたが、PHP7.2でCakePHP3を動かそうとすると思わぬ事態に遭遇する。
https://qiita.com/21century_girl_/items/5be2606b3bfa98514952

元はといえば、サーバー移行の依頼を受けたため、「どうせならPHPのバージョンを上げるか」と軽い気持ちで、***PHP7.1→PHP7.2***にバージョンアップしたのです。

## phpコマンドが動かん…

“`
php -v
“`

いつものこれ。
phpのバージョンを確認するコマンドですが、これが

“`
command not found
“`

と出て動かないわけですな。

“`
php72 -v
“`

これで動きます。

一応、簡易的な対応としては以下の記事に載せているのでここでは割愛
https://qiita.com/21century_girl_/items/5be2606b3bfa98514952

## cronに設定したshellが動かん..

/etc/cron.dに以下のように設定したのです。

元記事を表示

OTHERカテゴリの最新記事