-1

PHP でファイルをアップロードすると、xlsx ファイルのタイプが間違っています。

タイプがファイル名であることを教えてくれます

Array ( 
    [name] => report.xlsx 
    [type] => /folder/files/report/april_2013.xlsx 
    [tmp_name] => E:\path\to\temp\folder\phpCD1B.tmp
    [error] => 0
    [size] => 12433
) 

何か案は?

やあ

私が使用しているコードは

ファイルの閲覧・表示

    <form enctype="multipart/form-data" method="POST" action="update_comp.php" name="myform2">
<label>Upload Files ( PDF,CSV or EXCEL only ) </label>
<input type="file" name="file">
</form>

ファイル update_comp.php

include ("filesFunctions.php"); 
if(isset($_FILES["file"])){
            $file = $_FILES["file"];
print_r($file);exit;
            $upload = new filesFunctions();
            $id = $upload->uploadFiles($file,'dairy');        

        }

print_r() ステートメントは印刷します

Array (
    [name] => report.xlsx
    [type] => /folder/files/report/april_2013.xlsx
    [tmp_name] => E:\folder\to\temp\php5ACD.tmp
    [error] => 0
    [size] => 12433
) 

これはxlsxファイルでのみ発生することに注意してください。他のすべてのファイルは正常に機能します

4

2 に答える 2

2

キーはファイルのtypeMIME タイプを提供しますが、この情報はブラウザによって提供されます。そのような:

ただし、この MIME タイプは PHP 側ではチェックされないため、その値を当然とは見なしません。

$_FILESただし、スーパーグローバルが読み取り専用ではないことには何の価値もありません。他のスーパーグローバルと同様に、PHP コードで上書きできます。

$_FILES['file']['type'] = 'Lorem ipsum dolor sit amet';

をいじっていないと仮定すると$_FILES、最初の明らかなトラブルシューティング手順は、ブラウザーのデバッガー ツールを起動し、送信される POST データを検査することです。それが文字列のソースである場合、PHP のことは忘れて構いません。

お使いのブラウザが何なのかわかりません。Google Chrome (他のブラウザーでも同様の手順が適用されます) では、アップロード フォームを開き、F12[ネットワーク] をクリックします。

クロム - ネットワーク

ファイルを選択してフォームを送信すると、リクエストが表示されます。

Chrome - 送信

ノードを展開すると、データが表示されます (application/vnd.openxmlformats-officedocument.spreadsheetml.sheetこの場合)。

Chrome-ペイロード

この MIME タイプは通常、Microsoft Office インストーラーによって構成されます。含まれ/folder/files/report/april_2013.xlsxている場合は、修復または再インストールが必要になる場合があります。

于 2013-06-21T09:58:59.803 に答える
1

完全に間違ったファイルですか?名前: report.xlsx その後、@h2ooooooo が言ったように april_2013.xlsx と言う。

別のファイルからコードをコピーしただけだと思います。

于 2013-06-20T08:07:41.480 に答える