【phpSpreadsheet】PHPでExcelを読み込んだらグラフが消える

phpSpreadsheetを長らく使っていますが、
あるとき「読み込んだExcelのグラフをそのまま出力したい」
という要望がありました。

何も考えずにグラフも読み込めるだろうと
過去のシステムからphpSpreadsheet使用部分をコピペして持ってきたところ、
出力したExcelはグラフだけ消えてしまいました。

知っている人にとってはなんということはないのですが、
グラフ付きのExcelを読み込むときは、Readerに対して

という設定が必要だとわかりました。

また、出力時も同様に、Writerに対して

が必要でした。

この歳になってまたひとつ勉強になりました。

例)

【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を強制的に指定するパラメータを追加することができます。

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でページをとってきて

phpQueryに読み込ませれば

あとは、いろんな条件でデータを抽出するだけ

タグで抽出

IDで抽出

クラス名で抽出

【PHP】連想配列をXMLに変換する

XMLの需要は、まだある。

【PHP】クリックジャッキング対策

クリックジャッキング対策