ホーム > フォーラム > 質問箱 > XCL2.1.4 > D3Downloadモジュールでアップロードしたファイルをダウンロードするとファイルが壊れる

D3Downloadモジュールでアップロードしたファイルをダウンロードするとファイルが壊れる
投稿者: lhope | 投稿日時: 2014/8/1 9:43 | 閲覧: 8919回
lhope

日頃より当サイトの情報でお世話になっております。

質問事項ですがD3Downloadモジュールをインストールし利用しておりますが、アップロードした
ファイルをダウンロードしファイルを開こうとするとファイルが壊れて開けません。
すべてのファイル種別が同現象ではなく、テキストデータやPDFファイルは正常に開きます。
逆にどうしても開かないファイル形式はエクセル、ワード、パワーポイントなどMicorosoftの
Office製品のファイルがダウンロードするとファイルが壊れており開けません。
ただしFTPソフトでアップロード先のファイルをダウンロードした場合には開くことができるため
D3Downloadでダウンロードした際に何か不具合があるようです。
あれこれ調べてはみたもののお手上げ状態のため、アドバイスをいただけたらと思います。

以下、使用環境を添付いたします。


サーバー環境変数
OS: Windows NT WEB34 5.2 build 3790
PHP: 5.2.9-2
MySQL: 5.0.83-community
XOOPS: XOOPS Cube Legacy 2.1.4

error_reporting: 0
display_errors: 0
memory_limit: 128
magic_quotes_gpc: 0
allow_url_fopen: 1
safe_mode: 0
open_basedir:

mbstring.language: Japanese
mbstring.detect_order: ASCII UTF-8
mbstring.http_input: pass
mbstring.http_output: pass
mbstring.internal_encoding: UTF-8
mbstring.script_encoding:
mbstring.substitute_character: none
mbstring.func_overload: 0
mbstring.encoding_translation: 0
mbstring.strict_encoding: 0

work directory: D:/CustomerData/webspaces/webspace_00133756/wwwroot/xoops.nansin.co.jp/xp/html/modules/happy_linux/cache


D3DOWNLOADインストール環境

   アップロード時の最大ファイルサイズ 10,240,000 byte
   アップロード先ディレクトリチェック
       アップロード先ディレクトリD:/CustomerData/webspaces/webspace_00133756/wwwroot/xoops.nansin.co.jp/xp/xoops_trust_path/uploads/d3downloads/OK
       リンクされていないアップロードファイル0 Files ( total 5 Files )
   キャッシュディレクトリチェック
       キャッシュディレクトリD:/CustomerData/webspaces/webspace_00133756/wwwroot/xoops.nansin.co.jp/xp/xoops_trust_path/cache/OK
   使用環境
       XOOPSXOOPS Cube Legacy 2.1.4
       LANGUAGEja_utf8
       SERVERMicrosoft-IIS/6.0
       PHP5.2.9-2
       MySQL5.0.83-community
       d3downloadsv1.49
       altsysv0.71OK
   php.iniディレクティブチェック
       file_uploadsOK
       upload_max_filesize10,485,760 byteOK
       post_max_size10,485,760 byteOK
       open_basedirnoting
       upload_tmp_dirOK
       memory_limit128M
       max_execution_time60s
       safe_modeoff
       register_globalsoff
       output_buffering4096
       output_handler
       default_charsetUTF-8
       multibyte extentionloaded
       mbstring.languagejapanese
       mbstring.encoding_translation0
       mbstring.internal_encoding
       mbstring.http_inputpass
       mbstring.http_outputpass
       mbstring.detect_order
       mbstring.substitute_characternone
       mbstring.func_overload 0
   MySQL CHARACTER SET
       version5.0.83-community
       character_set_clientutf8
       character_set_connectionutf8
       character_set_databaseutf8
       character_set_filesystembinary
       character_set_resultsutf8
       character_set_serverutf8
       character_set_systemutf8
   テーブルチェック
       d3downloads_catOK ( 4 Records )
       d3downloads_downloadsOK ( 5 Records )
       d3downloads_brokenOK ( 0 Records )
       d3downloads_unapprovalOK ( 0 Records )
       d3downloads_downloads_historyOK ( 1 Records )
       d3downloads_user_accessOK ( 12 Records )
       d3downloads_votedataOK ( 0 Records )
       d3downloads_mylinkOK ( 0 Records )

コメント(3)

Re: D3Downloadモジュールでアップロードしたファイルをダウンロードするとファイルが壊れる 
投稿者: lhope | 投稿日時: 2014/8/1 15:50
lhope

質問をさせていただきましたlhopeです。

こちらで質問を書かせていただいた後にいろいろ調べていて直接の原因がわかりました。
ファイルが開かない原因はどんなファイル形式にかかわらず、先頭より3バイトがスペースに
置き換わっていることが判明しました。
それによりテキスト文書などは頭先頭3バイトがスペースに置き換わった形で開くようですが
ワードやエクセルなどはファイルが壊れたと判断され開かないみたいです。

直接的な原因はわかったのですが、どこでファイルの先頭3バイトがスペースになっているのか
わからないため、どなたか対応方法を教えていただけないでしょうか。

よろしくお願いいたします。

Re: D3Downloadモジュールでアップロードしたファイルをダウンロードするとファイルが壊れる 
投稿者: lhope | 投稿日時: 2014/8/6 15:36
lhope

質問をさせていただきましたlhopeです。

問い合わせをさせていただいております件で、私なりにいろいろ調査して
かなり不具合となる箇所が特定されましたので不具合に対する追加情報として
書き込みを行いました。

1.アップロードされたファイルではデータは壊れていない。
  (FTPでダウンロードし、該当のファイル拡張子を着けるとアプリケーションで開ける)
2.D3DOWNLOADのモジュール内ではファイルリンクURL、ファイル名、サイズ及び
  ダウンロード情報としてのカテゴリIDなどはすべて正しく動作している。

3.結論からすると\xoops_trust_path\modules\d3downloads\include

  「download_functions.php」の最終的なダウンロード時にファイルが壊れている。

  具体的にはファイルの先頭3バイトが空白になっている。

以上質問をさせていただいている不具合調査で今までにわかった事をコメントさせて
いただきました。おそらくPHPでのファイルダウンロード処理時に問題があると
思われますが、PHPがよくわからず困っております。
どうかご助言をいただけますよう、よろしくお願いいたします。

自己解決しました 
投稿者: lhope | 投稿日時: 2014/8/8 11:04
lhope

D3DOWNLOADの各モジュールをチェックしていき、ダウンロードファイルが壊れる原因は
PHPにてダウンロードデータをバッファに転送するときの起きていることが判明しました。
正しい対処かは自信を持てませんがxoops_trust_path\modules\d3downloads\include
にあるdownload_functions.phpにてfopen命令の後に下記の命令を追加し不具合が解消しました。

ob_clean();
flush();

皆様、大変お騒がせしました。

    投票(0)

    新しいものから | 古いものから | RSS feed
     
    To Top