- 投稿日:2019-12-30T21:09:30+09:00
PHP 逆ポーランド記法
逆ポーランド記法とは
- 被演算子の後ろに演算子を表記する演算記法。
- 後置記法(Reverse Polish Notation, RPN)という。
- 10+20 → 10 20 +
主な手順
- 式を一つ一つ分割し、演算子以外であればスタックに積む(PUSH)。
- 演算子であればスタックから数字を取り出す(POP)。
- 演算結果をスタックに積む。
<?php function calcRPN($str) { // 式を空白文字でトークンに分割する $tokens = preg_split('#\s+#', trim($str)); $stack = []; // スタックを準備 foreach ($tokens as $t) { // 数値 if (preg_match('#^[0-9\.]+$#', $t)) { $stack[] = floatval($t); continue; } // 四則演算 $b = array_pop($stack); //スタックの末尾から要素を取り除く $a = array_pop($stack); switch ($t) { case '+': $c = ($a + $b); break; case '-': $c = ($a - $b); break; case '*': $c = ($a * $b); break; case '/': $c = ($a / $b); break; case '%': $c = ($a % $b); break; default: return "error"; } $stack[] = $c; //演算結果をスタック末尾に入れる } return array_pop($stack); } $str = '10 20 30 * + 40 - 50 +'; echo calcRPN($str); //620
- 投稿日:2019-12-30T20:19:18+09:00
bashでhealth check
bashでhealth checkのめも
php-fpmとcrondを監視します
#!/bin/bash while true do PHP=`sudo ps ax | grep 'php-fpm: master' | grep -v grep | wc -l` CROND=`sudo ps ax | grep 'crond' | grep -v grep | wc -l` if [ $PHP = 1 ] && [ $CROND = 1 ] ; then echo "HTTP/1.0 200 Ok" | nc -l 8080 else echo "HTTP/1.0 500 NG" | nc -l 8080 fi [ $? != 0 ] && break done
- 投稿日:2019-12-30T17:03:07+09:00
?【Laravel】register_shutdown_function()使うときは配列にして$thisも渡す
環境
PHP 7.3.10
Laravel 6.5.0やりたいこと
関数の実行終了前に任意の関数呼び出すregister_shutdown_function()をLaravelで使いたい
が、こいつを書くと下記の例外が発生するErrorException register_shutdown_function(): Invalid shutdown callback 'HogeHoge' passedどうやらインスタンスメソッドである「$this」を渡さないといけない様子
やったこと
引数を配列にして$thisと対象の関数名を渡す
HogeController.php/** * 完了前にコールバックを呼び出したい関数 * * @param Request $request */ public function doSomething(Request $request) { // 色々処理します // ... // ❌例外発生パターン register_shutdown_function('HogeHoge'); // ?これで実行できます register_shutdown_function([$this, 'HogeHoge']); return back(); } /** * 実行完了時に呼びだされるコールバック関数 * * @return void */ public function HogeHoge(): void { // ログ作成、終了処理等の何かをする // ... }結果
例外なく呼び出せます
$thisじゃなくても指定できそうにも見えますCakePHPでも同じ方法で解決できました
- 投稿日:2019-12-30T13:08:50+09:00
パフォーマンスのために生まれたPHP Excel拡張機能xlswriter 1.3.3がリリースされました!
xlswriterは、Excel 2007+ XLSXファイルからデータを読み取り、複数のシートを挿入し、テキスト、数値、数式、日付、チャート、写真、ハイパーリンクを書き込むために使用できるPHP C拡張です。
以下の機能があります。
I.書き込み
100%互換性のあるExcel XLSXファイル
-完全なExcel形式
-セルの結合
-ワークシート名を定義する
-フィルター
-チャート
-データの検証とドロップダウンリスト
-ワークシートPNG / JPEG画像
-大きなファイルを書き込むためのメモリ最適化モード
Linux、FreeBSD、OpenBSD、OS X、Windowsで実行
-32ビットおよび64ビットにコンパイル
-FreeBSDライセンス
-唯一の依存関係はzlibです次に、読みます
-データを完全に読み取る
-カーソル読み取りデータ
-データ型による読み取り
-xlsxからCSV#ベンチマーク
テスト環境:Macbook Pro 13インチ、Intel Core i5、16GB 2133MHz LPDDR3メモリ、128GB SSDストレージ。
エクスポート
2つのメモリモードで100万行のデータをエクスポートできます(1行あたり27列、データタイプは文字列、文字列の長さは19)
-通常モード:時間のかかる「29S」、メモリのみ「2083MB」が必要です。
-固定メモリモード:52Sのみ、メモリ<1MBのみ。インポート
100万行を超えるデータ(単一行、1列、データ型はINT)
-フルボリュームモード:「3S」には時間がかかり、「558MB」のメモリのみ。
カーソルモード:時間のかかる「2.8S」、メモリのみ「<1MB」。#クイックスタート
エクスポート
$excel = new \Vtiful\Kernel\Excel(['path' => '/home/viest']); // fileName 会自动创建一个工作表,你可以自定义该工作表名称,工作表名称为可选参数 $filePath = $excel->fileName('tutorial01.xlsx', 'sheet1') ->header(['Item', 'Cost']) ->data([ ['Rent', 1000], ['Gas', 100], ['Food', 300], ['Gym', 50], ]) ->output();インポート
$excel = new \Vtiful\Kernel\Excel(['path' => './tests']); $filePath = $excel->fileName('tutorial.xlsx') ->header(['Item', 'Cost']) ->output(); $data = $excel->openFile('tutorial.xlsx') ->openSheet() ->getSheetData(); var_dump($data); // [['Item', 'Cost']]XLSXtoCSV [通常モード]
適用シナリオ
-より多くのxlsxファイルフラグメントを統合処理のために1つのCSVファイルにマージします。
-xlsxファイルは、タスク処理速度よりも速く追加されます。ファイルが非同期でCSVに変換された後、より効率的なツール(たとえば、データベースツールがCSVを直接インポートする)で処理できます。例
demo.php
$excel = new \Vtiful\Kernel\Excel(['path' => './tests']); $filePath = $excel->fileName('tutorial.xlsx', 'TestSheet1') ->header(['String', 'Int', 'Double']) ->data([ ['Item_1', 10, 10.9999995], ]) ->output(); $fp = fopen('./tests/file.csv', 'a'); $resultBoolOne = $excel->openFile('tutorial.xlsx') ->openSheet() ->putCSV($fp); $resultBoolTwo = $excel->openFile('tutorial.xlsx') ->openSheet() ->putCSV($fp);file.csv
String,Int,Double Item_1,10,10.9999995 String,Int,Double Item_1,10,10.9999995Xlsx移行CSV [コールバックモード]
このアプリケーションシナリオは従来のモデルと似ていますが、上位レベルの企業はコールバック関数を使用してデータを処理し、xlsxを使用してデータをフィルター処理し、csvに書き込むことができます。
ドキュメントの他の機能を見る
https://xlswriter-docs.viest.me
倉庫住所
GitHub:https://gitee.com/viest/php-ext-xlswriter
PECL:https://pecl.php.net/package/xlswriter
終わり
それがあなたを助けるなら、私に星をください
- 投稿日:2019-12-30T10:41:40+09:00
PHP,Pythonでの一時的なAWS認証情報の取得
はじめに
AWSのEC2にアクセスキーを発行するのはアンチパターン。
キーが盗まれて使われることがあるので、キーは発行しないのが一番良い。
EC2にIAMロールっていう一時的なアクセスキーを発行するのが良いパターン。Pythonで使う
run.pyimport boto3 session = boto3.session.Session(profile_name='prodaccess') credentials = session.get_credentials() # この値をbotoとかで自由に使って。 print(credentials.access_key) print(credentials.secret_key) print(credentials.token)PHPで使う
Laravelで使う
aws-sdk-php-laravelってライブラリがある。
aws-sdk-php-laravel
IAM Roleを使ってAWS ElasticSearch ServiceのデータをLaravelで取得する
公式 AWS SDK for PHP への一時認証情報の提供composer require aws/aws-sdk-phpcomposer.json{ "require": { "aws/aws-sdk-php-laravel": "~3.0" } }公式の通りだけど
- 投稿日:2019-12-30T08:16:58+09:00