- 1. Guzzleでリクエスト先から返されたエラーメッセージをtruncateさせずに取得する
- 2. PHP の RAII は幻想じゃなくなった
- 3. LaravelでスクレイピングしたデータをSeederに逆生成してみた話
- 4. PHPカンファレンス中央ヨーロッパ2019が中止になっていた
- 5. EloquentのJOINで結合テーブルに論理削除を効かせる
- 6. GitHub ActionsでmasterにpushしたときにPHP-CS-Fixerを動かしてcommit&pushする
- 7. [GCP] Cloud Run + PHP なチュートリアルこなしたよ
- 8. 【Laravel】Requestによるバリデーションは効かせつつ、他は共通エラー
- 9. MySQLにLinuxコマンドからエクスポート、インポートする方法
- 10. XAMPPでさえ躓いたときに
- 11. [PHP]foreachで配列の中の要素をまとめてキャストする
- 12. PHP Debug Bar on Slim3
- 13. pdo_oci “Unable to load dynamic library”
- 14. trim()について
- 15. レンタルサーバーでLaravelを動かす際の環境構築手順とTips
- 16. PHPStanで素のPHPをテンプレートとして使うとき、htmlspecialcharsをチェックする
- 17. [WordPress]PHPCodeSniffer(phpcs)でWPコーディング規約をチェック&自動整形できるようにする
- 18. モバイル環境でNetwork Errorでハマった。「EC2にDocker Caddy Laravel, S3にVuejsの構成」
- 19. Laravel6系 に Vuetify を入れてみる
- 20. CakePHP3をPHP7.2で動かすときは気をつけろ
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を実行する時にテストデータを作っておきたい。# 導入方法
## 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-Fixeron:
push:
branches:
– masterjobs:
php-cs-fixer:
runs-on: ubuntu-lateststeps:
– 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.phpuse 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
= $message ?>
“`というような出力を書いてしまってXSSが発生するということを防ぐのが目的である。
他の機能は、例えばBladeなら“`php
@if ($flg)
OK
@endif@foreach ($data as $key => $row)
{{ $row->id }}: {{ $row->name }}@endforeach
OK
[WordPress]PHPCodeSniffer(phpcs)でWPコーディング規約をチェック&自動整形できるようにする
ちゃんとしようと思い、WordPressコーディング規約をちゃんと学び始めました。
でも自分で間違いを探し出すのはとっても大変だとうなだれてたら、構文エラーをチェックでき、自動整形もしてくれる方法を知ったので忘れないうちにまとめておきます。
野性味のあるまなちゃんも貼っておきます。
かわいい。
#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に以下のように設定したのです。