1258098482 PHPでZIPファイルを作成すると、解凍したアイコンの左下に時計のようなマークが表示されます。


・これは何を表しているのか
・このマークがついていることによって何か問題が発生するか
・このマークを消す方法があればその方法
・そもそもマークをつけずに圧縮することは可能か

ちなみに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や解凍レンジを使用した場合には発生しませんでした。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/11/16 09:46:29
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:makeworld No.3

回答回数75ベストアンサー獲得回数23

ポイント200pt

このマークは、ファイルのデータがオフラインの記憶装置へ移動されたことを示す、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に変更した方が良いかもしれません)


GetFileAttributes 関数

ZIP2 File Structure - FATR Chunk

id:Numeric

すごい!すごい情報のような気がする!

とりあえず試してみます!

---

できました!にっくきあいつを消すことに成功しました。

副作用があるのかないのかもまったくわかりませんが、

1452行目と2507行目のあいつらも変更してやりました。


> 0xFE49FFE0:0x41FF0010

この値が何を表してるのかもわかっちゃうと嬉しいんですが、贅沢ですかね。

とにかくこれで解決です。ありがとうございました!

2009/11/16 09:42:42

その他の回答2件)

id:makeworld No.1

回答回数75ベストアンサー獲得回数23

ポイント5pt

PCにインストールしているシェルエクステンションが反応して、左下のアイコンを表示していると思います。

レジストリ(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\ShellIconOverlayIdentifiers)に何が登録されているかを調べると、左下のアイコンを付けているアプリのヒントが得られると思います。

TortoiseSVNのアイコンオーバーレイが表示されない - espresso3389の日記

もし、ShellIconOverlayIdentifiers配下のレジストリキー名だけでは、アプリが特定できない場合は、各キーに登録されているデータ({750fdf0e-2a26-11d1-a3ea-080036587f03}など)をレジストリ内検索すれば、関連付けされているDLL名やシェルエクステンション名が見つかります。

id:Numeric

アイコンをつけているのは間違いなくPEARのZipライブラリ(もしくはzlib)なんです。


今回の質問の趣旨は、「アイコンをつけた犯人は誰だ!?」ではなく

「このアイコンは何だ!?」ということなので、ご理解願います。

(確かにそういうアプローチもありですが、今回は…ということで)

2009/11/15 23:37:42
id:Ehuto No.2

回答回数7ベストアンサー獲得回数0

ポイント5pt

http://office.microsoft.com/ja-jp/outlook/HA101324711041.aspx

より

履歴項目 (履歴項目 : Outlook に記録された作業や行動を表します。履歴項目は、アイテムへのショートカットとして記録されます。履歴項目とほかのアイテムを見分けるには、アイコンの左下に時計の絵が表示されているかどうかを確認します。)

http://homepage2.nifty.com/winfaq/fontstrouble.html

これで解決しますか?

id:Numeric

Outlookの話ではありません…ので、解決しませんでした。

2009/11/15 22:46:28
id:makeworld No.3

回答回数75ベストアンサー獲得回数23ここでベストアンサー

ポイント200pt

このマークは、ファイルのデータがオフラインの記憶装置へ移動されたことを示す、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に変更した方が良いかもしれません)


GetFileAttributes 関数

ZIP2 File Structure - FATR Chunk

id:Numeric

すごい!すごい情報のような気がする!

とりあえず試してみます!

---

できました!にっくきあいつを消すことに成功しました。

副作用があるのかないのかもまったくわかりませんが、

1452行目と2507行目のあいつらも変更してやりました。


> 0xFE49FFE0:0x41FF0010

この値が何を表してるのかもわかっちゃうと嬉しいんですが、贅沢ですかね。

とにかくこれで解決です。ありがとうございました!

2009/11/16 09:42:42
  • id:Numeric
    アイコンつきファイルをコピーするとアイコンが消えます。
    ということは大して重要なものではないのかなぁと思うんですが、やっぱり気持ち悪い。
    引き続き、回答よろしくお願いいたします。
  • id:Ehuto
    アイコン自体はOutlookの"履歴項目"のもので、
    フォントキャッシュの破損が原因ではないか、という意味です。
    Outlookは直接関係ありません。
    Outlookはインストールされていますか?
  • id:Numeric
    Outlook Expressがインストールされているようです。
    念のため、アイコンを確認しようと思いましたが方法がわかりませんでした。
    Expressにも「履歴項目」の機能があるのでしょうか?

    フォントキャッシュの破損が原因だとして、ファイルのコピーで直るようなものなんですかね。
  • id:makeworld
    失礼しました。シェルエクステンションは無関係でした。
    1回目の回答は0ポイントとしてください。
  • id:Numeric
    makeworldさま

    > このマークは、ファイルのデータがオフラインの記憶装置へ移動されたことを示す、Windows標準のマークらしいです。

    そういえばレジストリを調べてるとき「Offline Files」というのが出てきましたが、それのことですかね。
    関係ありそうで気になったんで調べてみたんですが、よくわからなかった…。
    まぁ、どちらにしてもそれだけでは解決には至らなかったわけで、今回は5ポイントとさせていただきました。
  • id:Numeric
    Ehutoさま

    そういえば昔つかってた環境では「フォントキャッシュの破損」が頻繁に起こってたなぁ…
    そんなことすら忘れてたので、なんだか懐かしい気持ちになりました。
    なりましたが、やはりこちらも5ポイントとさせてください。


    以上です。
    お二方、ご回答ありがとうございました!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません