【WordPress】スマホでブログ記事を投稿したい!

スマホから画像をFTPするだけで自動圧縮&URLコピーできる仕組みを自作してみた!

ども。
今日も生きかた研究中Dadです。


先月から毎日ブログ更新にチャレンジしています。

文章を書くのは慣れてきましたが、ひとつ大きな壁にぶつかりました。

それは——
「画像のアップロード、めっちゃ面倒くさい問題…!」

現在の画像アップロードの流れ

僕は、iPhoneで撮った写真をこんな手順でブログに使っています。

  1. iPhoneで写真撮影
  2. 拡張子を変換(※)しながらアプリ「FTP manager」でサーバーにアップロード
     → /public_html/optimized/250714/ みたいに、日付でフォルダ分け
    ※iPhoneの場合「.heic」という拡張子で画像が保存されます。
  3. PCでその画像を一度ダウンロード
  4. Webの画像圧縮サイト(TinyPNGなど)で容量を軽くする
  5. 圧縮済み画像を再びFTPでアップし直して上書き
  6. WordPressのブロックエディタで「画像URLを直指定」して記事に埋め込む

これ、1記事に写真が5枚あると、相当な手間です。

なぜFTP管理なのか?

WordPressには「メディアライブラリ」がありますが、僕はFTP管理を選択しています。
その理由は以下3点です。

  • WordPress機能の自動生成機能を避けたい
    サムネイル生成や「大」「中」「小」自動リサイズを避けて、必要な画像だけを読み込ませたい
  • ページ表示を軽くしたい
    WordPress標準のアップロードよりも、容量を圧縮して高速化できる
  • 日付フォルダで管理したい
    後から差し替えや削除がしやすい
FTPManager

でも正直…面倒くさい!

FTPでフォルダ管理してる人には分かると思うのですが、
「圧縮のためにPCに一度戻す」っていう作業がとにかく手間。

だからちゃとくん(ChatGPT)にまるごと相談してみました。

完成した仕組み(できること)

  • スマホで撮影 → FTPアプリでサーバーに画像保存
  • PHPスクリプトが自動で画像圧縮(約80%) & リサイズ(横800px)
    ※指定可能
  • PHPスクリプトが日付フォルダを自動作成し、圧縮後の画像を保存
  • PHPスクリプトがブラウザでサムネイル付き画像リストを生成
  • さらにURLコピーボタンで一発コピー

ディレクトリ構成(例)

💡ディレクトリ構成(例)
/public_html
├── upload/
├── optimized/
│ ├── 240101/
├── compress.php
└── image-list.php
  • 「upload」(空)フォルダと「optimized」(空)フォルダをpublic_html直下に準備します。
  • 「upload」フォルダに画像を保存します。
  • https://example.com/compress.phpへのアクセスがトリガーとなり圧縮スクリプトを実行します。
  • 「optimized」フォルダに圧縮&リサイズ済の画像が保存されます。
  • https://example.com/image-list.php」サムネイル付き画像リストを自動生成します。

compress.php(自動圧縮処理と日付フォルダの生成)


<?php
date_default_timezone_set('Asia/Tokyo');

$uploadDir = __DIR__ . '/upload';
$today = date('ymd');
$saveDir = __DIR__ . "/optimized/$today";

if (!file_exists($saveDir)) {
    mkdir($saveDir, 0755, true);
}

$images = glob("$uploadDir/*.{jpg,jpeg,png}", GLOB_BRACE);

foreach ($images as $img) {
    $filename = basename($img);
    $savePath = "$saveDir/$filename";

    if (file_exists($savePath)) continue;

    $src = @imagecreatefromstring(file_get_contents($img));
    if (!$src) continue;

    $width = imagesx($src);
    $height = imagesy($src);
    $newWidth = 800;
    $newHeight = intval($height * ($newWidth / $width));

    $dst = imagecreatetruecolor($newWidth, $newHeight);
    imagecopyresampled($dst, $src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

    imagejpeg($dst, $savePath, 80);
    imagedestroy($src);
    imagedestroy($dst);
}

echo "✅ 圧縮完了";
?>
PHP

image-list.php(画像URL一覧+コピー機能)

<?php
$baseUrl = 'https://example.com/optimized/';

$folder = $_GET['d'] ?? '';
if (!$folder) {
    echo "日付(d=240101など)を指定してください。";
    exit;
}

$targetDir = __DIR__ . "/optimized/$folder";
$webDir = $baseUrl . $folder . '/';

if (!is_dir($targetDir)) {
    echo "指定されたフォルダは存在しません。";
    exit;
}

$images = glob("$targetDir/*.{jpg,jpeg,png}", GLOB_BRACE);

echo "<h2>📸 圧縮済み画像一覧($folder)</h2>";
echo "<p>クリックでURLコピーできます。</p>";

foreach ($images as $img) {
    $filename = basename($img);
    $url = $webDir . $filename;
    echo "<div style='margin-bottom:8px;'>
        <input type='text' value='$url' id='$filename' style='width:80%;' readonly>
        <button onclick=\"navigator.clipboard.writeText('$url')\">コピー</button>
    </div>";
}
?>
PHP

.htaccess でセキュリティ対策(一覧非表示)

セキュリティ対策として、画像ディレクトリの中身を丸見えにしないために .htaccess を使います。

/optimized/ フォルダ内に .htaccess を作成し、以下の1行を記述します。

Options -Indexes

これで、https://example.com/optimized/ にアクセスしても一覧は表示されなくなり、
直接URLがわからない限り画像は見えません。

パーミッション設定に注意

何回やってもうまくいかず、ちゃとくんからサーバ側のパーミッション設定で権限がないのではないかと指摘を受けました。

フォルダ・ファイル 推奨パーミッション 補足
/optimized/ 各日付フォルダ 755 書き込み可能に(www-data 所有など)
compress.php / image-list.php 644 PHP実行に必要な最低限の設定
💡よくあるトラブル
  • imagejpeg() で「Permission denied」→ フォルダに書き込み権限がない
  • mkdir() に失敗する → optimized フォルダ自体が制限されてる

実際の使い方フロー

  1. スマホで写真を撮影
  2. FTPマネージャーで /upload に画像をアップ
  3. https://example.com/compress.php を開いて圧縮処理
  4. https://example.com/image-list.php などでURLコピー
  5. WordPressに画像URLを貼り付けて使うだけ!
画像リストが作られます

さらにiPhone側でショートカットを作成

3.4.を楽にするためにiPhone標準アプリのショートカット機能を使って、ホーム画面に保存。ワンタッチで実行と画像リストが開くように工夫しました。

iPhone標準の「ショートカット」アプリ

まとめ

最終的にiPhoneでブログ記事投稿までできるのが目標ですが、この設定でだいぶ楽になったかなと思います。

ちゃとくんがどんどん提案してくれるので、備忘録として記事にしました。

わかりにくい記事でごめんなさい。この記事も必要に応じてアップデートしていこうと思います。

ではまた!

注意事項・免責事項

  • 本記事で紹介しているPHPスクリプトはあくまで参考用です。環境に合わせて調整してください。
  • サーバー設定やファイル権限が適切でない場合、正常に動作しない可能性があります。
  • 実運用の際は .htaccess によるディレクトリ保護やアクセス制限も検討してください。
  • 不要なスクリプトはサーバー上から削除、またはアクセス制限をかけてください。
  • 当記事の内容による不具合・損害等について、筆者および当サイトは責任を負いかねます。

無料メルマガ講座『@モアグリ通信』

モアグリ通信紹介バナー

いますぐ『@モアグリ通信』を読んでみたい方はこちらから!

お名前(空白・ニックネームでもOK)

メールアドレス

※オレンジフォームの確認ページが開きます。