|
1 2 3 4 5 6 7 8 |
// BOMがついていたらBOMを削除して保存 $filepath = 'hoge.csv'; $contents = file_get_contents($filepath); $bom = pack('H*','EFBBBF'); if(substr($contents, 0, 3) === $bom) { $contents = substr($contents, 3); file_put_contents($filepath, $contents); } |
phpSpreadSheetで円グラフの色を指定する方法
phpSpreadSheetで円グラフ、ドーナツグラフの各値の色を指定する方法が分からず、
調べても情報がヒットせず、あきらめかけていたのですが、自分でいろいろ試していたらできました。
PhpOffice\PhpSpreadsheet\Chart\DataSeriesValues で描画データをセットする際に、
7番目の引数に配列で指定すればいいみたいです。
例)
|
1 2 3 4 5 6 |
$colors = ['0A82B0', '0F9ED5', 'A0C7E5']; $arrDataSeriesValues1 = array( new PhpOffice\PhpSpreadsheet\Chart\DataSeriesValues( PhpOffice\PhpSpreadsheet\Chart\DataSeriesValues::DATASERIES_TYPE_NUMBER, 'ダッシュボード!$G$9:$G$11',NULL, 5, [], null, $colors), ); |
系列ラベルやX軸ラベルの指定時ではなく描画データの指定時なので注意。
最初からグラフを挿入したExcelを読み込めばいいじゃないと考えたのですが
読込んだExcelを更新して保存→PDF変換をする際にどうしてもグラフが消えてしまう事象があり解決できませんでした。
なのでphpSpreadSheetで自分でグラフを描くことにしました。
方法はとにかく、クライアントの要望どおりにやりたいことができたのでよしとします。
【phpSpreadsheet】PHPでExcelを読み込んだらグラフが消える
phpSpreadsheetを長らく使っていますが、
あるとき「読み込んだExcelのグラフをそのまま出力したい」
という要望がありました。
何も考えずにグラフも読み込めるだろうと
過去のシステムからphpSpreadsheet使用部分をコピペして持ってきたところ、
出力したExcelはグラフだけ消えてしまいました。
知っている人にとってはなんということはないのですが、
グラフ付きのExcelを読み込むときは、Readerに対して
|
1 |
setIncludeCharts(true) |
という設定が必要だとわかりました。
また、出力時も同様に、Writerに対して
|
1 |
setIncludeCharts(true) |
が必要でした。
この歳になってまたひとつ勉強になりました。
例)
|
1 2 3 4 5 6 7 8 9 10 11 |
// Reader $excel_reader = new PhpOffice\PhpSpreadsheet\Reader\Xlsx(); $excel_reader->setIncludeCharts(true); $book = $excel_reader->load('template.xlsx'); // ~Excel編集処理~ // Writer $excel_writer = new PhpOffice\PhpSpreadsheet\Writer\Xlsx($book); $excel_writer->setIncludeCharts(true); $excel_writer->save('output.xlsx'); |
【PHP】Return-Path未指定だと迷惑メール扱いになるケース
最近クライアントからの依頼で、Gmail宛てのメールが届かない問題の解消というのがありました。
調べてみると、迷惑メールフォルダに入っていました。
メールヘッダーを確認したところ、
SPF:pass
DMARC:fail
という結果になっていました。
DMARCがNGなのが迷惑メール判定された理由だろうと推測できます。
そしてDKIMはなぜか事情があって設定できないらしいです。
SPFがpassなのになぜDMARCがfailなのかというと、
送信元ドメインが正常にSPFレコードに指定されていればSPFはpassとなりますが
DMARCのSPF判定条件はそれだけではありません。
送信元アドレスとReturn-Pathヘッダーが一致していなければ
SPFアライメントの不一致となり、
さらにDKIMが未設定の場合はなりすましかどうかの判断がつかず、DMARCはNGとなります。
今回の件では、メール送信にPHPのmail関数が使われていました。
mail関数(mb_send_mailも同じだが)では5つ目の引数に
Return-Pathを強制的に指定するパラメータを追加することができます。
|
1 2 3 4 |
$from = '(送信元アドレスが入る)'; $additional_params = '-f' . $from; mail($to, $subject, $body, $additional_headers, $additional_params); // (他の引数は省略) |
Return-Pathを指定しない場合、
SMTPサーバー側で指定されたアドレスが自動的に入ります。
レンタルサーバーの場合、初期ドメインの管理者アドレスが自動で入ることになり、
SPFアライメントは不一致となります。
Return-PathにFromと同じアドレスを入れる改修を行った結果、
迷惑メール扱いされず届くようになりました。
【PHP】PHPで簡単にスクレイピング
phpQueryというライブラリを使えば
PHPでも非常に簡単にスクレイピングできます。
phpQuery
https://code.google.com/archive/p/phpquery/downloads
onefileという名前がついた最新のものをダウンロードします。
PHP1つなのでインストールもインクルードも簡単なので省略します。
使い方も簡単で、file_get_contentsでページをとってきて
|
1 |
$html = file_get_contents('スクレイピングしたいページ'); |
phpQueryに読み込ませれば
|
1 |
$query = phpQuery::newDocument($html); |
あとは、いろんな条件でデータを抽出するだけ
タグで抽出
|
1 |
$data = $query->find("タグ")->text(); |
IDで抽出
|
1 |
$data = $query->find("#ID")->text(); |
クラス名で抽出
|
1 |
$data = $query->find(".クラス名")->text(); |
