- 1. nginx UnitはPHP-FPMに比べて本当に8倍速いのか
- 2. PHPフレームワークLaravel入門第2版を読むときに気をつけること
- 3. 【WP-Cron】wp_schedule_eventを1秒に一回/1分に一回実行【Secondly/Minutely】
- 4. 【Laravel9】ChatGPTのAPIを利用する方法
- 5. Laravelで論理削除を実装してみる
- 6. セキュリティ問題と解決方法-その1
- 7. 「パスワードがペッパー付きハッシュ値で保存されているサイトのSQLインジェクションによる認証回避の練習問題」をちょっと考える
- 8. telescopeの導入とERROR There are no commands defined in the “telescope” namespace.
- 9. PHP7に PDF Haru拡張をインストール
- 10. Windowsのローカル環境でLaravelのGoogleログインにアカウント切り替えを実装してみた話
- 11. WordPress にユーザ名・パスワードなしでダブルクリックだけでログインする
- 12. 戻り値returnは何のためにあるの?
- 13. Flatpickrを申込フォームに実装
- 14. PHPのバージョン確認をするコード
- 15. 【PHP】PHPファウンデーションは新たなPHP開発者を募集しているぞ
- 16. zlibで圧縮されたswfファイル(CWS)を非圧縮のswfファイル(FWS)に変換するPHPコード
- 17. PHPerが初めてiOSアプリ開発をした話
- 18. PHPでアクセス元のIPを取得する方法
- 19. Laravel勉強日記
- 20. PHPで配列の末尾の要素を取得する
nginx UnitはPHP-FPMに比べて本当に8倍速いのか
# 発端
元ソース。https://gigazine.net/news/20230913-nginx-unit/
nginx Unitを使うと、現在利用しているPHPのアプリケーションサーバPHP-FPMより
応答速度が8倍速くなるとかいう触れ込み。
赤い彗星もビックリ。# ソフト概要
## PHP-FPM
https://www.php.net/manual/ja/install.fpm.phpPHPの標準アプリケーションサーバソフトウェア。
Webサーバーとして稼働する際に、
ブラウザからのリクエストによってPHPを実行する為のプログラム。
特に選択肢が無ければ使われる様な気がする。## nginx Unit
nginx.Incが出しているアプリケーションサーバソフトウェア。
PHPだけでなく、pythonやJavascriptなども実行する事が出来て、
マルチな言語に対応出来るのが魅力。
最近意外とはえーんじゃないかなと上記記事で少し話題になった。かもしれない。#
PHPフレームワークLaravel入門第2版を読むときに気をつけること
## 課題
掌田津耶乃著の[Laravel 入門第 2 版](https://www.shuwasystem.co.jp/book/9784798060996.html)は Laravel 6 をベースにかかれているため、2023 年 9 月現在の最新バージョンでは動かないコードがある。
## 環境
WSL2 Ubuntu 20.04.6 LTS
Laravel Framework 8.83.27## 本の通りでは動かないシリーズ
### p.43 のルート情報の書き方
#### 問題
本の通りに書いても、クラスが見つからないというエラーが出る。
#### 対処法
Laravel 8 では、コントローラのアクション名をフルパスで書く必要がある。
“`
Route::get(‘hello’, ‘App\Http\Controllers\HelloController@index’);
“`## 終わりに
読み進めていくうちにまた動かないコードが出てきたら追記する予定。
【WP-Cron】wp_schedule_eventを1秒に一回/1分に一回実行【Secondly/Minutely】
cron_schedulesを使うだけ
“`php
function my_cron_schedules($schedules){
if(!isset($schedules[“secondly”])){
$schedules[“secondly”] = array(
‘interval’ => 1,
‘display’ => __(‘Once Secondly’));
}
if(!isset($schedules[“minutely”])){
$schedules[“minutely”] = array(
‘interval’ => MINUTE_IN_SECONDS,
‘display’ => __(‘Once Minutely’));
}
return $schedules;
}
add_filter(‘cron_schedules’,’my_cron_schedules’);wp_schedule_event( time(), ‘secondly’, ‘my_secondly_event’);
“`
【Laravel9】ChatGPTのAPIを利用する方法
Laravel9でChatGPTのAPIを利用する際に必要な設定を書いていきます。
#### 1.PHPのバージョンを確認
“`bash
$ php -v
PHP 8.2.9 (cli) (built: Aug 24 2023 20:33:12) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.9, Copyright (c) Zend Technologies
“`
ChatGPTのAPIでは、PHP8.1.0以上が必須になります。#### 2.composer requireを実行
“`bash
$ composer require openai-php/laravel
“`
PHPのバージョンが足りないと、ここでエラーが出ます。
途中で
“Do you trust “php-http/discovery” to execute code and wish to enable it now? ”
と聞かれることがありますが、yesを選択して大丈夫です。#### 3.configを作成
“`bash
php a
Laravelで論理削除を実装してみる
## はじめに
一般的な削除である物理削除ではなく、今回はDBに残しながらも削除扱いとなる論理削除(SoftDelete)を実装していく。
物理削除してしまうと貴重なデータが完全に消えてしまうが、論理削除だと必要なコマンドを打てば取り出すことができるため分析時に役に立つ。## 論理削除の手順
### ①マイグレーションファイルを修正し、`deleted_at`カラムを追加する
下記コマンドでマイグレーションファイルが新たに作成される。
“`terminal
php artisan make:migration add_deleted_at_to_subscriptions_table –table=subscriptions
“`作成されたマイグレーションファイルを開き、下記のように加筆する。
`nullable()`はnullを許容しているため、必ず登録する必要がない場合はつけてあげる。
“`php
public function up()
{
Schema::table(‘subscriptions’, function (Blueprint $table)
セキュリティ問題と解決方法-その1
# この記事を書いた理由
コーディングテストでセキュリティに関する問題が出題されて、改めてどういったものなのか調べ、対処法も含めて備忘録として残します。# 目次
1. CSRFとは
2. PHP(Laravel)で防止する方法は?## CSRFとは?
クロスサイトリクエストフォージェリと言い、
Webアプリケーションに存在する脆弱性、もしくはその脆弱性を利用した攻撃方法のことを指します。
掲示板や問い合わせフォームなどを処理するWebアプリケーションが、本来拒否すべき他サイトからのリクエストを受信し処理してしまいます。攻撃者が攻撃用にサイトを作成しユーザーがアクセスするように誘導し、アクセスすると不正なリクエストが攻撃者が対象にしているサーバーに送られます。
意図していないリクエストを処理するため、ユーザーの意図とは違う処理が行われます。不正な書き込みや、大量の書き込みを使用したDos攻撃などが当てはまります。
※Dos攻撃とDDos攻撃があるので違いを簡単に記載します
・DoS攻撃とは、1台のコンピューターから攻撃をしてくるサイバー攻撃です。
・DDoS攻撃は、複数
「パスワードがペッパー付きハッシュ値で保存されているサイトのSQLインジェクションによる認証回避の練習問題」をちょっと考える
# 前置き
https://qiita.com/ockeghem/items/0f3b09a0f413bdd39bd5まだ問題を見てない方は上にあるのでどうぞ
# 本題
### フォームの確認
多分ツールを使えばわかることなのでソースを確認してログイン画面以外ではprepareメソッドを使ってることを確認しました。### SQLの解析
・アカウント作成
newuser.phpでアカウントを作成すると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557059/43cd7311-fdd7-e697-c634-6bc7f893a988.png)
とシンプルな表示。ですがここで同一メルアドでもう一度作成すると![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557059/45d6aecc-9759-a273-28e3-3177c5669866.png)
となりテーブル名が判明。多分UN
telescopeの導入とERROR There are no commands defined in the “telescope” namespace.
## LaravelにTelescopeを導入したい。
https://laravel.com/docs/9.x/telescope
基本的にこの通りにやればいいのだが、記載されていないエラーがでた。## 手順
いつも通りに、/var/www に移動。
“`PHP:Laravel
composer require laravel/telescope –dev
“`
“`PHP:Laravel
php artisan telescope:install
“`
// ここでエラーでる
ERROR There are no commands defined in the “telescope” namespace.ので
config/app.phpの’providersに下記を追加“`PHP:config/app.php
‘providers’ => [
// ・・・
Laravel\Telescope\TelescopeServiceProvider::class,
]
“`その後、再度
“`PHP:Laravel
php artisan telesc
PHP7に PDF Haru拡張をインストール
pecl で PDF Haru拡張機能を PHP7 にインストールしようとすると、PHPバージョンが対応外であるため失敗します。
“`shell:PHP Extention haru Install
>pecl install haru
pecl/haru requires PHP (version >= 5.1.3, version <= 6.0.0, excluded versions: 6.0.0), installed version is 7.4.15 No valid packages found install failed ``` そこで libharu と PHP7に対応した haru拡張をソースからビルドしてインストールします。 ## 必須ライブラリ/プログラムのインストール ソース取得には wget, git、libharu ビルドには cmake, zlib, libpgn, haru拡張には php-devel,libtool が必要です。 ```shell:Install requisite modules and programs >apt
Windowsのローカル環境でLaravelのGoogleログインにアカウント切り替えを実装してみた話
# はじめに
うわっ…私の記事、タイトル長すぎ…?
と思わなくもなかったのですが、↓の続編ということがわかりやすいようにしました。https://qiita.com/fsd-yamagen/items/fa819d9c55a76ff0ce03
前回、LaravelのSocialiteを使ってGoogleのソーシャルログインが実装できたので、今回はログアウト→別アカウントでログインという処理を実装したら、思ったより苦労したという備忘録です。
環境やソースコードは前回のものを使っています。
# ログアウト処理の実装
まずは以下のように実装してみました。**resources\views\welcome.blade.php**
好きな場所に以下のログアウト用リンクを設置“`PHP
@auth
logout
@endauth
“`
**routes\web.php**
末尾に以下を追記“`PHP
Route::get(‘/logout’, [GoogleLoginController::class,
WordPress にユーザ名・パスワードなしでダブルクリックだけでログインする
WP本体をいぢる必要はなく、 生PHP (?) , 生Javascript (?) だけで書いた以下のPHPをWP直下におくだけです。
以下のPHPファイル(xxx.php)を、WP直下におきます。
https:// site //xxx.php?yyyyyy=zzzzzzz のショートカットリンク を作っておけば、すぐにログインできます。
セキュリティ上の問題はありますが、 xxx, yyy, zzz を超長く、複雑にしておけば、多少はマシかと。
自己責任でお願いします。メリットは不要になったら、このPHPファイルを削除するだけでよく、WP本体ファイルには手を入れないでよいということです。
“`php
戻り値returnは何のためにあるの?
# 初学者向け|戻り値returnについて
whileを使ったループ処理を書くとき、必ず出てくるのが戻り値”return”。
リターンは **「関数が行った仕事の結果」** を教えてくれるものです。
と言っても意味わかんないですよね。
# 3つの目的
設計にもよりますが、平たく言えば、次の目的で使われることが多いです。#### 1、答えを教えてくれる
例:「2 + 3は何?」と聞いた時の「5」という答え。#### 2、情報を教えてくれる
例:「今日の天気は?」と聞いた時の「晴れ」という答え。#### 3、うまくいったか、ダメだったかを教えてくれる
例:ゲームで宝箱を開けるとき、「鍵が必要だよ」というメッセージが表示される場合。これは「ダメだった」という結果の一種です。いずれも、 **答えを表示してくれないと何もわかりませんよね。**
# まとめ
要するに、関数の戻り値は、私たちが関数に頼んだ仕事の結果や答えを教えてくれるものなのです。
Flatpickrを申込フォームに実装
WordPressのお申込みフォームでカレンダー機能を実装したのでメモします。
## やりたいこと
* フォームはカレンダー形式で入力
* お申し込みは希望日の3日前まで(申込後3日まで選択不可)
* 日、祝日も選択不可
* 臨時休業日を任意で選択不可に追加できる何か良いライブラリはないものかと探していたところ「Flatpickr」がイイ感じだったので使ってみました。
jQuery UIの選択肢もありましたが、コードをみたら何かイマイチな感じ。
サポートも終わりだそうで。
スッキリした書き方とデザインも良かったし、軽いということで決めました。CDNではなくダウンロードしてローカル環境で使用です。
## インストールと準備
下記サイトよりダウンロードしました。
https://flatpickr.js.org/plugins/サンプルで作ったフォームにjsとcssを組み込みます。
デザインも色々用意されてましたが、どんなものにも合いそうなlightテーマを選択。
ファイルパスはdatepickerディレクトリ作って、全部放り込みました。“`index.html
PHPのバージョン確認をするコード
PHPのバージョン確認をするコードを2種類解説します。
## PHPで確認する場合
PHPスクリプト内で phpversion() 関数を使用して、PHPのバージョン情報を取得できます。
“`php
“`## コマンドラインで確認する場合
コマンドラインで実行する場合には、以下のようにコマンドを使用できます。
“`shell
php -v
“`## PHPのお役立ち情報
https://wagtechblog.com/programing/php-school
https://wagtechblog.com/programing/php-book
【PHP】PHPファウンデーションは新たなPHP開発者を募集しているぞ
PHPで開発する人ではなく、PHPを開発する人を募集しています。
PHPは2022年以降、ボランティアベースではなく[きちんと給料を払ってPHP本体の開発を行う](https://qiita.com/rana_kualu/items/eaf97694f25a62f93a7e)という体制になっています。
[2022年5月には6名のコア開発者](https://qiita.com/rana_kualu/items/0479edbd936447572c3b)が雇用され、安定した立場で開発することができるようになりました。
もちろんボランティア参加者も変わらずたくさんいますし、[RFC](https://wiki.php.net/rfc)への投票権も一人一票でありコア開発者だから権限が強いとかいうこともありません。さて今回、さらに新たな開発者を募集することが決まりました。
以下は2023/09/06の募集エントリ、[We Are Looking for Developers to Join the PHP Foundation](https://thephp.foundation/bl
zlibで圧縮されたswfファイル(CWS)を非圧縮のswfファイル(FWS)に変換するPHPコード
Flashのswfファイルは本体データ部分が圧縮されている場合があるようです。
それを非圧縮のファイルに変換するコードです。swfを再生表示するJSのライブラリがいくつかありますが、ものによっては圧縮されていると再生できないライブラリがあったので調べて対応しました。
他の言語や圧縮形式でもほぼ同様の処理で対応できると思います。“`PHP
PHPerが初めてiOSアプリ開発をした話
普段はLaravel、Vue.jsで開発しているPHPerですが、SwiftでiOSアプリを作ることになりました。
色々と苦労しましたが、意外となんとかなったので、メモ程度に残します。
# 目次
[まず何から始めればいいの…?](#まず何から始めればいいの)
[開発環境の準備](#開発環境の準備)
[ベース構築](#ベース構築)
[開発開始](#開発開始)
[まとめ](#まとめ)## まず何から始めればいいの…?
モバイルアプリについて何もしらなかったので、ここからスタートです。。
少し調べると、ネイティブとクロスプラットフォームがあり、クロスプラットフォームはiOSでもAndroid両方対応している。
### ネイティブ
Swift
### クロスプラットフォーム
Flutter(Dart) 、React Native(JavaScript)
### どの言語にする?
今回の要件として、装置とBluetooth接続する必要がある。
クロスプラットフォームだと、iOSとAndroid両方でBluetooth通信が上手くいく気が全くせず、Swiftを選定。
### フレー
PHPでアクセス元のIPを取得する方法
注意。
PHPで`$_SERVER[‘REMOTE_ADDR’]`を使ってアクセス元の IP アドレスを取得している人は多いでしょう。
これは自宅でPHPサーバーを運用している場合には有効ですが、VPSやホスティングサービスを使用している場合は、これは使えません。
なぜなら、サーバーはアクセス元ではなく、ユーザーのIPアドレスを返すからです。
つまり、サーバーを正しく運用することができないのです。
そこで、解決策を紹介しよう。
`REMOTE_ADDR`の代わりに`$_SERVER[‘HTTP_X_FORWARDED_FOR’]`を試してみてください。
これはアクセス元のIPアドレスになります。
これはNode.jsでも使えますので、覚えておいてください。
Laravel勉強日記
# laravel勉強日記
#### シーディングを利用してデータを一括挿入
シーダーを作成するには以下のコマンド
“`
sail artisan make:seeder TweetsSeeder
“`
database/seeder にTweetSeederクラスが作成される## DBにデータが挿入される流れ
#### ① database/seederに作成されたデータを挿入するためのファイルを作成する。
“`
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;class TweetsSeeder extends Seeder
{
public function run()
{
DB::table(‘tweets’)->insert([
‘content’ =
PHPで配列の末尾の要素を取得する
PHPで配列の要素を取得する方法を3パターン紹介します。
1. array_key_last()
2. count()とインデクサを使用
3. end()上記の3パターンが使われる可能性が高いですが、最新のPHPバージョンではarray_key_last()を使うことがベターです。
使用例は以下の記事にまとめています。
https://hishikiryu.com/php-get-last-array-value/