0

この機会に質問していただきありがとうございます。答えを徹底的に探しましたが、見つかりませんでした。この問題が発生している理由について、皆さんが洞察を提供してくれることを願っています。

パズル:私のウェブサイトの訪問者がレビューのために記事を提出できるように、ドキュメントをアップロードするためのフォームを設定しました。フォームは、指定されたすべてのファイル拡張子(docx、.txt、PDFなど)で正しく機能していました。しかし、.txt以外の形式をアップロードしようとすると、突然、フォームにエラーメッセージが表示されました(奇妙なことに、これらは正常に機能します) )。ホストプロバイダーに確認しましたが、エラーログに何も記録されていません。

問題の関連コードは次のとおりです。

function saveUploadedFile() {
$allowedExts = array("pdf", "txt", "doc", "docx", "dot");
$extension = end(explode(".", $_FILES["cFile"]["name"]));

if (   (($_FILES["file"]["type"] == "application/pdf")
        || ($_FILES["cFile"]["type"] == "application/plain")
        || ($_FILES["cFile"]["type"] == "text/plain")
        || ($_FILES["cFile"]["type"] == "application/msword"))
        && in_array($extension, $allowedExts)) {

    if ($_FILES["cFile"]["error"] > 0) {
        return '';
    } else {
        $fileName = $_FILES["cFile"]["name"];
        return $fileName;
    }
}

return '';
}

// Write for us form
    else if (isset($_FILES['cFile']['name'])) {
        if ((isset($_POST['cName']) && !empty($_POST['cName']))
                && (isset($_POST['cEmail']) && !empty($_POST['cEmail']) &&     isValidEmail($_POST['cEmail']))
                && (isset($_POST['cMessage']) && !empty($_POST['cMessage']))
                && !empty($_FILES['cFile']['name'])) {

            $cName = $_POST['cName'];
            $cEmail = $_POST['cEmail'];
            $cMessage = $_POST['cMessage'];
            $fileName = saveUploadedFile();

            if ($fileName != '') {
                $to = 'contact@REMOVED.com';
                $subject = 'Article';
                $msg = 'Author: ' . $cName . "\n" . 'Message: ' . $cMessage;


                $fileSize = $_FILES['cFile']['size'];
                $handle = fopen($_FILES['cFile']['tmp_name'], 'r');
                $content = fread($handle, $fileSize);
                fclose($handle);

                $content = chunk_split(base64_encode($content));
                $uid = md5(uniqid(time()));

                $headers = "From: " . $cName . " <" . $cEmail . ">
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=\"" . $uid . "\" 

This is a multi-part message in MIME format. 
--" . $uid . "
Content-Type: application/octet-stream; name=\"" . $fileName . "\"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=\"" . $fileName . "\"

" . $content . "

--" . $uid . "
Content-type:text/plain; charset=iso-8859-1 
" . $msg . "
--" . $uid . "--";

                if (!@mail($to, $subject, $msg, $headers)) {
                    echo '<p class="failed validation">The e-mail could not be sent.     Please try again later</p>';
                } else {
                    echo '<p class="success validation">Your message has been sent</p>';
                }
            } else {
                echo '<p class="failed validation">Your file could not be uploaded.  Please make sure that you attached one of the following types of files: a plain text file, a MS Word document, a PDF file or a zip file</p>';
            }
        } else {
             echo '<p class="failed validation">Your file could not be uploaded.  Please make sure you have completed all required fields and that you have provided a valid email address.</p>';
        }
    }

表示されるエラーメッセージは次のとおりです。「ファイルをアップロードできませんでした。プレーンテキストファイル、MS Wordドキュメント、PDFファイル、またはzipファイルのいずれかの種類のファイルを添付してください。」

このコードが.txtファイルを受け入れるが、.docxまたはPDFを受け入れないのはなぜですか?

ありがとうございました!

4

2 に答える 2

0

["type"] がうまく機能しないことをどこかで読みました。コードのその部分を削除することをお勧めします。

于 2013-03-01T12:44:35.357 に答える
0

次のようにコードを編集する必要があると思います。

if (in_array($extension, $allowedExts)) {
    if ($_FILES["cFile"]["error"] > 0) {
        return '';
    } else {
        $fileName = $_FILES["cFile"]["name"];
        return $fileName;
    }
}
于 2013-03-04T07:38:07.183 に答える