・これは何を表しているのか
・このマークがついていることによって何か問題が発生するか
・このマークを消す方法があればその方法
・そもそもマークをつけずに圧縮することは可能か
ちなみにZIPファイルの作成にはPEARのArchive::Zipを使用しました。
require_once("Archive/Zip.php");
$objZip = new Archive_Zip("zip.zip");
$objZip->create("zip.txt");
なお、テスト環境はこんな感じです。
Windows XP Pro SP3
PHP 5.2.9
zlib 1.2.3
Zip.php 1.2
解凍ソフト Lhaplus 1.57、およびWindowsの標準機能(Zipフォルダからファイルをドラッグして解凍した場合のみ)
※+lhacaや解凍レンジを使用した場合には発生しませんでした。
このマークは、ファイルのデータがオフラインの記憶装置へ移動されたことを示す、Windows標準のマークらしいです。ファイルの属性にFILE_ATTRIBUTE_OFFLINEが設定されていると表示されます。
FILE_ATTRIBUTE_OFFLINEは、「リモート記憶域」サービスが利用する属性なので、リモート記憶域を使用していないパーティションでは、何も影響は無いはずです。
このマークを消すには、ファイルのFILE_ATTRIBUTE_OFFLINE属性をクリアすればOKですが、エクスプローラ等からそのような操作はできないので、コメント欄で書かれているように、ファイルをコピーするのが簡単だと思います。
FILE_ATTRIBUTE_OFFLINE属性が付いてしまう原因は、Zip.phpのバグです。
Zip.phpの1353行目の
$p_header['external'] = (is_file($p_filename)?0xFE49FFE0:0x41FF0010);
を、
$p_header['external'] = (is_file($p_filename)?0x00000020:0x00000010);
のように変更すれば、解凍したファイルにマークは付かなくなります。
(同様に1452行目と2507行目の0x41FF0010も0x00000010に変更した方が良いかもしれません)
PCにインストールしているシェルエクステンションが反応して、左下のアイコンを表示していると思います。
レジストリ(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\ShellIconOverlayIdentifiers)に何が登録されているかを調べると、左下のアイコンを付けているアプリのヒントが得られると思います。
TortoiseSVNのアイコンオーバーレイが表示されない - espresso3389の日記
もし、ShellIconOverlayIdentifiers配下のレジストリキー名だけでは、アプリが特定できない場合は、各キーに登録されているデータ({750fdf0e-2a26-11d1-a3ea-080036587f03}など)をレジストリ内検索すれば、関連付けされているDLL名やシェルエクステンション名が見つかります。
アイコンをつけているのは間違いなくPEARのZipライブラリ(もしくはzlib)なんです。
今回の質問の趣旨は、「アイコンをつけた犯人は誰だ!?」ではなく
「このアイコンは何だ!?」ということなので、ご理解願います。
(確かにそういうアプローチもありですが、今回は…ということで)
http://office.microsoft.com/ja-jp/outlook/HA101324711041.aspx
より
履歴項目 (履歴項目 : Outlook に記録された作業や行動を表します。履歴項目は、アイテムへのショートカットとして記録されます。履歴項目とほかのアイテムを見分けるには、アイコンの左下に時計の絵が表示されているかどうかを確認します。)
http://homepage2.nifty.com/winfaq/fontstrouble.html
これで解決しますか?
Outlookの話ではありません…ので、解決しませんでした。
このマークは、ファイルのデータがオフラインの記憶装置へ移動されたことを示す、Windows標準のマークらしいです。ファイルの属性にFILE_ATTRIBUTE_OFFLINEが設定されていると表示されます。
FILE_ATTRIBUTE_OFFLINEは、「リモート記憶域」サービスが利用する属性なので、リモート記憶域を使用していないパーティションでは、何も影響は無いはずです。
このマークを消すには、ファイルのFILE_ATTRIBUTE_OFFLINE属性をクリアすればOKですが、エクスプローラ等からそのような操作はできないので、コメント欄で書かれているように、ファイルをコピーするのが簡単だと思います。
FILE_ATTRIBUTE_OFFLINE属性が付いてしまう原因は、Zip.phpのバグです。
Zip.phpの1353行目の
$p_header['external'] = (is_file($p_filename)?0xFE49FFE0:0x41FF0010);
を、
$p_header['external'] = (is_file($p_filename)?0x00000020:0x00000010);
のように変更すれば、解凍したファイルにマークは付かなくなります。
(同様に1452行目と2507行目の0x41FF0010も0x00000010に変更した方が良いかもしれません)
すごい!すごい情報のような気がする!
とりあえず試してみます!
---
できました!にっくきあいつを消すことに成功しました。
副作用があるのかないのかもまったくわかりませんが、
1452行目と2507行目のあいつらも変更してやりました。
> 0xFE49FFE0:0x41FF0010
この値が何を表してるのかもわかっちゃうと嬉しいんですが、贅沢ですかね。
とにかくこれで解決です。ありがとうございました!
すごい!すごい情報のような気がする!
とりあえず試してみます!
---
できました!にっくきあいつを消すことに成功しました。
副作用があるのかないのかもまったくわかりませんが、
1452行目と2507行目のあいつらも変更してやりました。
> 0xFE49FFE0:0x41FF0010
この値が何を表してるのかもわかっちゃうと嬉しいんですが、贅沢ですかね。
とにかくこれで解決です。ありがとうございました!