家族のスリッパで遊ぶ著者
【PHP】cronでWEBアクセスと全く同じ動作を行いたい
ブラウザで動作するWEBシステムで、
使用しているプログラムをcronから呼んだらうまくいかない、
WEBアクセスしたときと結果が違う、
ということはないでしょうか。
cronからPHPをコマンドで実行した場合、
環境変数などの実行環境がWEBとは異なるため
全く同じ動作を行う保証がなく、予測しにくい不具合を生みます。
そこで私は、バッチ処理などでcronからphpを呼ぶ場合は
wgetを使っています。
こんな感じでwgetを呼ぶシェルをcronにセットするだけです。
batch.sh
1 2 3 |
url=https://example.com/test/test1.php?param1=AAA log=/tmp/test1.log wget -q --no-check-certificate ${url} -O ${log} |
これでWEBアクセスと同じ動作を行わせることができます。
重複実行防止処理はphp側で行っています。
もし時間のかかる処理ならwgetのオプションにタイムアウトの指定をします。
1 |
wget --read-timeout=3600 -q --no-check-certificate ${url} -O ${log} |
飼い主の手に穴をあけるのが日課の著者
飼い主の手に穴をあけるのが日課の著者
【PHP】配列を任意の項目でソートする
連想配列を1データとする配列を任意の項目でソートしたい場合
データの例
1 2 3 4 5 |
$list = [ {'name': '佐藤', 'age': 35, 'gender': 1}, {'name': '鈴木', 'age': 25, 'gender': 2}, {'name': '田中', 'age': 45, 'gender': 1}, ]; |
年齢で昇順でソート
1 2 3 4 5 |
$sort = []; foreach($list as $row) { $sort[] = $row['age']; } array_multisort($sort, SORT_ASC, SORT_NUMERIC , $list); |
名前+性別の降順でソート
1 2 3 4 5 |
$sort = []; foreach($list as $row) { $sort[] = $row['name'] . $row['gender']; } array_multisort($sort, SORT_DESC, SORT_STRING , $list); |
【Linux】PDFから文字を抽出する pdftotext
PDFから文字を抽出というと、OCRという技術が必要なイメージですが、
紙をスキャンしたPDFや、画像から生成したPDFなどではなく
文字を抽出できるタイプのPDFの場合、もっと簡単な方法があります。
pdftotextというコマンドを使用します。
1 |
pdftotext (読込むPDFファイル) (出力するテキストファイル) |
たとえばAcrobatやWord、Excelなどから作成したPDFなら
これだけでテキストが抽出できます。