エス技研

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.

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

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

  関連記事

EストアのショップサーブのWordPressサービスにメリット無し

ショップサーブのオプションサービスのWordPressを使ってみましたがデータベースには直接触れず使えないサービスでした。

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

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

chromedriver.exe - ディスクがありませんと出てSeleniumの設定が上手くいかない
chromedriver.exe – ディスクがありませんと出てSeleniumの設定が上手くいかない

Selenium WebDriverを使ってChromeを自動操作する仕組みを作る際、chromedriver.exeを利用しますが、ディスクがありません、というエラーが発生する場合があります。その対処方法を解説します。

X Serverへの引越しの注意点まとめ。ロリポップとの違いと対処方法 6事例

ロリポップからX Serverに引越し。ロリポップとX Serverの違いに注目することでX Serverの設定方法を明確にします。またX Serverならではの設定ポイントなども解説。

Pythonをコマンドラインで実行。全角文字(日本語)を引数にする場合の対処方法

Pythonをコマンドラインで実行する際、引数を付与して実行する方法の解説。その時問題となる日本語(全角文字)を利用する方法を解説。Windows環境での解説。

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

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

.gitignoreを更新しても反映されないときは「git rm -r --cached .」でキャッシュを削除
.gitignoreを更新しても反映されないときは「git rm -r –cached .」でキャッシュを削除

gitの.gitignoreを変更しても記述内容が反映されない時がある。それはGitのキャッシュが残っているため。そんなときは「git rm」コマンドを使ってキャッシュを削除すれば解決する。

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

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

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

Selenium WebDriverを使ってChromeを自動操作する環境を構築する手順のまとめ。使用するPythonのインストールから、サンプルスクリプトの動作確認までを詳細解説。

ロリポップからX-Serverに引越し。サーバの月額費用が増えても求めた理由は?

ロリポップからX-Serverに引越すその理由とは?SEOの観点からも少しでもサーバレスポンスが早いサーバが求められロリポップでは限界を感じたからです。