AMPモードで画像タグ必須のwidthとheightを全記事一括取得するPHPコード

NO IMAGE FILE
投稿日時
更新日時
カテゴリWEBマスター
画像枚数0枚
月間PV532
良い37
悪い2
タグ

AMPモードでは画像タグ<img>に横幅Widthと縦幅Heightの属性が必須でいずれか一つでも欠けていると画像が全く表示されません。PDOのSQL文で正規表現を使ってWidthが無いもの、Heightが無いもの、それぞれWhere Likeして記事の画像タグを抽出し、getimagesize関数で一気に取得することができました。

getimagesize
array getimagesize ( string $filename [, array &$imageinfo ] )
function setsize($matches){
    list($w, $h) = getimagesize($matches[2]);
    return '<img' . $matches[1] . 'src="'.$matches[2].'" '. $matches[3] . ' width="' . $w . '" height="' . $h . '">';
}

foreach ($stmt as $row) {
    $content = preg_replace_callback(
        "/<img(.+?)src=\"(.+?)\"(.+?)>/",
        "setsize",
        $row['content']);
    $pdo->query("UPDATE article SET content = '{$content}' WHERE id={$row['id']}");
}

preg_replace_callback関数は複雑な正規表現の置換に適しており、独自関数をブチ込めます。それによって正規表現置換でgetimagesize関数が実現されます。

注意事項
既にwidthやheightが付いていた場合、うまく絞れていないとwidth="596" height="299" width="596" height="299"と重複します。