iPhone で撮った写真を無線でコンピュータへアップロード

(2025-11-15)

新しい iPhone は type-c 端子なので、これまでのようにケーブルを使って写真をコンピュータにコピーすることができません。

そのためだけに、対応のケーブルや端子を購入するのも面倒ですし、そもそもケーブルを接続して写真をコンピュータにコピーするのは面倒です。

例によって chatGPT に相談したのですが、最初のうちは動かない samba をインストールさせられたりしていました。

でも、linux mint で apache + php 環境は構築してあるので php を使ってファイルをアップロードするのが最も簡単だと気づいてあっという間に解決しました。

ディレクトリ作成

コマンドラインから写真保存用のディレクトリを作成します。

mkdir -p /var/www/html/iphone_upload/uploads

以下のようにしてパーミッションを変更します。

cd /var/www/html/iphone_upload
sudo chown -R www-data:www-data uploads
sudo chmod -R 775 uploads

php プログラム

以下のような php を作成します。

/var/www/html/iphone_upload/index.php
<?php
// アップロード先のベースフォルダ
$base_dir = "uploads/";
date_default_timezone_set('Asia/Tokyo'); // タイムゾーン設定
// アップロード日時でフォルダ分け
$today = date("Y-m-d");
$target_dir = $base_dir . $today . "/";
if (!file_exists($target_dir)) {
mkdir($target_dir, 0777, true);
}
// アップロード処理
$messages = [];
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['fileToUpload'])) {
foreach ($_FILES['fileToUpload']['name'] as $key => $name) {
$tmp_name = $_FILES['fileToUpload']['tmp_name'][$key];
$error = $_FILES['fileToUpload']['error'][$key];
if ($error === 0) {
$target_file = $target_dir . basename($name);
if (move_uploaded_file($tmp_name, $target_file)) {
$messages[] = "Upload successful: " . htmlspecialchars($name);
} else {
$messages[] = "Failed to move file: " . htmlspecialchars($name);
}
} else {
$messages[] = "Error uploading file: " . htmlspecialchars($name) . " (Error code $error)";
}
}
}
?>
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>iPhone Upload</title>
<style>
body { font-size:18px; font-family:Arial,sans-serif; padding:20px; }
h1 { font-size:24px; }
input[type=file] { font-size:16px; padding:10px; margin-bottom:10px; width:100%; }
input[type=submit] { font-size:16px; padding:10px 20px; }
.message { margin-top:10px; font-size:16px; color:green; }
.error { margin-top:10px; font-size:16px; color:red; }
</style>
</head>
<body>
<h1>Upload Files</h1>
<?php
if (!empty($messages)) {
foreach ($messages as $msg) {
$class = strpos($msg, 'successful') !== false ? 'message' : 'error';
echo "<div class='$class'>$msg</div>";
}
}
?>
<form method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload[]" multiple accept="image/*,video/*"><br>
<input type="submit" value="Upload">
</form>
</body>
</html>

upload_max_filesize の変更

iphone で写真を撮るとサイズは 2.2 MB ありますが、php のデフォルトでは 2 MB が最大となっているので upload_max_filesize を変更する必要があります。

php.ini から upload_max_filesize を変更するのですが、少しややこしいのは PHP の CLI と Apache モジュール(mod_php)のバージョンが違う場合があることです。

コマンドラインから、

php -v
PHP 8.4.14 (cli) (built: Oct 27 2025 20:53:56) (NTS)

で php 8.4 なのに、info.php では 8.3 ということがありえます。

Apache の方を使うので、php 8.3 の php.ini を変更する方が簡単ですが、chatGPT は php 8.4 を Apache に設定する方法を提示してきました。

現在の PHP モジュールを無効化:

sudo a2dismod php8.3

PHP 8.4 モジュールを有効化:

sudo a2enmod php8.4

Apache を再起動:

sudo systemctl restart apache2

以下のような php プログラムを作って確認します。

/var/www/html/iphone_upload/info.php
<?php
phpinfo();

http://192.168.0.9/iphone_upload/info.php

php.ini を編集します。

sudo nano /etc/php/8.4/apache2/php.ini

以下のように設定。

upload_max_filesize = 20M
post_max_size = 20M

apache 再起動。

sudo systemctl restart apache2

iphone からアクセス

iphone の safari から linux mint の local host にアクセスします。

http://192.168.0.9/iphone_upload/

複数の写真をアップロードすることもできます。

動画もアップロードできますが、大きな動画の場合は upload_max_filesize を変更する必要があります。

iphone 16e で撮った写真です。

以前の iphone 7 の写真は、

こちらの方は色が少しおかしいですね。
やはり、iphone 16 の方が美味しそうです。

iphone のテザリングでは IP アドレスが異なる

iphone のテザリングでは少し工夫が必要なようです。

例によって ifconig で確認すると、

ifconfig
enp4s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.9 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::7d76:43ae:1178:282d prefixlen 64 scopeid 0x20<link>
ether a4:bb:6d:3d:96:1e txqueuelen 1000 (イーサネット)
RX packets 2707 bytes 184449 (184.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 132 bytes 20525 (20.5 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 19
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (ローカルループバック)
RX packets 10387 bytes 6208259 (6.2 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10387 bytes 6208259 (6.2 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.20.10.4 netmask 255.255.255.240 broadcast 172.20.10.15
inet6 2001:268:7230:92fc:b147:92a2:4691:29a2 prefixlen 64 scopeid 0x0<global>
inet6 2001:268:7230:92fc:cd78:843f:b819:2c2f prefixlen 64 scopeid 0x0<global>
inet6 fe80::d450:d8c1:9593:30a5 prefixlen 64 scopeid 0x20<link>
ether e8:6f:38:93:65:e3 txqueuelen 1000 (イーサネット)
RX packets 330724 bytes 416602984 (416.6 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 195798 bytes 24589502 (24.5 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

これって、おそらく有線でつながっている時は「192.168.0.9」で無線の場合は「172.20.10.4」なんだろうと思います。

でも、有線で繋がっていれば php を作らなくても画像をコピーできます。

で、「172.20.10.4」でアクセスしたら画像をアップロードできました。

音声ファイルもアップロード

写真・動画ファイルとさらに音声ファイルもクラウドを使わずにコンピュータにアップロードします。

php プログラムをちょっと変えるだけです。

<input type="file" name="fileToUpload[]" multiple accept="image/*,video/*"><br>

を以下のように変更すればOKです。

<input type="file" name="fileToUpload[]" multiple><br>

これで、写真・動画・音声ファイルをすべて無線でクラウドを使わずに自宅のコンピュータにコピーすることができるようになりました。