【WordPress】スマホでブログ記事を投稿したい!
スマホから画像をFTPするだけで自動圧縮&URLコピーできる仕組みを自作してみた!

ども。
今日も生きかた研究中Dadです。
先月から毎日ブログ更新にチャレンジしています。
文章を書くのは慣れてきましたが、ひとつ大きな壁にぶつかりました。
それは——
「画像のアップロード、めっちゃ面倒くさい問題…!」
現在の画像アップロードの流れ
僕は、iPhoneで撮った写真をこんな手順でブログに使っています。
- iPhoneで写真撮影
- 拡張子を変換(※)しながらアプリ「FTP manager」でサーバーにアップロード
→/public_html/optimized/250714/
みたいに、日付でフォルダ分け
※iPhoneの場合「.heic」という拡張子で画像が保存されます。 - PCでその画像を一度ダウンロード
- Webの画像圧縮サイト(TinyPNGなど)で容量を軽くする
- 圧縮済み画像を再びFTPでアップし直して上書き
- WordPressのブロックエディタで「画像URLを直指定」して記事に埋め込む
これ、1記事に写真が5枚あると、相当な手間です。
なぜFTP管理なのか?
WordPressには「メディアライブラリ」がありますが、僕はFTP管理を選択しています。
その理由は以下3点です。
- WordPress機能の自動生成機能を避けたい
サムネイル生成や「大」「中」「小」自動リサイズを避けて、必要な画像だけを読み込ませたい - ページ表示を軽くしたい
WordPress標準のアップロードよりも、容量を圧縮して高速化できる - 日付フォルダで管理したい
後から差し替えや削除がしやすい

でも正直…面倒くさい!
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 "✅ 圧縮完了";
?>
PHPimage-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行を記述します。
これで、https://example.com/optimized/
にアクセスしても一覧は表示されなくなり、
直接URLがわからない限り画像は見えません。
パーミッション設定に注意
何回やってもうまくいかず、ちゃとくんからサーバ側のパーミッション設定で権限がないのではないかと指摘を受けました。
フォルダ・ファイル | 推奨パーミッション | 補足 |
---|---|---|
/optimized/ 各日付フォルダ | 755 | 書き込み可能に(www-data 所有など) |
compress.php / image-list.php | 644 | PHP実行に必要な最低限の設定 |
💡よくあるトラブル
- imagejpeg() で「Permission denied」→ フォルダに書き込み権限がない
- mkdir() に失敗する → optimized フォルダ自体が制限されてる

実際の使い方フロー
- スマホで写真を撮影
- FTPマネージャーで
/upload
に画像をアップ https://example.com/compress.php
を開いて圧縮処理https://example.com/image-list.php
などでURLコピー- WordPressに画像URLを貼り付けて使うだけ!

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

まとめ
最終的にiPhoneでブログ記事投稿までできるのが目標ですが、この設定でだいぶ楽になったかなと思います。
ちゃとくんがどんどん提案してくれるので、備忘録として記事にしました。
わかりにくい記事でごめんなさい。この記事も必要に応じてアップデートしていこうと思います。
ではまた!
注意事項・免責事項
- 本記事で紹介しているPHPスクリプトはあくまで参考用です。環境に合わせて調整してください。
- サーバー設定やファイル権限が適切でない場合、正常に動作しない可能性があります。
- 実運用の際は
.htaccess
によるディレクトリ保護やアクセス制限も検討してください。 - 不要なスクリプトはサーバー上から削除、またはアクセス制限をかけてください。
- 当記事の内容による不具合・損害等について、筆者および当サイトは責任を負いかねます。