エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


FTPでダウンロード時にファイルが重複するため上書きしますか?と表示される問題

      2017/03/11

FTPダウンロード時にファイルが重複する

 

「ファイルをダウンロードすると『重複するので上書きしますか?』といわれる問題」って何?

 
例えば、WordPressで運用しているサイトをバックアップしようと、FTPツールで、ファイルをダウンロードしようとしたときに、
「指定されたディレクトリにはすでに「******」が存在します。
 上書きするか、このファイルの転送をスキップするか選択してください。」
といったメッセージが出ることがあります。
 
下記画像は、WinSCPという FTPクライアントツールを利用してファイルをダウンロード使用したときに表示される画面です。
20160815_web_01
 
これの原因とこれによって発生する問題点について改めて確認をしてみました。
 
 

「ファイルをダウンロードすると『重複するので上書きしますか?』といわれる問題」の原因

 
「ファイルをダウンロードすると『重複するので上書きしますか?』といわれる問題」が発生する原因は、Linuxと Windows、MacOSとのファイルの管理システムが違うためです。
 
具体的には、Linuxは、大文字小文字を別の文字として認識しますが、Windows、MacOSでは大文字小文字を区別せず同じ文字として認識するためです。
(Windows、MacOSは、大文字小文字を利用してファイル名を付けると、表示上は大文字小文字の区別をつけることができますが、大文字小文字が違うだけでは同じファイルとして認識します。)
 
 
具体的には、abc.gif、Abc.gif、ABC.gif というファイルがあったとします。
Linuxでは、別のファイルとして認識しますので、同じフォルダの中に置くことができます。
ですが、
Windows、MacOSでは、同じファイルとして認識しますので、同じフォルダの中に置くことができません。
そのため、ダウンロードしようとすると、上書きしますか?と聞かれることになるわけです。
 
 

Linuxとは?

 
一般的にパソコンといえば、OSは、Windowsか、MacOSかのいずれかになります。
 
これに対して、Webサイトなどを構築するサーバシステムの OSには、UNIX系の Linuxといわれる OSが使われています。
 
Linuxは、フリーのオープンソースであることや、カスタマイズが可能なことなどいろいろなメリットがあるため、さまざまな用途のシステムに利用されていますが、その代表的な用途の一つが Webサイトを構築する Webサーバの OSとしての利用になります。
 
一般的なレンタルサーバの OSには Linuxが使われていると考えておいて間違いないでしょう。
 
 


 

「ファイルをダウンロードすると『重複するので上書きしますか?』といわれる問題」の影響

 
先に説明しましたが、abc.gif、Abc.gif、ABC.gif のように、大文字小文字が混ざったファイルをダウンロードしようとすると、「重複するので上書きしますか?」と訊かれてしまいます。
 
これを上書きしてしまうと、具体的にどのような影響があるかを確認しましょう。
 
かなり省略していますが、下記のように、「abc.gif、Abc.gif、ABC.gif」の画像ファイルを imgタグで編集をします。
 

 
画像ファイルは、Windowsと MacOSの場合は、大文字小文字の区別がありませんので、「abc.gif」のみを置きます。
 
そして、これをブラウザで表示させると、何も問題なくすべての画像が表示されます。
HTML上では 大文字小文字を区別して記述しているものの、それの対応を行う OS側が大文字小文字を区別しないため、問題なく表示される、ということです。
(XAMPP経由であっても直接ファイルをブラウザで表示しても同様です。)
 
20160815_web_02
 
 
対して、Linuxの環境では、abc.gif、Abc.gifのファイルを置いて、ABC.gifはない状態にしてみました。
そして、ブラウザで表示させると、下記のようにファイルがない「ABC.gif」は表示されませんでした。
 
20160815_web_03
 
これがまさに、Linuxが、大文字小文字を区別するために発生する現象です。
 
 
つまりは、大文字小文字を区別してサイトを構築した場合は、Webサーバから FTPでファイルをダウンロードをする際に、「重複するので上書きしますか?」と訊かれ、上書きしてダウンロードすると、大文字小文字が統一された 1ファイルになってしまいます。
 
そして、その状態から改めて FTPで Webサーバにファイルをアップロードすると、大文字小文字が区別されたファイルがなくなっているため、ファイルのリンクが切れた状態になってしまいます。
 
 
Windowsや MacOSのパソコンで静的な HTMLファイルを生成する作り方の場合は、そもそも大文字小文字を区別して作成することができませんので、この問題は起こりません。
 
ですが、WordPressのようにファイルをアップロードする機能を有した CMSを利用する場合、アップロードされたファイルが格納される場所は一つの同じフォルダになる場合が多々ありますので、大文字小文字を気にせずに付けていると、一つのフォルダの中に大文字小文字が違うだけの同じファイル名のファイルが存在することになってしまいます。
 
 

「ファイルをダウンロードすると『重複するので上書きしますか?』といわれる問題」の対応方法

 
「重複するので上書きしますか?」と訊かれる問題に対しての解決方法は以下のようなものがあります。
 

  • 大文字小文字を統一する(基本的にファイル名は小文字で付ける)
  • パソコンの環境を Linuxにする
  • サーバ上で zip圧縮し、パソコン上では展開(解凍)しない

 
「解決方法は以下のようなものがあります」と書いたものの、実質的には 1つ目の「大文字小文字を統一する(基本的にファイル名は小文字で付ける)」しかないんですよね。
 
Windowsでも MacOSでも大文字小文字を区別してファイル名を付けることは可能ですが、ファイル名のアルファベットを付ける場合は「すべて小文字!」と決めてしまうことですね。
 
会社などであっても社内全体で「すべて小文字!」と決めてしまうしかないですね。
 
 
そして、今回問題になったように大文字小文字が混在することでファイルが重複した場合は、一つ一つアナログ的に修正していくしか方法がないですね。
(何か便利なツールをご存知の方は教えてください!!!)
 
もし、対象のサーバが sshが使えて、コマンドラインでの操作ができる方ならば、3項目のサーバ上で zip圧縮し、それをそのまま新しいサーバに移動させて展開するという方法が取れます。
詳しいやり方は、割愛します。
sshが使えるくらいの方ならば詳しい説明は必要なく、詳しい説明が必要な方はここではとても書ききれませんので...
 
 

ファイル名が文字化けを起こしてダウンロードできない

 
ファイルが重複する問題については前項までで終了ですが、ファイルをダウンロードするときに発生する問題として、ファイル名が文字化けをしていることが原因でダウンロードできない、という問題が発生する場合もあります。
 
これは、ファイル名に日本語を使っている(半角英数字以外の文字を使っている)場合に発生します。
日本語(全角文字、2バイト文字)は、日本語を表示するために Shift-Jis、UTF-8などの文字コードを指定する必要があるのですが、この文字コードが違う場合に文字化けを起こします。
 
Webサイトを構築する場合に日本語のファイル名を使うことはほぼありませんが、WordPressなどで記事を投稿する際に利用する画像の場合は、ついつい日本語のファイル名まま使用してしまう場合が少なくありません。
 
WordPressなどの CMSをそのまま利用する場合は問題になりませんが、この記事で紹介しているファイルをダウンロードしてくる場合に問題が発生します。
 
そのため、アップロードする画像のファイル名は半角英数字を使って付ける方がトラブルは少なくなります。

 - プログラミング・Web関連技術

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

Beautiful Soupを利用してPythonでスクレイピングを行う環境構築方法の解説

BeautifulSoupはPythonでスクレイピングを行う際に便利なツール。インストール方法も簡単。ただ、事前にpipのインストールが必要でその解説もしてます。

直リンクとは何か?直リンクとディープリンクの違いと著作権問題

直リンクは著作権違反なのか?議論の前にまず「直リンク」の意味を正しく理解しよう。直リンクは他のサイトの画像を読み込む、ディープリンクなど多様な意味がある。

XSERVERにCakePHP3をインストール。コマンドラインのPHPのバージョンを変更する方法で解決

XSERVERにCakePHP3をインストールするときに問題となるのはサーバーパネルとSSH接続の時とで認識されるPHPのバージョンの違いがあるため。その解消方法を解説する。

直リンク禁止の.htaccessを超分かりやすく解説。日本語じゃなくてPHPで説明

直リンクを禁止する.htaccessの記述内容を日本語ではなくPHPで解説!私自身もこの方法ですっかり理解できました。.htaccessって簡単!って思えますよ。

So-netのレンタルサーバHSはヤバイ・借りてはいけないレンタルサーバリスト

餅は餅屋。サーバはサーバ屋が提供するサービスを利用するべきという記事で、単独でSo-netを紹介。OEMでサービスの提供を受けているだけなので何とも残念すぎる内容。

Selenium WebDriver、Pythonをインストールしブラウザ自動操作の環境構築手順のまとめ

ブラウザを自動操作しテストを実行するロボットをselenium WebDriver+Pythonの環境を構築し、動作確認までの手順のまとめ。初心者向けに詳細解説。サンプルソースも。

PythonでMySQLへの接続ライブラリMySQL-pythonの簡単インストール方法

PythonはMySQLに接続するライブラリは別途インストールが必要。なのでMySQL-pythonライブラリのインストール方法とサンプルスクリプトで動作検証までを解説。

.htaccessのmod_expiresでブラウザキャッシュで高速化でSEO対策!

Page Speed Insightsの指摘事項のファイルのブラウザキャッシュの設定方法。解説もしてるけど、.htaccessにコピペするだけの簡単設置で効果抜群!SEOにも威力を発揮!

コピーコンテンツ対策.htaccessで直リンク禁止しリダイレクトで対応

不正なコピーコンテンツからの直リンクを拒否する.htaccessの設定方法。拒否するサイトを指定、許可するサイトを指定する方法、単純な拒否と画像の差し替えを解説。

ブラウザのキャッシュを活用するの対策!広告バナーを消して表示を高速化

あなたのサイトが遅いのはバリューコマースのバナーではないですか?バリューコマースのバナーを外すだけでmod_deflateとmod_expiresを設定するより効果があります!