エス技研

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.

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

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

  関連記事

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

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

Selenium WebDriverでFirefoxをプライベートウィンドウ/Chromeをシークレットモードで起動する方法・言語はpython

Seleniumでは初期状態でブラウザを起動する   Seleniumでブラウザ …

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

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

mod_pagespeedでWebサイトを超簡単高速化・Google謹製の最終兵器

Webサイトの表示スピード高速化の最終兵器、Google謹製mod_pagespeedの解説です。レンタルサーバではX-Serverでしか利用できませんが、ワンクリックで高速化します。

SyntaxHighlighterを導入してソースコードを見やすくしてみました

PHP、HTMLなどのソースコードをブログで紹介するとき、SyntaxHighlighterを利用することで見やすく提供することが出来ます。

エックスサーバーで独自SSLは永久無料で取り放題。利用方法と理由を解説!

エックスサーバーでは独自SSLが無料でいくつでも設置できるように!しかも、国、都道府県などの数項目の入力と数クリックだけという超簡単!SSL化しない理由がない!

本当に?GMO系ロリポップ・ヘテムルを無料で運用する方法があった!

ロリポップ、ヘテムルを株主優待を利用して実質無料で運営しよう!という解説記事です。株主優待で提供されるサービスの内容を解説し、無料になる仕組みを解説します。

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

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

.htaccessのmod_deflateでファイル圧縮送信で高速化でSEO対策!

Page Speed Insightsの指摘事項であるファイルの圧縮送信の対応方法。処理内容の解説もあるけど、.htaccessにコピペするだけの簡単設置で効果抜群!SEOにも威力を発揮!

Gitで基本的なデプロイ(push、pullで本番公開)環境を作る手順解説
Gitで基本的なデプロイ(push、pullで本番公開)環境を作る手順解説

開発進行中の環境、公開中の環境にGitを導入する。その基本的な手続きを解説。Gitの導入、ローカルリポジトリを作成。リモートリポジトリを利用し、本番環境にデプロイする手続きを解説。