Pages

2023年10月5日木曜日

MySQL 8でAES暗号モードをaes-256-ofbに変更する方法


現在の設定を確認する方法

MySQLでAES暗号モードの設定を確認するには、以下のクエリを使用します。

        SHOW VARIABLES LIKE 'block%';
        SHOW GLOBAL VARIABLES LIKE 'block%';
上記はそれぞれ結果が異なる場合がありますので、両方を確認する事をおすすめします。
    

AES暗号モードを変更する方法

方法 1: セッション内でのみ変更する

次のコマンドを使用して、現在のセッション内でのみAES暗号モードを変更できます。変更はセッション終了時にリセットされます。

        SET block_encryption_mode = 'aes-256-ofb';
    

方法 2: グローバルな設定を変更する

次のコマンドを使用して、グローバルなMySQLサーバー設定を変更し、すべての接続に影響を与えます。ただし、この変更はMySQLサーバーを再起動するまで永続的に反映されません。

        SET @@GLOBAL.block_encryption_mode = 'aes-256-ofb';
    

方法 3: 永続的な設定を変更する

次のコマンドを使用して、MySQLサーバーの永続設定を変更し、再起動しても設定が保持されます。

        SET PERSIST block_encryption_mode = 'aes-256-ofb';
    

注意: グローバルな設定および永続的な設定を変更する場合は、セキュリティとパフォーマンスへの影響を検討し、必要な対策を講じることが重要です。また、変更を行う前にデータベースのバックアップを取得し、変更後にテストを行うことをお勧めします。

2023年9月6日水曜日

CakePHP4 DBの複数レコード情報を一気に取得するとメモリーが足りないのでに少しずつ取得する

今回はCSV出力する際にレコード数が多くてメモリー不足にならない方法を考えていました。

CakePHP 4では、`enableBufferedResults`を利用してメモリー不足を発生させないようにすることができます。この設定は、データベースから大量のデータを取得する場合など、メモリーを効率的に管理するために役立ちます。

まずは公式ドキュメントの紹介
https://book.cakephp.org/4/ja/orm/retrieving-data-and-resultsets.html#id16

`enableBufferedResults`を有効にすると、CakePHPはデータベースのクエリ結果をメモリーに全て読み込むのではなく、イテレータを使用してデータを一部ずつ取得できるようになります。これにより、大規模なデータセットを取り扱う場合でもメモリー不足の問題を回避できます。

以下は、CakePHP 4で`enableBufferedResults`を設定する方法です。

1. コントローラーまたはモデルのアクション内で、`enableBufferedResults`を有効にします。たとえば、以下のように設定できます。

// コントローラーのアクション内で
public function getData() {
    // データベースから大量のデータを取得するクエリ
    $query = $this->Table->find()->enableBufferedResults();

    // データを取得
    foreach ($query as $row) {
        // データの処理
    }
}

2. 上記の例では、`enableBufferedResults`をクエリオブジェクトに適用し、`foreach`ループを使用してデータを一つずつ処理しています。この方法を使用することで、メモリー不足を回避できます。

注意事項:

- `enableBufferedResults`を有効にしてループしてる時などは別のクエリーを投げる事はできません。(多分。。)DBコネクションを追加して対応する方法もありますが、接続数をその分消費してしまうため可能であれば避けたい方法ではあります。

- `enableBufferedResults`を有効にすると、イテレータが内部で使用され、データベースの接続がクローズされると自動的にクリーンアップされます。

- 大規模なデータセットを処理する場合、`enableBufferedResults`を有効にしても、パフォーマンスの問題が発生する可能性があるため、適切なインデックスやクエリの最適化も検討してください。

- メモリーの使用状況に注意し、必要な場合には適切なタイミングで不要なリソースを解放することをお勧めします。

2023年7月11日火曜日

PHP5.3 環境でcomposer self-update して動かなくなった時

RHEL6 ELS の環境で composer self-update をしてしまったようで、アップデートされたけど同時に comopser が壊れてしまった。。
$data が何やら invalid foreach だの。。

前にもあったが composer は環境の phpのバージョンを見てアップデートした良いかを判別しておらず、動かなくても更新しちゃうクールなやつ♪

って事で

$ composer self-update 1.7.2

を行うが 

[ErrorException]
Invalid argument supplied for foreach() 

チーン。。

って事で削除してインストールしなおす。

$ cd ~/
$ rm ./bin/comopser
$ cd ./bin
$ curl -sS https://getcomposer.org/installer | php -- --version=1.7.2
$ mv ./composer.phar composer

composer とは

Composerは、PHPプログラミング言語向けの依存関係管理ツールです。PHPのパッケージやライブラリのインストール、更新、バージョンの管理を容易に行うことができます。

Composerは、PHPアプリケーションの開発において、外部のライブラリやパッケージを利用する場合に特に便利です。通常、PHPのプロジェクトでは、複数のライブラリやパッケージが必要となることがあります。それらのライブラリやパッケージの依存関係を手動で管理するのは困難で時間がかかるため、Composerを使用することで効率的に管理することができます。

Composerは、プロジェクトのルートディレクトリに配置される`composer.json`と呼ばれる設定ファイルを使用して、必要なパッケージやライブラリを指定します。Composerは、指定された依存関係を解決し、自動的に必要なパッケージをダウンロードしてインストールします。

Composerは、PHPコミュニティで広く使用されており、多くのPHPフレームワークやプロジェクトで標準的な依存関係管理ツールとして採用されています。

composer をアップグレードする方法

Composer自体のアップデートは、コマンドラインで簡単に行うことができます。以下の手順に従って、Composerを最新バージョンにアップデートする方法を説明します。

1. ターミナルまたはコマンドプロンプトを開きます。
2. Composerがグローバルにインストールされている場合は、以下のコマンドを実行します:

 $ composer self-update

   Composerがローカルにプロジェクトごとにインストールされている場合は、プロジェクトのルートディレクトリで上記のコマンドを実行します。
   
   Composerがアップデートされ、最新バージョンに更新されます。

3. コマンドが正常に実行された場合、Composerは自動的に最新バージョンに更新されます。

なお、Composerをアップデートするにはインターネット接続が必要です。アップデート後は、最新の機能や修正が適用されたComposerを使用することができます。

comopser をダウングレードする方法

Composerを特定のバージョンにダウングレードするには、次の手順に従ってください。

1. ターミナルまたはコマンドプロンプトを開きます。

2. Composerの現在のバージョンを確認します。以下のコマンドを実行します:

$ composer --version

   現在のバージョンが表示されます。

3. ダウングレードしたいバージョンを指定してComposerをインストールします。以下のコマンドを実行します:

$ composer self-update <version>

   `<version>`の部分に、ダウングレードしたいバージョン番号を指定します。例えば、Composerを1.10.10にダウングレードする場合は次のようにします:

$ composer self-update 1.10.10

4. コマンドが正常に実行された場合、指定したバージョンのComposerがインストールされます。

ダウングレード後は、指定したバージョンのComposerを使用することができます。ただし、Composerをダウングレードする場合、そのバージョンに関連する制約や制限があるかもしれないことに注意してください。最新バージョンを使用することが推奨される場合もあります。

2023年6月5日月曜日

Windows 10,11 でファイル拡張子を再帰的に一括更新する方法

Windowsでファイルの拡張子を一括置換するには、次の手順を実行します。

1. ファイルをバックアップします。一括置換操作を行う前に、重要なファイルを保護するためにバックアップを作成することを強くおすすめします。

2. PowerShellを開きます。スタートメニューから「PowerShell」を検索して開くか、Shift + 右クリックでフォルダ内の空白スペースをクリックし、「PowerShellウィンドウをここで開く」を選択します。

3. 次のコマンドを使用して、指定されたディレクトリ内のファイルの拡張子を一括置換します。以下のコマンドをPowerShellウィンドウに貼り付けて実行します。


powershell

Get-ChildItem -Recurse -Filter "*.tpl" | Rename-Item -NewName { $_.Name -replace '\.tpl$', '.php' }

※ 上記は .tpl のファイルを再帰的に .php に置換する。


上記のコマンドは、指定されたディレクトリ(およびそのサブディレクトリ)内のすべての.tplファイルを検索し、それらの拡張子を.phpに置換します。

置換する拡張子を変更したい場合は、上記のコマンドの「.tpl」および「.php」を適切な拡張子に変更してください。

注意:この操作はファイルの拡張子を変更するため、慎重に行ってください。誤って重要なファイルの拡張子を変更すると、ファイルが正常に動作しなくなる可能性があります。

2023年5月26日金曜日

[Git] ログ、履歴から特定のファイルを削除する

 経緯

テストデータだが、メールアドレスなどを含むファイルを間違ってコミットしてしまったので、ログからも削除したい。

早速調べたが、どうやらGitには最初からこれに対応するコマンドは用意されておらず拡張機能を追加してやる必要があるようだ。

以下に今回の対応方法をメモする。

2023年4月27日木曜日

[CakePHP4] Controller から コマンドを実行する方法

$commandRunner = new CommandRunner(new Application(ROOT . DS . 'config'), 'cake');
$commandRunner->run([
    'bin' . DS . 'cake',
    'command_name',
    'param1',
    'param2,
]);

上記は

$ bin/cake command_name param1 param2

と同等。

2023年3月6日月曜日

[PHP Code Sniffer] The closing parenthesis and the opening brace of a multi-line function declaration must be on the same line

エラー内容

ERROR | [x] The closing parenthesis and the opening brace of a multi-line function declaration must be on the same line

) と { は同一行に書きなさい!!


修正前

public function sampleFunc(

    int $bookId,

    string $bookName

): ?BookEntity

{

  // ...

}


修正後

public function sampleFunc(

    int $bookId,

    string $bookName

): ?BookEntity {

  // ...

}

2022年4月21日木曜日

[Windows] Tera Term などを使わずにクリックしたらトンネル接続開始にする方法

 今回参考にしたサイト


トンネル接続する

まずは Windows の PowerShell だけを使ってトンネル接続をします。

> ssh [username]@[from_host] -i [secret_file_path] -L [from_port]:[to_host]:[to_port]

例:
ポート:2022 の場合は fhost.com サーバー経由で thost.com サーバーに ポート:22 で接続したいという場合。

fhost.com の 接続アカウントは
host: fhost.com
username: user
key_file: C:\Users\user\.ssh\id_rda.pem

> ssh user@fhost.com -i C:\Users\user\.ssh\id_rda.pem
 -L 2022:thost.com:22

鍵ファイルがユーザーディレクトリ以下(もしくはユーザーを限定的に設定)でなければ警告が出てうまく接続できないので、それについて困ったらこちらを参考にしてください。

PowerShell で sshすると UNPROTECTED PRIVATE KEY FILE

ショートカットを作成

好きなところでショートカットを新規作成する


"項目の場所を入力してください(T)" に以下を入力する。


%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NoExit -Command "ssh user@fhost.com -i C:\Users\user\.ssh\id_rda.pem -L 2022:thost.com:22"

"次へ" をクリックするとショートカットの名前を確認されるので好きな名前を入力する。


"完了" をクリックして完了。

2022年3月15日火曜日

[Laravel] Windowsにはcronが無いので、タスク スケジューラにscheduleを設定する

Windowsにはcronが無いので、タスク スケジューラに設定するんですが、単純に設定するとコマンドプロンプトのウィンドウが一分毎に立ち上がって文字入力の邪魔をする。。

なので、もうVBSファイルからコマンドプロンプトを実行するようにしてこれを回避。

ついでにPHPのバージョン変更もするように。


手順

  1. VBSファイルを作成
  2. タスク スケジューラに設定

VBSファイルを作成

VPSファイルはどこに置いても大丈夫です。
ただのテキストファイルなのでメモ帳で作成可能です。
拡張子は .vbs

記載内容はこちら

Set ws = CreateObject("Wscript.Shell") 
ws.run "cmd /k set PATH=D:\app\php-8.0.14-nts-Win32-vs16-x64;%PATH% & cd D:\prjects\sample & php artisan schedule:run", 0, false

記載内容の説明
ws.run で 3つのパラメータを指定しています。

1つ目 実行するコマンド
2つ目 ウィンドウオプション 0=表示しない
3つ目 同期指定 false=非同期

つまり 1つ目のコマンドは非表示で勝手に実行しといてくださいって感じです。

run メソッドについて詳しくはこちら

コマンドは & 区切りで複数実行できますので、今回は
  1. PATH の更新
  2. ディレクトリの移動
  3. scheduleの実行
をやっています。


2021年10月28日木曜日

CakePHP4 Validation:: add() rule で利用できる値一覧

notBlank

alphaNumeric

notAlphaNumeric

asciiAlphaNumeric

notAsciiAlphaNumeric

lengthBetween

creditCard

numElements

comparison

compareWith

compareFields

containsNonAlphaNumeric

custom

date

datetime

iso8601

time

localizedTime

boolean

truthy

falsey

decimal

email

equalTo

extension

ip

minLength

maxLength

minLengthBytes

maxLengthBytes

money

multiple

numeric

naturalNumber

range

url

inList

uuid

luhn

mimeType

getFilename

fileSize

uploadError

uploadedFile

imageSize

imageWidth

imageHeight

geoCoordinate

latitude

longitude

ascii

utf8

isInteger

isArray

isScalar

hexColor

iban

2021年7月5日月曜日

FriendsOfCake / search の使い方メモ

FriendsOfCake/search

https://github.com/FriendsOfCake/search

インストール

composerをインストールした環境で

$ php composer.phar require friendsofcake/search

プラグインを追加したらソースから利用できるように

$ bin/cake plugin load Search

利用方法

https://github.com/FriendsOfCake/search/tree/master/docs

Tableの initialize() でビヘイベアを追加


同じく Table の initialize() に検索条件のテンプレートのようなもので コレクション を記載する。


解りにくいけど useCollection() から次の useCollection() までが1つのコレクションとなるみたい。

add() で追加できる1検索条件は色々なタイプが用意されている。

add() の第2パラメーターで、指定する他、メソッドからも検索タイプを指定可能。
この方が phpstorm とかなら候補で出てくるので解りやすい。

フィルター

  1. value()
    完全一致で検索をする。
  2. like()
    LIKE検索をする。
  3. boolean()
    結果を true または false で検索をする。
    ※true にはデフォルトで 1、true、 '1'、 'true'、 'yes'、 'on' を含む。
  4. exists()
    対象カラムがNOT NULLかを検索する。
  5. finder()
    finder****() という関数を使用して検索する。
    https://book.cakephp.org/3/ja/orm/retrieving-data-and-resultsets.html#custom-find-methods
  6. compare()
    比較演算子(>, <= など)を使って検索する。
  7. callback()
    コールバック関数を使って検索する。



対応オプジョン

共通で利用できるオプジョン

  1.  fields (array)
    検索に使用するフィールドの名前を指定する。
  2. name (string、デフォルトでは、add filterメソッドの最初の引数に渡された名前になります)
    フィルターの名前をフィールドとは別にしたい場合に利用する。
  3. alwaysRun (bool、デフォルトはfalse)
    存在するかどうかに関係なく、フィルタを常に実行するかどうかを定義する。
  4. filterEmpty (bool、デフォルトはfalse)
    空の場合に、フィルターを実行しないかどうかを定義する。
  5. flatten (bool、デフォルトはtrue)
    入力フォームから配列として渡される値をフラット化するかどうかを定義する。
  6. beforeProcess (callable、デフォルトはnull)
    $queryと$argsを引数として受け取ります。たとえば、クエリに結合または包含を設定するためにコールバックを使用。
  7. aliasField (bool、デフォルトはtrue)
    フィールド名にエイリアスを設定する場合に利用する。
  8. defaultValue (mixed、デフォルトはnull)
    デフォルト値を指定する。

Boolean

  1. mode (string、デフォルトはOR)
    複数のフィールドと照合するときに使用する条件付きモード。
    有効な値は、ORとAND。

 Exists

  1. mode (string、デフォルトはOR)
    複数のフィールドと照合するときに使用する条件付きモード。
    有効な値は、ORとAND。
  2. nullValue (stringまたはnull、デフォルトはnull)
    null許容でない列に使用できます。
    =/の!=代わりにIS NULL/を介してチェックするには、空の文字列に設定しIS NOT NULLます。

Compare

  1. operator (string、デフォルトは>=)
    比較に使用する演算子。有効な値は>=、<=、>と<。
  2. mode (string、デフォルトはAND)
    複数のフィールドと照合するときに使用する条件付きモード。
    有効な値は、ORとAND。

Like

  1.  multiValue (bool、デフォルトはfalse)
    フィルターが複数の値を受け入れるかどうかを定義します。
    無効になっていて、複数の値が渡されている場合、フィルターは defaultValue オプションで定義されたデフォルト値の使用にフォールバックします。
  2. multiValueSeparator (string、デフォルトはnull)
     特定の区切り文字列を使用して、フィルターが複数の値を自動トークン化するかどうかを定義します。無効にした場合、データは配列の形式である必要があります。
  3. colType (array)
    連想配列。実際の型に関係なく、文字列列として扱う必要がある列のカスタム型を設定するために使用します。これは、整数フィールドが検索対象のフィールドの一部である場合など、整数フィールドにとって重要です。使用例: 'colType' => ['id' => 'string']
  4. before (bool、デフォルトはfalse)
    検索語の前にワイルドカードを自動的に追加するかどうか 。
  5. after (bool、デフォルトはfalse)
    検索語の後にワイルドカードを自動的に追加するかどうか 。
  6. fieldMode (string、デフォルトはOR)
    複数のフィールドと照合するときに使用する条件付きモード。有効な値は、ORとAND。
  7. valueMode (string、デフォルトはOR)
    複数の値を検索するときに使用する条件付きモード。有効な値は、ORとAND。
  8. comparison (string、デフォルトはLIKE)
    使用する比較演算子。
  9. wildcardAny (string、デフォルトは*)
    として扱われるべき文字列を定義する任意のそれは検索用語に遭遇している場合にワイルドカードを。この動作により、これは内部的に適切なSQL互換のワイルドカードに置き換えられます。これは、検索語内で実際のワイルドカード文字を使用して用語の一部として扱われるようにしながら、検索語内でワイルドカードを渡したい場合に役立ちます。たとえば、の検索語* has reached 100%はに変換され% has reached 100\%ます。さらに、オプションを参照してくださいescapeDriver。
  10. wildcardOne (string、デフォルトは?)
    検索語で検出された場合に1つのワイルドカードとして扱われる文字列を定義します。と同様に動作しwildcardAnyます_。つまり、検索語が使用された場合、実際のSQL互換ワイルドカード()はエスケープされます。
  11. escaper (stringへのデフォルトnull)
    エスケープする必要がありエスケー定義%とは_。エスケープ機能が設定されていない場合(escapeDriver => 'null')、エスケープ機能はデータベースドライバによって設定されます。ドライバがある場合 に使用される(エスケープするとします)。他のすべての場合に (エスケープに使用されるにし、に)。と設定にエスケープを追加することで、独自のエスケープを追加できます。SqlserverSqlserverEscaper%[%]_[_]DefaultEscaper%\%_\_App\Model\Filter\Escaper\OwnEscaper'escaper' => 'App.Own'

Value

  1. multiValue (bool、デフォルトはfalse)
    フィルターが複数の値を受け入れるかどうかを定義します。無効になっていて、複数の値が渡されている場合、フィルターはdefaultValueオプションで定義されたデフォルト値の使用にフォールバックします。
  2. multiValueSeparator (string、デフォルトはnull)
    特定の区切り文字列を使用して、フィルターが複数の値を自動トークン化するかどうかを定義します。無効にした場合、データは配列の形式である必要があります。
  3. mode (string、デフォルトはOR)
    複数のフィールドと照合するときに使用する条件付きモード。有効な値は、ORとAND。
  4. negationChar (string、デフォルトはnull)
    multiValue特に値が多い場合は、の代替。フィルタは任意の文字列を受け入れますが、理想的には、検索値のプレフィックスとして単一の一意の文字である必要があります。たとえば!、文字列値または-数値の場合。有効にすると、フィルターはこの値の式を無効にします。

Finder

  1. finder (string、デフォルトはフィルター名)
     使用する検索タイプ。
  2. map (array、デフォルトは[])
     フィールドをファインダーキー('to_field' => 'from_field')にマップする必要がある場合は、配列を構成します。
  3. options (array、デフォルトは[])
    ファインダーに渡す追加オプション。
 

2021年5月27日木曜日

[Flutter] flutter doctor で Android Studio が入っているのに認識してくれない時

Android Studio をインストールしてるのに

> flutter doctor

で確認すると

[!] Android Studio (not installed)

となる。。

そんな時は

 > flutter config --android-studio-dir="C:\Program Files\Android\Android Studio"

とインストール場所を教えてやると解決!!

[√] Android Studio



2021年5月22日土曜日

[CakePHP4] 翻訳ファイルの作成まで

翻訳辞書ファイル(.po)を作成するまでの手順

PS D:\prj\example.com\www.example.com> ./bin/cake i18n
I18n Shell
-------------------------------------------------------------------------------
[E]xtract POT file from sources
[I]nitialize a language from POT file
[H]elp
[Q]uit
What would you like to do? (E/I/H/Q)
> E
Current paths: None
What is the path you would like to extract?
[Q]uit [D]one
[D:\prj\example.com\www.example.com\src\] >

Current paths: D:\prj\example.com\www.example.com\src\
What is the path you would like to extract?
[Q]uit [D]one
[D:\prj\example.com\www.example.com\templates\] >

Current paths: D:\prj\example.com\www.example.com\src\, D:\prj\example.com\www.example.com\templates\
What is the path you would like to extract?
[Q]uit [D]one
[D] >

Would you like to extract the messages from the CakePHP core? (y/n)
[n] > y
What is the path you would like to output?
[Q]uit
[D:\prj\example.com\www.example.com\resources\locales\] >


Extracting...
-------------------------------------------------------------------------------
Paths:
   D:\prj\example.com\www.example.com\src\
   D:\prj\example.com\www.example.com\templates\
   D:\prj\example.com\www.example.com\vendor\cakephp\cakephp\src\
Output Directory: D:\prj\example.com\www.example.com\resources\locales\
-------------------------------------------------------------------------------
==========================================================================> 100%
default.pot is unchanged. Skipping.
cake.pot is unchanged. Skipping.

Done.

ここまでで .po ファイルの雛形となる .pot ファイルが作成される。

What would you like to do? (E/I/H/Q)
> I
Please specify language code, e.g. `en`, `eng`, `en_US` etc.
> ja_JP
What folder?
[D:\prj\example.com\www.example.com\resources\locales\] >

.po が ja_JP 以下に作成される。

2021年5月18日火曜日

[CakePHP4] bake template で index,view,add,edit 以外を追加

自分は
  • add.php
  • edit.php
  • index.php
  • view.php
以外にも form.php を作成していて、 add.php, edit.php からそれを呼び出して共通かしています。
なので、bakeコマンドで form.php も作ってほしい。

あと基本的には Bootstrap を利用しているので、テーマを自作してと。。
  • plugins/BootstrapTheme/templates/bake/Template/add.twig
  • plugins/BootstrapTheme/templates/bake/Template/edit.twig
  • plugins/BootstrapTheme/templates/bake/Template/index.twig
  • plugins/BootstrapTheme/templates/bake/Template/view.twig
  • plugins/BootstrapTheme/templates/bake/Template/form.twig
こんな感じ。

作成して 

$ ./bin/cake bake template

とするけど。。

いつも通り
  • add.php
  • edit.php
  • index.php
  • view.php
ができるだけ。。

form.php だけを追加するのは以下のようなコマンドでできるので、自分のそれで追加しています。。

$ ./bin/cake bake template samples form


2019年12月26日木曜日

[PHP] Amazon MWS API Feed のXMLをXSDファイルを利用してバリデート(検証)する

gontoraさんによる写真ACからの写真

Amazon MWS API を利用して出品する際にXMLで一覧を生成するのだが、その生成したXMLが正しいかを判別するために Amazon MWS API のドキュメントサイトで配布されている XSD を利用した。

http://docs.developer.amazonservices.com/ja_JP/feeds/Feeds_FeedType.html

注: XMLフィードの作成方法によっては、商品情報フィードではなく、アイテムフィードスキーマを使用するよう、出品者に求められます。

ほんまAmazon紛らわしいな。。
こんな紛らわしいのに開発環境提供してくれないし。。。

Item フィード
https://images-na.ssl-images-amazon.com/images/G/01/rainier/help/xsd/release_1_9/Item.xsd

Product フィード
https://images-na.ssl-images-amazon.com/images/G/01/rainier/help/xsd/release_1_9/Product.xsd

XSDを利用してのXML検証方法


$xml = new DOMDocument(); 
libxml_use_internal_errors(true);

$xml->load('./sample.xml');
 
if ($xml->schemaValidate('./validate.xsd')) { 
   echo "Success \n";
} 
else { 
    echo "Error \n"; 
    $errors = libxml_get_errors();
    foreach ($errors as $error) {
        echo display_xml_error($error, $xml);
    }
    libxml_clear_errors();
} 

function display_xml_error($error, $xml)
{
    $return  = $xml[$error->line - 1] . "\n";

    switch ($error->level) {
        case LIBXML_ERR_WARNING:
            $return .= "Warning $error->code: ";
            break;
         case LIBXML_ERR_ERROR:
            $return .= "Error $error->code: ";
            break;
        case LIBXML_ERR_FATAL:
            $return .= "Fatal Error $error->code: ";
            break;
    }

    $return .= trim($error->message) .
               "\n  Line: $error->line" .
               "\n  Column: $error->column";

    if ($error->file) {
        $return .= "\n  File: $error->file";
    }
}

2019年11月20日水曜日

composer 削除方法

$ composer remove --no-update phpoffice/phpexcel
$ composer update --dry-run

Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 0 installs, 0 updates, 1 removal
  - Uninstalling phpoffice/phpexcel (1.8.2)

- Uninstalling *** をアップデートで削除

$ composer update phpoffice/phpexcel

複数該当する場合

Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 0 installs, 0 updates, 1 removal
  - Uninstalling phpoffice/phpexcel (1.8.2)
  - Uninstalling phpoffice/hoge (1.8.2)
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.

$ composer update phpoffice/phpexcel phpoffice/hoge

2019年7月25日木曜日

MySQL Workbench 8.0.17 では MySQL 5.1.73 に接続できない



MySQL Workbench 8.0.17
https://dev.mysql.com/downloads/workbench/8.0.html

MySQL Workbench 8.0.17 にアップデートしてさあ繋げようと思ったら繋がらない。。


「Bad handshake」やってさ。

で、何でやろって調べてたらこんな記事発見

https://www.urtech.ca/2019/01/solved-bad-handshake-mysql-workbench-failed-to-connect-to-sql/

どうやら、MySQL Workbench 8.0.17 では MySQL 5.1.73 に接続できないみたい。

で、解決策は古いバージョンを使いなさいと。

MySQL Workbench 6.3.10
https://dev.mysql.com/downloads/workbench/6.3.html

で入れたら動いたとさ。

Ver 期限
5.7 2020年10月
5.6 2018年2月
5.5 2015年12月
5.1 2013年12月
5.0 2011年12月

サポートも切れてるし仕方ないね。。

2019年7月11日木曜日

[PhpStorm] 2019にバージョンアップしたらフォントが小さくて見にくくなった。。特にドットが酷い。。

自分はできるだけツールはデフォルトの設定で使うようにしている。

理由は環境の構築の時に設定が大変だから。。
頑張って設定してもバージョンアップしたらその設定ができるとは限らないから。。
作者がこのツールではこの設定が良いと思っているものがデフォルトだろうから。。

と、まー理由はどうでもいいけどライセンス更新と合わせて phpstorm 2019にアップデート。

2018の時は特にカラースキーマの変更だけで使えたんだけど、phpstorm 2019 にアップデートして明らかにフォント小さくなった。。

.(ドット) と [半角スペース] の区別ができない。。

それでも我慢した。。
もう無理。。。

って事で数ヶ月頑張ったけどやっぱり変更します。。

カラースキーマ: Monokai



フォント: Source Code Pro



あ~ スッキリ♪

2019年5月8日水曜日

PhpStorm 割引販売のご紹介


https://secure.samuraism.com/referral/8BAEF98D2EE87690D23BB03ED3A7F393

PhpStorm は300円しか割引ありませんが、無いよりは良いですしね。
サムライズムって会社は2018年8月くらい(?)からの日本正規代理店みたいです。

2019年3月26日火曜日

PHPソースからフロー図の自動作成 Visustin以外で

以前 Visustin というツールを利用してPHPのソースからフロー図を作成しようとしただけど、何かしっくり来ない。。

そして別のツールが無いかなと探していたらこんなブラウザアプリを発見した。

code2flow
https://code2flow.com/


無料プランもあるみたい。

早速トップページ画面右上の GET STARTED から試してみた。



自分は今、メインで CakePHP3 を利用しているので、サンプルソースに ブックマークチュートリアル を利用した。

ブックマークチュートリアル
https://book.cakephp.org/3.0/ja/tutorials-and-examples/bookmarks/intro.html

Gut Hub
https://github.com/cakephp/bookmarker-tutorial



早速ソースをコピペしてみるとこんな感じに。
ん~ さすがに見やすい! とはならないけど、コメントもオレンジで表示されてて便利だ。
ソースやフロー図のところをマウスオーバーすると対となる箇所にガイドが付いて解りやすい。

ソースレビューなどを行う時にこれは便利な気がする。

なかなかこまめに使う場面が自分には無いけども、良いものを見つけたかな。

Followers